Gogsなかなかいいですね。githubクローン。この種のソフトウェアではgitlabが最も著名だと思いますが、GogsはGolangで書かれたgithubクローンで、Golangで書かれているだけあってデプロイがシンプルで、割と高速に動作する。webhookもあるから、serfとか使うとpushされたイベントを拾って何かコマンドを実行したりといったことができる。Raspberry Pi用のバイナリも配布している。gitlabはRailsだからRaspiには荷が重いかなと思っていたところ、渡りに船とはこのことか。
Raspberry Pi(宅内サーバとして使っている)のnginxにこんな感じの設定を入れて。
location /gogs/ { proxy_pass http://127.0.0.1:3000/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Real-IP $remote_addr; client_max_body_size 100M; } location ~ /gogs/(assets|css|img|js|plugins) { rewrite ^/gogs/(.+) /$1 break; root /home/git/gogs/public/; }
で、systemdのファイルは配布物に入っているやつで。これで自宅内からは http://raspberrypi.local/gogs/ でアクセスできる。
webhookの受け先にはhokoってやつを持ってきて使っている。systemdのファイルはGogsのを参考に作って、gogs dumpしてS3にputするスクリプトを書いて、pushされたらそれが実行されるように設定。自分用であればバックアップは定時実行よりもこのほうが良いだろう。
Gogsはとりあえず、gistがないのと、PRをmergeしたあとにブランチを削除する操作をブラウザからできないというのがちょっと気になるな。自宅用では使わないので不便ではないんだけど。gitlabは知らないけどgithubにはあってかなり便利な機能。これissueにあるかな?