ソースからインストールした GitLab を Omnibus GitLab に移行しました

#gitlab, #ubuntu

GitLab はその昔、手動で Rails やら MySQL やら Redis やら Unicorn やらの環境を整えてソースから手動でインストールしなければなりませんでした。しかし最近はパッケージ化され apt-get で簡単にインストールできるようになっております。これを Omnibus 版と言うわけですが、開発チームもこの Omnibus 版に移行することを強く薦めておりまして。この度、様々な事情もありソースからインストールした社内の GitLab を Omnibus GitLab へ移行したのでその手順を残しておきます。

今回は新しく用意した Omnibus GitLab に古い GitLab を完全移行させるという流れで実施しました。サーバーは Ubuntu Server 14.04 です。

  1. Omnibus GitLab をインストール
  2. Omnibus GitLab の設定
  3. Non-omnibus GitLab のバックアップ
  4. DB ダンプを MySQL から PostgreSQL に変換
  5. バックアップデータを Omnibus GitLab に Restore

Omnibus GitLab のインストール

Omnibus 版のインストールは恐ろしく簡単になってます。
公式の手順に沿って進めればすぐにインストール完了です。

https://about.gitlab.com/downloads/#ubuntu1404

Omnibus GitLab の設定

Omnibus 版では設定を以下のファイルで行うようになっています。
gitlab.yaml や initializer に記述していたものが一つのファイルにまとめられています。

1
/etc/gitlab/gitlab.rb

タイムゾーンの設定

1
gitlab_rails['time_zone'] = 'Asia/Tokyo'

メールの設定

GitLab から送られるメールの設定です。

1
2
gitlab_rails['gitlab_email_from'] = [email protected]'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'

SMTP 設定

メールの環境に合わせて設定します。
Gmail なども設定できますが社内の SMTP サーバーを設定。

設定が終わったら反映

設定を変更したら反映させます。

1
2
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

Non-omnibus GitLab のバックアップ

こちらは旧環境で行います。

1
2
3
sudo service gitlab stop
cd /home/git/gitlab
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production

DB ダンプを MySQL から PostgreSQL に変換

Omnibus 版はメインデータベースが PostgreSQL に変更されているので、MySQL > PostgreSQL の変換が必要になります。これも公式の手順通りに進めれば OK。

https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/mysql_to_postgresql.md#converting-a-gitlab-backup-file-from-mysql-to-postgres

この時点で移行用のバックアップデータが完成したことになります。

バックアップデータの移行

作成したバックアップデータを Omnibus GitLab へ移行します。
例によって公式の手順通りで OK。

https://gitlab.com/gitlab-org/omnibus-gitlab/blob/98b1bfb0d70082953d63abbc329cd6f2c628d3bc/README.md#restoring-an-application-backup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# バックアップデータを所定の位置に配置
sudo cp <TIMESTAMP>_gitlab_backup.tar /var/opt/gitlab/backups/
# unicorn と sidekiq の停止
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
# バックアップデータをリストア
sudo gitlab-rake gitlab:backup:restore BACKUP=<TIMESTAMP>
# GitLab 起動
sudo gitlab-ctl start
# チェック
sudo gitlab-rake gitlab:check

チェックでエラー発生

チェックかけたらリポジトリへのアクセス権がないと怒られたので修正します。

1
2
3
sudo chmod -R ug+rwX,o-rwx /var/opt/gitlab/git-data/repositories
sudo chmod -R ug-s /var/opt/gitlab/git-data/repositories
sudo find /var/opt/gitlab/git-data/repositories -type d -print0 | sudo xargs -0 chmod g+s

find コマンドは sudo してやらないと怒られるので注意。

終わりに

移行後にアクセスすると一回だけ 502 エラーが出てちょっと焦りましたが、reconfigurerestart したら直ったのでとりあえず OK です。バックアップ、リストア周りが優秀で予想以上に移行が簡単だったので自分の作るシステムもこうありたいと思いました。