gitをGitLabに移行したよ

GUIなんかいらんわ」って思って私的リポジトリをずっとさくらVPSに入れたgitoliteで運用してたけど、業務ではGitLabずっと使ってるしいろいろ進化してインストールも楽になってるようだから最新版入れてみようかなということで入れてみた。


進化が激しくて巷のブログに「こうやってここを変更する」とか書いてあるのはほとんど陳腐化していて、結局公式ドキュメントに書いてあることを愚直に実行していくのが吉らしい。
ここにも流れを記すけれど、同様にすぐに陳腐化すると思われるので実際にインストールする際にはその時点での公式ドキュメントみるよろし。インストールコマンド実行後にどこを参照しなさいとかどこを変更しなさいとか教えてくれるのでちゃんとコマンド実行後の出力をみてれば大体わかるはず。

今回の条件

  • CentOS6。
  • 既存のgitリポジトリあり(gitoliteベースだが実質的には素のgitと同じ)。
  • 既に別件でnginxを載せているホストに相乗りさせる。ただしGitLabの独立したnginxを使う。
  • 定期バックアップもする。

注記

  • nginxやpostgresqlなどのミドルウェアは「/opt/gitlab」や「/var/opt/gitlab」に入るのでファイル的には既に入っているものと競合しない。
  • 既存のものと競合するのは基本的にはポートのみ。
  • gitユーザはホームディレクトリが「/var/opt/gitlab」に変更される(GitLabで登録したデプロイキーなどはこの中の.ssh配下で扱われる)。既にgitユーザが存在する場合は「/home/git」の中身自体はそのまま残る。

資料

今回はCentOS6上にいれるので以下がベース。
https://about.gitlab.com/downloads/#centos6

HTTPSで使うので以下も参照。
https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/doc/settings/nginx.md

既存のgitを移行する際には以下を参照。
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/import.md

バックアップのやり方は以下。
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md

流れ

「/etc/sysconfig/iptables」を更新してポート「12345」をGitLabのWeb UI用に開けて「sudo service iptables restart」する。


公式ドキュメントに沿って以下を実行。ただしドキュメントには「sudo lokkit -s http -s ssh」とあるがiptablesは自分でいじりたかったので実行せず(ほとんどデフォルトで既に入っていたり設定されてたりするが、再度適用しても困るものではないので気にせず実行)。

sudo yum install curl openssh-server postfix cronie
sudo service postfix start
sudo chkconfig postfix on


公式ドキュメントに沿って以下を実行。

curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce


「sudo view /etc/gitlab/gitlab.rb」設定ファイルを開く。巷のサイトではymlを更新してたりするが現バージョンではreconfigureするときに使われるのはこちらのファイル。別のファイルをいじっても上書きされる可能性があるので注意。
自分の場合は以下を変えた。たぶんコメントアウトされてるのはデフォルト値なので同じ値ならわざわざコメントアウトを外さなくてよさそう。

SSL使う場合でもSSL用の設定は不要(後述の通りキーペアを所定のルールで置けば勝手に適用してくれる)。Web UIのポート設定も上記のようにexternal_urlに混ぜておくだけでOK。「○○port」などの設定はいじらなくてよい。


以下のようにオレオレSSL証明書を生成。公開鍵は自分の作業PCの「信頼されたルート証明書」に登録。

sudo mkdir -p /etc/gitlab/ssl
sudo chmod 700 /etc/gitlab/ssl

openssl req -nodes -newkey rsa:4098 -keyout foo.bar.com.key -out foo.bar.com.csr -subj "/C=JP/ST=Tokyo/L=Shinjuku-ku/O=FooBar/OU=IT Department/CN=foo.bar.com"
openssl x509 -req -days 3650 -sha256 -in foo.bar.com.csr -signkey foo.bar.com.key -out foo.bar.com.crt

sudo cp foo.bar.com.key foo.bar.com.crt /etc/gitlab/ssl

※ポイントは「/etc/gitlab/ssl」に「【external_urlで設定したホスト名】.key」「【external_urlで設定したホスト名】.crt」というファイル名で格納すること。こうすると設定ファイルに明示しなくても自動的に読み込んでくれるようになる。


これまでの設定後に「sudo gitlab-ctl reconfigure」とするとchefで諸々導入された末にGitLabが起動する。
作業PCから「https://foo.bar.com:12345」にアクセスして初期パスワードでログインするとパスワードの変更を求められるので適宜変更しておく。


バックアップはroot権限で動くcronに以下を記すと2時に発動して「/var/opt/gitlab/backups」にはき出される。
ここではき出されたバックアップファイルは「/etc/gitlab/gitlab.rb」の「gitlab_rails['backup_keep_time']」に記した期間(秒)が過ぎると次のバックアップ処理時に削除される。

0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1