GitLabの定期バックアップ設定
inabaです。
先日、バックアップ用のHDDをセットアップしました。
今度はGitLab側に定期バックアップの設定をしていきます。
GitLabではアプリケーションと設定のバックアップを別で行います。
バックアップディレクトリ作成
バックアップディレクトリをバックアップ用HDDのマウントディレクトリ下に作成します。
バックアップ用HDDをマウントしたディレクトリは/mnt/backups
ですのでその下にgitlab用のディレクトリを作ってバックアップします。
ディレクトリ構成はこんな感じになります。
mnt/ └── backups └── gitlab ├── app └── config
appディレクトリはアプリケーションデータのバックアップ用、configディレクトリは設定データのバックアップ用とします。
作成コマンドはこちら。
$ sudo mkdir /mnt/backups/gitlab $ sudo chown git /mnt/backups/gitlab $ sudo chgrp git /mnt/backups/gitlab $ sudo mkdir /mnt/backups/gitlab/config
/mnt/backups
はrootユーザ所有なのでsudo mkdir
で作成しますが、バックアップコマンドはgitユーザで動きますので、作ったままだとErrno::EACCES: Permission denied @ dir_s_mkdir - /mnt/backups/gitlab
というエラーが出ます。
なので、バックアップディレクトリのユーザとグループをchown
とchgrp
で変更しておきます。
app
ディレクトリはバックアップコマンドを実行すると自動で作ってくれるので作らないでおきます。
逆に設定ファイルのバックアップディレクトリconfig
は自動では作られませんので作ります。
こちらはrootのままで大丈夫です。
アプリケーションバックアップ
アプリケーションのデータをバックアップします。
バックアップコマンド
GitLabにはバックアップコマンドが用意されています。
$ sudo gitlab-rake gitlab:backup:create
このコマンドを実行すると設定したバックアップディレクトリに(Unixタイムスタンプ)_gitlab_backup.tar
というバックアップファイルが作成されます。
バックアップディレクトリのパスを設定していなければ、デフォルトのバックアップパス/var/opt/gitlab/backups
にバックアップファイルが作成されます。
基本的にはこのコマンドをcronで毎日決まった時間に実行するだけです。
設定
/etc/gitlab/gitlab.rb
を編集します。
## For setting up backups # ... gitlab_rails['backup_path'] = "/mnt/backups/gitlab/app" gitlab_rails['backup_keep_time'] = 604800
backup_path
は文字通り、バックアップディレクトリのパスの設定です。
backup_keep_time
はバックアップファイルを保持する期間の秒数です。
この後のcron設定で毎日バックアップする設定にしますので、バックアップファイルが無限に増えないようにします。
上記だと一週間でバックアップファイルが消える設定になりますので、バックアップファイルは7つまでになります。
編集後、GitLabの再設定を行います。
$ sudo gitlab-ctl reconfigure
cron設定
cronで毎日バックアップするように設定します。
$ sudo crontab -e -u root # 下記を追記します。 # 0 3 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1 # (空行)
CRON=1
は
The CRON=1 environment setting tells the backup script to suppress all progress output if there are no errors. This is recommended to reduce cron spam.
と書かれているので、ログ出力の抑制をしてくれるようです。
また、cronを書くときは最後の行に空行を入れておかないとダメなようです。
これでUTC3時にバックアップを行うように設定できました。
(一旦UTCのまま行きます。)
設定バックアップ
設定のバックアップを行います。
cron設定
設定もcronで毎日バックアップするように設定します。
$ sudo crontab -e -u root # 下記を追記します。 # 0 3 * * * umask 0077; tar cfz /mnt/backups/gitlab/config/$(date "+etc-gitlab-\%s.tgz") -C / etc/gitlab # (空行)
空行を入れるのはアプリケーションのバックアップと同じです。
また、cronでは%
をエスケープしなければならないようです。
アプリケーションと同じようにUTC3時にバックアップを行うように設定しました。
これで毎日バックアップができるようになりました。
参考: gitlab.com gitlab.com
今日はここまで。