Log Stash

as an Industrial Personnel

프로그래밍/삽질

라즈베리파이에 git 호스팅 서비스 Gogs 간단 설치기

SavvyTuna 2017. 2. 19. 16:01

원래 평소에는 비공개 저장소 생성에 개수 제한이 없는 bitbucket을 내 ‘습작코드 저장소’로 자주 사용하고 있었다. 그렇게 계속 사용하다 보니 내 bitbucket 대쉬보드는 몇몇 진짜 협업용 저장소들과 한번 쓰고 커밋 한 두번 하다 버린, 그렇다고 지우긴 아쉬운 저장소들이 섞여보여 꽤나 대단한 카오스 상태가 되어버렸다.


그러던 와중에 ‘어차피 이 습작 저장소들은 나만 종종 들여다보고, 용량도 별로 안되니 그냥 내가 지금 아이패드 스트리밍 서버로만 쓰고 있는 라즈베리파이에 통짜로 백업해놔야겠다.’ 라고 생각이 들었고, 프로젝트 하나를 다운받아 폴더 그대로 복사 & 붙여넣기를 하던 도중에 갑자기 수십개의 저장소를 이렇게 옮겨야 한다는 사실이 귀찮아지면서 ‘그냥 이렇게 짱박아놓으면 어차피 접근성도 어렵고, 지금도 습작 코드들은 계속 만들어내고 있는데 이것들 하나하나 복붙해서 옮기지 말고 그냥 라즈베리에 설치형 깃 호스팅 서비스 하나 설치해서 그걸 나의 개인 깃헙처럼 사용하자’ 라는 생각을 하게 되었다.


설치형 서비스 중에 제일 괜찮다고 생각한 Gitlab을 라즈베리파이에 올려서 쓸 수 있다는 소식을 듣고 설치를 시도해봤는데 2013년산 라즈베리파이에겐 너무 무거웠는지 설치에 매번 실패했다.


그래서 ‘좀 더 가벼운 설치형 서비스가 혹시 없을까’ 해서 구글링을 해보니 Lightweight alternatives to Gitlab?의 레딧 쓰레드를 발견할 수 있었고, 거기에서 누군가가 Gogs를 언급하는 글에 댓글로

actually use it on my RPi and it’s awesome

라고 추천하는 것에 이끌려서 gogs를 설치해보기로 했다.


설치

1. 데이터베이스 설치

다른 설치형 서비스처럼 Gogs에서 다루는 데이터들을 담기 위해선 DB가 필요하다. Gogs에서 지원하는 DB의 종류는 MySQL, PostgreSQL, SQLite3, TiDB가 있는데, 별다른 모험을 하기 싫어서 그냥 MySQL을 설치했다.


당연한 말이지만, 이미 해당 DB 시스템이 설치 되어있으면 테이블만 추가하는 방향으로 가도 상관은 없을 듯.

$ sudo apt-get install mysql-server --fix-missing

이렇게 mysql을 설치한다. 참고로 mysql root 계정 비밀번호 설정할 때 특수문자가 들어가 있으면 나중에 서비스 세팅 (systemd)할때 힘들다. 그냥 간단하게 하자. 아니면 다른 계정을 쓰던지.

$ mysql -uroot -p

이렇게 DB에 root로 접속한 다음,

> CREATE DATABASE gogs

이렇게 gogs라는 이름의 db를 만들어주면 된다.


나는 공식 설치가이드 문서를 안 보고 이렇게 했는데, gogs 프로젝트 폴더 안에 있는 스크립트 중 scripts/mysql.sql을 실행시켜도 된다고 한다.


2. Gogs 설치

일단 다운로드 링크에서 플랫폼에 맞는 바이너리를 받는다. 나는 라즈베리파이에 설치하는것이니 ‘Raspberry Pi’옆에 있는 링크를 받았다.


받고 압축을 풀면 gogs라는 이름의 폴더가 생긴다, 폴더 안에 있는 gogs 바이너리를 실행하자.

$ wget https://dl.gogs.io/gogs_v0.9.141_raspi2.zip
$ unzip gogs_v0.9.141_raspi2.zip
$ cd gogs
$ ./gogs web

여기까지 하면 웹 서버가 구동된다. localhost로 접속해서 URL, 외부 port 같은 세팅값들을 입력하면 끝.


처음 설치화면. 한글화 잘 되어있어서 넣으라는 값만 넣어주면 된다.


이렇게 세팅한 값들은 전부 gogs/custom/conf/app.ini파일에 저장된다. 앞으로 설정을 바꾸고 싶으면 이 파일만 수정해주면 된다.


개인적으로만 쓸 생각이기 때문에 내 계정 외의 다른 계정 가입을 막아야 한다. 본인의 계정을 다 만들고 나서, app.ini 파일에 DISABLE_REGISTRATION = true를 추가해주고 gogs를 다시 시작하자.



[로그인하면 이렇게 보인다]


로그인하면 이렇게 깃헙과 매우 비슷한 UI의 화면이 보인다. 깃헙 쓰듯 저장소 만들고, 코드 올리고 하면 된다. 어차피 코드 저장용이기 때문에 잘 안 쓰겠지만 심지어 이슈 트래커도 있고 위키도 있다.


3. init.d 세팅

이렇게 잘 쓰고 있다가 언젠가 집에 한 번 정전이 일어난 적이 있었다. 라즈베리가 켜질 때 gogs도 같이 켜지도록 세팅해놓지 않았기 때문에 다시 ssh로 접속해서 수동으로 켜 줘야 했다. (그것도 어떻게 켜는지 잊어서 검색하고..) 이 짓을 매번 하기 귀찮을 것 같으니 그냥 init.d에 추가해서 시스템이 켜질 때 같이 켜지도록 하려고 했다.


/etc/init.d에 gogs를 시작하는 쉘 스크립트를 집어넣으면 되는데, 구글링해서 엄한 것 다운받을 필요 없다. 친절하게도 gogs/scripts/init/debian 폴더에 이미 미리 초안이 작성되어 있다.


그렇다고 바로 쓸 수 있는 것은 아니고, 스크립트 상단에 있는 환경변수 몇 개만 수정하면 된다. gogs가 기본적으로 OS 계정 이름을 ‘git’이라고 생각하고 USERWORKINGDIR변수들을 그에 맞게 작성해놨는데, 각자 계정 이름에 맞게 바꿔주자.


그다음 chmod +x로 init스크립트에 실행 권한을 추가해 준다.


여기까지 했었는데, init.d가 오래되었으니 upstart를 쓰는 게 좋다는 누군가의 말을 보고선 왠지 찝찝해서 그냥 둘 다 안쓰고 systemd를 쓰기로 했다.


4. systemd

systemd에 넣어줘야 할 스크립트도 마찬가지로 이미 가지고 있다. gogs/scripts/systemd/gogs.service 참조.


이 스크립트에서도 바로 쓸 수는 없고 몇 가지를 바꿔줘야 하는데, 최상단에 After=가 반복되는 부분에 (디펜던시 선언부) 세팅하는 부분이 각 DB마다 주석처리되어 있다. 이걸 본인이 사용하는 DB에 맞춰서 주석을 풀어줘야한다. (참고로 daemon 이름이 세팅된것과 다르면 이것도 수정해야 함. 나의 경우에는 mysql daemon 이름이 mysqld가 아니라 그냥 mysql이었다.)


[gogs.service 파일]


그리고 아래쪽 환경 변수들 path에 들어가 있는 기본 계정 이름이 /home/git/gogs처럼 다 ‘git’으로 되어있는데 gogs 경로나 계정 이름 같은것을 각자 설정에 맞게 수정해야한다.


이 스크립트에 chmod +x로 실행 권한 추가해서 (안 해도 되나?) /etc/systemd/system/gogs.service로 복사해주자.


다음에 sudo service gogs start 해보고 별 다른 에러 메세지가 튀어나오지 않으면 서비스 시작이 잘 된것이다.


웹 서비스가 잘 켜졌는지 확인을 위해 sudo service gogs status를 해보자. 문제없으면 정상적으로 돌아가고 있다고 뜰 것이다.


[sudo service gogs status]


마지막으로, 지금까지 등록한 gogs 서비스를 부팅한 직후에 자동으로 시작하도록 세팅하자.

$ sudo systemctl enable gogs.service

이러면 이제 정전이 일어나 라즈베리가 갑자기 꺼지더라도 전기가 다시 들어오면 자동으로 gogs 서비스가 켜진다.


그래서

사실 설치라고 할 것도 없이 그냥 다운받아서 실행시키면 끝인 매우 간단한 툴이다.


누군가가 라즈베리파이에 git 호스팅을 하고자 하면 gogs를 추천한다. 나는 남에게 못 보여줄 각종 습작 코드들을, 커밋 메세지에 신경도 안 쓰고 대충 휘갈기면서 죄책감 없이 잘 쓰고 있다.


나중에 좀 더 큰 서버 (베어본 pc쯤?)을 구입한다면 Gitlab을 쓸지도 모르겠지만 일단 전기요금도 무섭고 아직까진 라즈베리파이로도 잘 쓰고 있으니 당분간은 그럴 일 없을듯싶다.