オンプレで手軽にGit環境を用意できるGitLabですが、ちゃんとバックアップとってますか?
構築したはいいけどバックアップが取れてなくて、ハードウェアが故障してバックアップとって無いことが発覚(泣)・・・なんてことにならないように、バックアップとりましょー!!
ということでバックアップとリストアについてまとめておきます。
バックアップについて
基本的に公式に説明がある通りですが、ひとつずつ説明をば。
GitLabのバックアップは、gitlab-rake というコマンド一発でリポジトリもユーザデータなども(アップロードした画像データなども含めて)取ってくれます。
が、取得したバックアップデータをリストアすることができるのは、全く同じバージョンのGitLabだけです。異なるバージョンのGitLabにはリストアできません。
ということは必然的に設定ファイルも同じである(設定ファイルもバックアップしておく必要がある)ということです。
これらを踏まえて、リポジトリやDBのデータと設定ファイルの2種類のバックアップを取得しておきます。
リポジトリやDBのバックアップ
GitLab に用意されているバックアップコマンドとしては以下となります。先の説明の通り、これには設定ファイルは含まれません。
1 |
# /opt/gitlab/bin/gitlab-rake gitlab:backup:create |
↑のコマンドで生成されるバックアップファイル名は以下のようになります。頭の10桁はUNIX時間です。
1528815659_2018_06_13_gitlab_backup.tar
設定ファイルのバックアップ
公式にもある通り、/etc/gitlab 配下をまるっと取得しておきます。
ファイル名の形式を合わせておくと後でわかりやすいですので、同じように頭の10桁はUNIX時間となるようにしておきます。
1 |
# tar cfz ${Backup_Dir}/$(date "+%s_%Y_%m_%d_etc_gitlab.tar.gz") -C /etc gitlab |
生成されるファイル名は以下のようになります。
1528815601_2018_06_13_etc_gitlab.tar.gz
手動で毎日実行するわけにもいかないので、スクリプトを書くとしたら以下。3日分くらい残しておけばよいでしょう。それ以前のデータは削除します。
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh BKDIR=/var/backup/gitlab # Get GitLab Config tar cfz ${BKDIR}/$(date "+%s_%Y_%m_%d_etc_gitlab.tar.gz") -C /etc gitlab # Get GitLab Backup /opt/gitlab/bin/gitlab-rake gitlab:backup:create # Delete find $BKDIR -mtime +2 | xargs rm -rf |
cronで夜間に実行するようにしておきましょう。先程記載した2つのバックアップファイルが取得されます。
リストアについて
同じバージョンのGitLabを用意するところまではできている前提で進めます。
まだの人は以下の記事を参考に構築してください。
-
GitLab を日本語化してGmailからメール通知する!
社内で使うためのGitLab環境を構築したときのメモです。 GitLabって日本語に対応してないんですよね。純日本人にはちょっととっつきにくいというか、みんなで使おうよっていって建てても英語だとみんな ...
プロセスの停止
まず、アプリケーション側のプロセスを停止します。以下2つのみ停止し他ののプロセスは起動させておきます。
1 2 |
# gitlab-ctl stop unicorn # gitlab-ctl stop sidekiq |
停止していることを確認します。
1 2 3 |
# gitlab-ctl status |grep down down: sidekiq: 10s, normally up; run: log: (pid 670) 5423s down: unicorn: 20s, normally up; run: log: (pid 655) 5423s |
行頭が down となっていれば停止しています。動いている場合は、 run と表示されます。
バックアップデータの確認
リストアするバックアップデータを確認します。Gitlabのバックアップと設定ファイルのバックアップのふたつが必要です。
1 2 3 |
# ls 1528815601_2018_06_13_etc_gitlab.tar.gz # 設定ファイル 1528815659_2018_06_13_gitlab_backup.tar # Gitlabのバックアップ |
設定ファイルのリストア
既存設定ファイルのバックアップをとります。
1 |
# mv /etc/gitlab /etc/gitlab.2080613 |
バックアップアーカイブを展開して、所定の場所に移動します。
1 2 |
# tar zxvf ./1528815601_2018_06_13_etc_gitlab.tar.gz # mv ./gitlab /etc/gitlab |
Gitlabバックアップのリストア
リストアコマンド構文は以下です。
1 |
# gitlab-rake gitlab:backup:restore BACKUP=$TIMESTAMP |
$TIMESTAMP はGitlabのバックアップファイルのタイムスタンプ箇所です。
1 |
# gitlab-rake gitlab:backup:restore BACKUP=1528815659_2018_06_13 |
ではリストアします。
1 2 3 |
# gitlab-rake gitlab:backup:restore BACKUP=1528815659_2018_06_13 No backups found in /var/opt/gitlab/backups Please make sure that file name ends with _gitlab_backup.tar |
はじかれてしまいました。
理由としては、設定ファイル(/etc/gitlab/gitlab.rb)に記載されたバックアップディレクトリ(/var/opt/gitlab/backups)にバックアップデータがないと読み込んでくれません。また、ファイル名が「_gitlab_backup.tar」で終わる必要もあるようですが、公式のコマンドでバックアップを取得していれば問題ないです。
バックアップデータを指定のディレクトリにコピーします。デフォルトであれば以下でOK!
1 |
# cp -p ./1528815659_2018_06_13_gitlab_backup.tar /var/opt/gitlab/backups/ |
再度、リストアコマンドを実行します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# gitlab-rake gitlab:backup:restore BACKUP=1528815659_2018_06_13 Unpacking backup ... done Before restoring the database we recommend removing all existing tables to avoid future upgrade problems. Be aware that if you have custom tables in the GitLab database these tables and all data will be removed. 和訳:データベースを復元する前に、将来のアップグレードの問題を避けるために、 既存のテーブルをすべて削除することをお勧めします。 GitLabデータベースにカスタムテーブルがある場合、これらのテーブルと すべてのデータが削除されることに注意してください。 Do you want to continue (yes/no)?★yesと入力 : : This will rebuild an authorized_keys file. You will lose any data stored in authorized_keys file. 和訳:これにより、authorized_keysファイルが再構築されます。 authorized_keysファイルに格納されているデータは失われます。 Do you want to continue (yes/no)?★yesと入力 |
authorized_keysを残しておく必要がある場合は、退避しておきましょう。
以下のコマンドでチェックします。
1 |
# gitlab-rake gitlab:check SANITIZE=true |
Webブラウザから接続できるようになっているはずです。
設定ファイル(/etc/gitlab/gitlab.rb)に指定したURLが変わる場合は、"external_url"の指定を修正します。
無事にリストアできたら、redmineとの連携する場合は以下をどうぞ。
-
GitLabとRedmineが別サーバの場合の連携設定Part1
GitLabとRedmineが別のサーバとして構成されているときにリポジトリを連携する手順を紹介します。 SVN(Subversion)とRedmineを連携するときは、Redmineの設定でSubv ...
↓↓↓ 素人でもよくわかるGit入門書です