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

,

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

今回は新しく用意した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に記述していたものが一つのファイルにまとめられています。

/etc/gitlab/gitlab.rb

タイムゾーンの設定

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

メールの設定

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

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

SMTP 設定

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

設定が終わったら反映

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

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

Non-omnibus GitLabのバックアップ

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

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

# バックアップデータを所定の位置に配置
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

チェックでエラー発生

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

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エラーが出てちょっと焦りましたが、reconfigure restartしたら直ったのでとりあえずOKです。バックアップ、リストア周りが優秀で予想以上に移行が簡単だったので自分の作るシステムもこうありたいと思いました。