interprism's blog

インタープリズム株式会社の開発者ブログです。

GitLab 9.5.4 のバックアップとリストアの作業ログ

弊社ではソースコード管理に Gitlab CE を使っています。 今回、GitLabを別のサーバーに移し替えたのですが、GitLabのデータを一旦バックアップしてその後新サーバーでレストアするという手順を踏みました。それなりにハマりポイントがあったので作業ログとして残します。

なお、原則としてここの手順を元に作業しました。

docs.gitlab.com

環境情報

今回のサーバーは以下の通り。

項目 内容
OS CentOS 6
GitLab 9.5.4 Community Edition
GitLabのインストール方法 omnibus (yum)

準備編

1. GitLabのバージョンの確認

上記のページに書いてありますが、GitLabのバックアップとリストアは同じバージョンでないと失敗するということなのでインストールしてあるバージョンを調べます。

# rpm -qa | grep gitlab
gitlab-ce-9.5.4-ce.0.el6.x86_64

2. サーバーの空き容量の確認

ここでまずハマったのですが、GitLabのバックアップはリポジトリまるごと、LFSオブジェクトまるごと、アップロードしたファイル、DBのデータをまるっと保存して1つのtarファイルにまとめるようなのですが、その処理を1つのディレクトリで行います。

厳密に計測はしませんでしたが、今存在しているデータが10GB程度だとすると空きが20GB程度ないと失敗するようです。これをやってなくて長時間待って失敗するという苦汁を舐めました。

1. バックアップ先を確認

/etc/gitlab/gitlab.rbbackup_path の設定を確認(設定されていない場合は /var/opt/gitlab/backups

2. 容量をチェック

厳密にはどの程度必要かは分かりませんので推測するしかないです。

3. 足りない場合

別途ディスクをマウントするなどして /etc/gitlab/gitlab.rb を編集してバックアップ先を変更する

gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/path/to/new/backups"

4. 変更した場合は設定変更を反映

gitlab-ctl reconfigure

3. 移行先サーバーにも空き容量があるか確認

リストアする際にも同様にディスク容量を必要としますので、新たに構築するのであれば予め多めのストレージにしておくか、追加マウントすると良いです。私は No space left on device が出て失敗しました。

バックアップ編

1. GitLabを停止

gitlab-ctl stop

2. バックアップ処理に必要なサービスだけ起動

gitlab-ctl start postgresql
gitlab-ctl start redis

3. バックアップ開始

gitlab-rake gitlab:backup:create

すべてをバックアップするためか結構時間がかかります。(データ量に依る)

バックアップが完了すると backup_path の下に1つのtarファイルが出来ているはずです。以下は例。

/path/to/backups/1533565433_2018_08_06_9.5.4_gitlab_backup.tar

コマンドではバックアップされないファイルが2つあるので手動でバックアップします。

/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab-secrets.json

バックアップはこれで完了です。

移行先サーバーの準備編

移行先サーバーには、移行元と同じバージョンのGitLabが必要となります。今回は新規にサーバーを構築したのでインストールしていきます。

手順はほぼこの通り。

about.gitlab.com

なのですが、ここに掲載されているのは Enterprise Edition なので ee となっているところを ce に置き換える必要があるのと、リストア用にインストールする場合は別途手順が必要なのでこちらも記載します。

yum install -y curl policycoreutils-python openssh-server cronie yum install postfix
service postfix start
chkconfig postfix on
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | bash

gitlab-ce でインストールできるバージョンを確認

yum list --showduplicate gitlab-ce

ずらずらと出るので、真ん中のバージョン文字列(例: 9.5.4-ce.0.el6 をメモっておき、指定したバージョンの gitlab をインストールする。

yum install gitlab-ce-9.5.4-ce.0.el6

外向けのドメイン名を指定したい場合は以下の方法も可能ですが /etc/gitlab/gitlab.rb を上書きすると消えてしまうので、ここで指定する意味はあまりないかもしれません。

EXTERNAL_URL="http://gitlab.example.com" yum install gitlab-ce-9.5.4-ce.0.el6

インストールしたら手動でバックアップした gitlab.rbgitlab-secrets.json/etc/gitlab に配置する。

この時 gitlab.rb でバックアップ場所を変更している場合は、以下のどちらかの対応を行う。

  • デフォルトのバックアップ場所に変更する
  • 変更したバックアップ場所を準備する
    • マウントするなりして /path/to/new/backups を準備してください

準備が出来たら gitlab-ctl reconfigure を実行する。 これで準備は完了。

リストア

1. バックアップしたファイル(tar)を配置

バックアップしたファイル 1533565433_2018_08_06_9.5.4_gitlab_backup.tar を新しいサーバーのバックアップディレクトリに配置する。

2. パーミッションを念の為変更しておく

chown -R git /path/to/backups

3. リストア

以下のコマンドを叩く。 BACKUPで指定するのはtarファイルの_gitlab_backup.tar を除いた前半部分です。

gitlab-ctl start
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1533565433_2018_08_06_9.5.4

当然ながら結構時間がかかる。

4. リストアされたか確認

gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true

これで完了。

PAGE TOP