Gogs 윈도우 서버 설치 & 서비스 등록 & 외부 접속 가능하게 만들기
소스 및 이슈 관리 목적으로 몇 년전에는 Redmine + SVN을 사용했었는데 Git을 사용하다가 익숙해져서 개인적인 용도로도 Git을 사용해 보고 싶어졌다.
뭐 여러가지 Git 서버와 여러가지 이슈트래커들이 잔뜩 있던데 일일이 다 확인해 볼 수는 없는 노릇이고......ㅡㅡ;;
사람들이 많이 사용하는 것들 몇 가지 검색을 해 보니 일단 gitlab이 가장 많이 사용되는 것 같긴 했지만 이건 윈도우를 지원하지 않는다.
(https://stackshare.io/stackups/gitbucket-vs-gitlab-vs-gogs or https://gitbucket.github.io/gitbucket-news/gitbucket/2017/03/29/benchmark-of-gitbucket.html)
이런 저런 고민끝에 선택한 것이 Gogs.
가벼워 보이고 gitlab 다음으로 많이 쓰이는 것 같고, 윈도우에서도 설치가 된다고 하길래 일단 삽질 시작!!
0. Prerequisites(https://gogs.io/docs/installation)
시작하기 전에 필요한 준비물이 몇 가지 있다. DB를 뭘로 쓸 것인지 정해야 하고 윈도우용 Git을 설치해 줘야 하며, 윈도우에는 없는 SSH서버를 구해야 한다.
(단, SSH서버는 옵션사항. 당장은 필요하지 않으니 일단 나중으로 미룬다. ^^;;)
난 DB도 MySQL이니 PostgreSQL이니 거창하게 필요없고 그냥 파일 하나로 저장하는 SQLite가 가장 심플하고 다루기 편하여서 이걸로 선택하였다.
윈도우용 Git(https://git-scm.com/downloads)은 해당 사이트에서 윈도우용으로 다운받은 인스톨러 버전을 그냥 디폴트로 죽죽 넘어가며 설치하여 간단하게 끝냈고,
SQLite은 https://www.sqlite.org/download.html에서 sqlite-tools-win32-x86-3200100.zip으로 다운받는다.
DB파일을 만들어 주는 부분까지는 직접 해 줘야 하는데 이렇게 하려면 커맨드라인 툴이 있어야 하기 때문이다.
압축 풀고 PATH에 등록해 두면 일단 미리 준비해야 하는 것은 여기까지.
1. Install Gogs(https://gogs.io/docs/installation#install-gogs)
여기서 바이너리로 인스톨 할 지, 소스를 받아 직접 컴파일하여 사용할 지를 결정해야 하는데 이걸 고민해야 하는 이유가 있다.
Gogs는 실행파일을 명령 프롬프트에서 실행해 주는 것으로 시작하게 되는데, 이러면 다시 부팅을 할 때마다 이렇게 수동으로 실행을 해 줘야 한다.
그래서 윈도우 서비스로 등록하여 사용하는 방법(https://gogs.io/docs/installation/run_as_windows_service) 또한 설명하고 있는데,
여기서 두 가지 옵션을 제공하고 있고, 이것 때문에 바이너리 버전이나 소스 버전을 선택해야 할 필요가 있는 것이다.
NSSM이라는 프로그램을 따로 사용하지 않고, 윈도우의 builtin 커맨드를 이용하여 서비스화하려면 소스를 받아 'miniwinsvc' tag를 적용하여 빌드해 줘야 한다.
처음에 이걸 몰라서 몇 번 삽질하다가 그냥 NSSM을 이용하는 방법으로 진행하였다.
따라서, https://gogs.io/docs/installation/install_from_binary으로 이동~
현재 최신 버전인 https://dl.gogs.io/0.11.29/windows_amd64.zip를 다운받아 압축 풀고 명령 프롬프트에서
'>gogs.exe web' 해 주면 설정하는 화면을 브라우저로 볼 수 있게 된다.
그런데, '데몬 사용자 계정'이란게 눈에 띈다. 따로 gogs를 실행시켜 줄 수 있는 사용자 계정이 필요한가 싶어 사용자 추가로 gogs계정을 만들어 주었다.
혹시 퍼미션 문제나 뭐 이런 접근 권한과 관련된 문제가 또 나올 수도 있지 않을까 싶어 생성한 gogs계정으로 로그인하여 셋업과정을 진행하였다.
그래서 위 그림처럼 SQLite3를 선택하였고, gogs의 압축을 풀어놓은 디렉토리 아래에 'data' 디렉토리를 만들고 그 안에 gogs.db파일을 sqlite3.exe를 이용하여 생성해 주었다.
(명령 프롬프트에서 '>sqlite3.exe' => '.open gogs.db' 순으로 실행)
저장소 최상위로 사용될 'gogs-repositories'도 gogs폴더 아래에 생성하여 주었고 SSH는 일단 사용하지 않을 거라서 '22'를 지우고 비워두었다.
그 아래에 있는 항목들은 다 그대로 두고 설치시작!! 금방 끝난다.
설치가 성공적으로 끝나면 로그인하라는 화면이 나올거다. 여기서 최초 등록하는 계정이 관리자 계정이 된다.
2. 서비스 등록(https://gogs.io/docs/installation/run_as_windows_service)
서비스로 등록하기 전에 무슨 host를 등록하라고 하고 뭐 이것저것 고치라고 하는데 해 보니까 hosts파일에 gogs를 127.0.1.1의 호스트로 등록하는 것은 굳이 필요없는 부분인 것 같더라. 우리한테 필요한 건 'gogs\custom\conf\app.ini' 요 파일을 잘 고치는 거다.
설명과 같이 RUN_USER를 gogs(위의 데몬 사용자 계정.. 근데 윈도우즈에서는 별로 상관없는 듯..??)로 입력해 주고, '[server]'에서 정의되어 있는 항목들을 채워넣는다.
(default ini파일이 https://github.com/gogits/gogs/blob/master/conf/app.ini 이거다. 보고 따라해도 괜찮을 듯...)
일단 포트는 80포트를 iis에서 사용하고 있어서 8080으로 바꿔 주었고, 나머지는 원래대로 사용해도 무방하다 지금은. 어차피 나중에 뜯어 고칠거라서...ㅎㅎ
여기까지 수정한 내용을 저장해 주고 NSSM을 이용하여 서비스를 등록하기 위해 https://gogs.io/docs/installation/run_as_windows_service#use-nssm를 참고한다.
설명대로 nssm.exe가 있는 위치를 PATH에 등록해 주고 관리자 권한으로 명령 프롬프트 실행하여 '>nssm install gogs' 해 준다.
그림과 같이 죽 따라가면서 path만 주의하여 입력할 것들 입력해 주면 끝.
제대로 서비스 등록이 되면 요런 화면이 나온다.
3. 외부 접속 가능하게 만들기
여기에서 또 의도치 않게 삽질을 많이 했다. 요점은 공유기로부터 할당받은 아이피를 이용하여 gogs를 실행해 줘야 한다는 것이다!!
(이 쉬운 한 마디를 위해 얼마나 삽질을 했는지 원......ㅠㅠ)
app.ini에서 127.0.0.1:3000으로 접속이 되도록 하여 gogs가 실행이 되었으면 현재 로컬PC에서 브라우저로 'http://127.0.0.1:3000'은 잘 동작한다.
그럼 어쨌든 포트를 3000으로 사용하고 있으니 공유기 설정에서 3000으로 포워딩을 해 주면 되어야 할 것 아닌가!!!!!
하지만, 구현상의 문제인지 코드를 살펴보지 않아 정확하게 말할 순 없지만 단순 포트포워딩으로는 외부에서 접속이 되질 않았다.
앞서 언급한 대로 HTTP_ADDR을 공유기로부터 할당받은 IP, 즉 '192.168.0.10'과 같은..것으로 바꿔줘야 한다.
결국 이런 모양이 되는 것이다. 이렇게 수정한 다음 서비스를 다시 시작해 주면 외부에서 접속이 가능하다. 물론 공유기 설정은 저 상황에 맞게 알아서....^^;
[server]
DOMAIN = gogs
PROTOCOL = http
HTTP_ADDR = 192.168.0.11
HTTP_PORT = 8080
ROOT_URL = http://192.168.0.11:8080/
DISABLE_SSH = true
OFFLINE_MODE = true
여기서 한 가지만 더!!
ROOT_URL은 대시보드에서 저장소를 생성하고 나면 나오는 URL에 사용이 되는 것 같다. 이걸 자신의 DDNS 도메인으로 표시를 해 주면 대시보드에서도 좀 더 모양새가 보기 좋게 나오고 클라이언트에서 git clone할 때도 같은 도메인을 이용하여 받아올 수 있게 된다.
[server]
DOMAIN = gogs
PROTOCOL = http
HTTP_ADDR = 192.168.0.11
HTTP_PORT = 8080
ROOT_URL = http://mytistory.net:8080/
DISABLE_SSH = true
OFFLINE_MODE = true
대시보드에서 저장소를 비공개로 만들면 클라이언트에서 git clone하여 받아올 때 받아올 때 뿐만 아니라 이 git 서버에 접근이 필요할 때마다(clone, push, pull 등등) username과 password를 물어보는 과정이 들어간다.
(이거 은근히 귀찮네..ㅠㅠ 이래서 ssh를 쓰나보다...에휴.....)
공개면 뭐 그냥 url만 알면 다 받는거고..ㅎㅎ
여기까지~
아우~~~~~ 속시원하다!! 잘 되니까 참 보기 좋네!! *^^*
일단 좀 써 보고 보안을 위해 SSH에 도전을.....ㅎ
'Development' 카테고리의 다른 글
Cortex M0의 unaligned memory access 지원 불가 (0) | 2019.11.01 |
---|---|
WSL에서 윈도우의 COM포트 사용하기 (0) | 2019.10.02 |
리눅스 커널 소스 컴파일 (0) | 2017.09.13 |
[펌] ANDROID LESSON SEVEN: AN INTRODUCTION TO VERTEX BUFFER OBJECTS (VBOS) (0) | 2016.08.30 |
[펌] 3D Graphics with OpenGL By Examples (0) | 2016.08.26 |