Technology Engineering

178inaba の技術ブログ

GitLabの定期バックアップ設定

inabaです。

先日、バックアップ用のHDDをセットアップしました。

inaba.hatenablog.com

今度は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というエラーが出ます。
なので、バックアップディレクトリのユーザとグループをchownchgrpで変更しておきます。
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を書くときは最後の行に空行を入れておかないとダメなようです。

ngyuki.hatenablog.com

これで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では%をエスケープしなければならないようです。

blog.manabusakai.com

アプリケーションと同じようにUTC3時にバックアップを行うように設定しました。

これで毎日バックアップができるようになりました。

参考: gitlab.com gitlab.com

今日はここまで。