今回はGitLabのデータ移行について投稿…を考えていたのですが、操作を間違えてGitLabのデータを吹っ飛ばしてしまいました…
なので次からはデータの復旧が出来るように今回はGitLabのバックアップとリストアを試してみたいと思います。
GitLabのバックアップ
まずは現在のGitLabのプロジェクトとグループを確認します。
今まで使用していたプロジェクトとグループが消えてしまったので、急遽テスト用のプロジェクトとグループを作成しました。
この状態でバックアップを実施します。
バックアップを行うにはGitLabサーバーで以下のコマンドを実行します。
gitlab-rake gitlab:backup:create
バックアップが完了すると、Backup task is done.
と表示されます。
バックアップファイルの格納先はgitlab.rbファイル内のgitlab_rails['backup_path']
の行に記載されています。
万一に備えてバックアップファイルを退避します。
cat /etc/gitlab/gitlab.rb | grep backup_path #バックアップ先のパスを確認する
# バックアップ先のパスがデフォルトのままだった場合
ll /var/opt/gitlab/backups #バックアップファイル名を確認する
cp /var/opt/gitlab/backups/<バックアップファイル名> <バックアップファイルの退避場所>
実はこれだけではバックアップとしては不完全です。
なぜなら先程のバックアップ取得コマンドは/etc/gitlab
配下のファイルはバックアップ対象に含まれないからです。
/etc/gitlab
配下にはGitLabの設定ファイルと認証関連のファイルが格納されています。
こちらは直接ディレクトリごとコピーします。
cp -ap /etc/gitlab <バックアップファイルの退避場所>
以上でバックアップは完了です。
リストアテスト前の準備
リストアを実行する前に、リストア前と後の変化を確認するためにプロジェクトとグループを一旦削除します。
管理者エリアへ移動し、プロジェクトの右側にある「削除」ボタンをクリックします。
すると削除の確認画面が表示されますので、指示どおりプロジェクト名を入力し、「プロジェクトの削除」をクリックします。
同様にグループの削除も実施します。
プロジェクトとグループの削除が完了しました。
現在のプロジェクト画面の状態は以下の通りです。
デフォルトで存在しているプロジェクトは念の為残しています。
グループも同様です。
デフォルトのグループしか残されていません。
GitLabリストア
リストア前の準備が完了しましたので、リストアを実施します。
まずはGitLabのサービスの中から、unicorn
とsidekiq
のみ停止します。
gitlab-ctl status #もしも全サービスが「down」になっていれば先に「gitlab-ctl start」を実行する
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status #sidekiqが「down」になっていればOK(unicornは表示されませんでした)
サービスを停止したら、次はリストアの実行です。
以下のコマンドを実行します。
なお、ここで指定する引数である<バックアップファイル名のGitLabバージョンまでを指定>の箇所は、例えばバックアップファイル名が1234567890_2021_02_07_13.8.3_gitlab_backup.tar
の場合は1234567890_2021_02_07_13.8.3
となります。
gitlab-rake gitlab:backup:restore <バックアップファイル名のGitLabバージョンまでを指定>
# 正常に完了したら以下のコマンドでサービス再起動する
gitlab-ctl restart
リストアがエラーなく完了し、サービス再起動も正常に完了したらリストア自体は終了です。
必要に応じて以下の正常性確認コマンドを実行し、リストア後の状態に問題が無いことを確認します。
判断基準は実行中に「error」のようなメッセージが表示されていなければ恐らく問題無いかと。
gitlab-rake gitlab:check SANITIZE=true
リストア後の確認
リストアが無事完了したので、GitLabのweb画面でプロジェクトとグループの存在確認を行います。
GitLabのログイン画面にアクセスし、ログインします。
ログインするとプロジェクトの画面が表示されます。
以下の通り先程削除したプロジェクトが表示されています。
続いてグループの画面へ移動します。
グループも同様に先程削除したグループが存在しています。
これでリストアが正常に出来ていた事が確認できました。
以上で今回の実験?は終了です。
次回こそはもう少し技術的な投稿を行います…