- Linuxパッケージインストールの設定のバックアップとリストア
- アプリケーションバックアップの作成
- Dockerコンテナ内のGitLabインスタンスのバックアップの作成
- アプリケーションバックアップのリストア
- パッケージ化されていないデータベースを使用したバックアップとリストア
- リモート(クラウド)ストレージへのバックアップのアップロード
- バックアップディレクトリの手動管理
バックアップ
Linuxパッケージインストールの設定のバックアップとリストア
/etc/gitlab
、あるいは少なくとも/etc/gitlab/gitlab-secrets.json
のコピーを安全な場所に保管しておくことをお勧めします。GitLabアプリケーションのバックアップをリストアする必要がある場合は、gitlab-secrets.json
もリストアする必要があります。そうしないと、二要素認証を使っているGitLabユーザーはGitLabサーバーにアクセスできなくなり、GitLab CIに保存されている’セキュア変数’も失われてしまいます。
設定のバックアップをアプリケーションデータのバックアップと同じ場所に保存することはお勧めしません。
Linuxパッケージインストールの設定はすべて/etc/gitlab
に保存されます。設定をバックアップするには、sudo gitlab-ctl backup-etc
(GitLab 12.3で導入)を実行するだけです。/etc/gitlab/config_backup/
に tar アーカイブが作成されます。ディレクトリとバックアップファイルはrootしか読めません。
sudo gitlab-ctl backup-etc --backup-path <DIRECTORY>
を実行すると、指定したディレクトリにバックアップが置かれます。ディレクトリが存在しない場合は作成されます。絶対パスを推奨します。アプリケーションのバックアップを毎日作成するには、ユーザーrootのcronテーブルを編集します:
sudo crontab -e -u root
cronテーブルはエディタに表示されます。
/etc/gitlab/
の内容を含むtarファイルを作成するコマンドを入力します。 たとえば、平日の火曜日(2日目)から土曜日(6日目)までの毎朝、バックアップを実行するようにスケジュールします:
15 04 * * 2-6 gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/
/secret/gitlab/backups/
が存在することを確認します。tarファイルは以下のように解凍できます。
# Rename the existing /etc/gitlab, if any
sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
# Change the example timestamp below for your configuration backup
sudo tar -xf gitlab_config_1487687824_2017_02_21.tar -C /
設定のバックアップをリストアした後は、忘れずにsudo gitlab-ctl reconfigure
を実行してください。
/etc/ssh/
の別の場所に保存されています。マシンを完全にリストアする必要がある場合は、中間者攻撃の警告を避けるために、これらの鍵もバックアップしてリストアしてください。設定バックアップのバックアップ寿命の制限(古いバックアップの削除)
GitLab 13.12 で導入されました。
GitLab設定バックアップは、GitLabアプリケーションバックアップと同じbackup_keep_time
設定を使用してプルーニングすることができます。
この設定を使うには、/etc/gitlab/gitlab.rb
を編集します:
## Limit backup lifetime to 7 days - 604800 seconds
gitlab_rails['backup_keep_time'] = 604800
デフォルトのbackup_keep_time
設定は0
- すべての GitLab 設定とアプリケーションのバックアップを保持します。
backup_keep_time
を設定したら、sudo gitlab-ctl backup-etc --delete-old-backups
を実行して、現在の時刻からbackup_keep_time
を引いた時刻よりも古いバックアップをすべて削除することができます。
既存のバックアップをすべて保持したい場合は、--no-delete-old-backups
パラメータを指定できます。
--delete-old-backups
で、現在の時刻からbackup_keep_time
, backup_keep_time
を引いた値より古いバックアップはすべて削除されます(0より大きいbackup_keep_time
場合 backup_keep_time
)。設定バックアップをアプリケーション・データから分離
GitLabアプリケーションのバックアップ(Gitリポジトリ、SQLデータ)を設定バックアップ(/etc/gitlab
)と同じ場所に保存しないでください。gitlab-secrets.json
ファイル(場合によってはgitlab.rb
ファイルも)には、SQL データベースの機密データを保護するためのデータベース暗号化キーが含まれています:
- GitLab二要素認証(2FA)のユーザーシークレット(’QRコード’)
- GitLab CI「セキュア変数
設定のバックアップとアプリケーションデータのバックアップを分離すれば、暗号化されたアプリケーションデータが、復号に必要な鍵とともに紛失/漏洩/盗難される可能性を減らすことができます。
アプリケーションバックアップの作成
リポジトリと GitLab メタデータのバックアップを作成するには、バックアップの作成ドキュメントに従ってください。
Backup create は tar ファイルを/var/opt/gitlab/backups
に保存します。
GitLabのバックアップを別のディレクトリに保存したい場合は、/etc/gitlab/gitlab.rb
に以下の設定を追加して、sudo gitlab-ctl
reconfigure
を実行します:
gitlab_rails['backup_path'] = '/mnt/backups'
Dockerコンテナ内のGitLabインスタンスのバックアップの作成
バックアップはコマンドの前にdocker exec -t <your container name>
を付けることでホスト上でスケジュールすることができます。
バックアップアプリケーション:
docker exec -t <your container name> gitlab-backup
バックアップ設定とシークレット:
docker exec -t <your container name> /bin/sh -c 'gitlab-ctl backup-etc && cd /etc/gitlab/config_backup && cp $(ls -t | head -n1) /secret/gitlab/backups/'
-
/secret/gitlab/backups
. -
/var/opt/gitlab
.バックアップを含むすべてのアプリケーションデータについて。 -
/var/opt/gitlab/backups
(オプション)。gitlab-backup
ツールはデフォルトでこのディレクトリに書き込みます。このディレクトリは/var/opt/gitlab
の内部にネストされていますが、Dockerはこれらのマウントをソートし、それらが調和して動作するようにします。この設定により、例えば以下のことが可能になります:
- 通常のローカル・ストレージ上のアプリケーション・データ(2つ目のマウントを使用)。
- ネットワークストレージ上のバックアップボリューム(3つ目のマウントを通して)。
アプリケーションバックアップのリストア
バックアップ・リストアのドキュメントを参照してください。
パッケージ化されていないデータベースを使用したバックアップとリストア
パッケージ化されていないデータベースを使用している場合は、パッケージ化されていないデータベースの使用に関するドキュメントを参照してください。
リモート(クラウド)ストレージへのバックアップのアップロード
詳細については、バックアップ・リストアのドキュメントをご覧ください。
バックアップディレクトリの手動管理
Linuxパッケージのインストールでは、gitlab_rails['backup_path']
でバックアップディレクトリが作成されます。このディレクトリはGitLabを実行しているユーザーによって所有され、そのユーザーのみがアクセスできるように厳格な権限が設定されています。このディレクトリにはバックアップ・アーカイブが保存され、機密情報が含まれます。組織によっては、バックアップ・アーカイブをオフサイトに配送するなどの理由で権限を変更する必要があります。
バックアップディレクトリの管理を無効にするには、/etc/gitlab/gitlab.rb
で設定します:
gitlab_rails['manage_backup_path'] = false
gitlab_rails['backup_path']
で指定されたディレクトリを作成し、user['username']
で指定されたユーザーが正しくアクセスできるように権限を設定するのはあなた次第です。これを怠ると、GitLabはバックアップアーカイブを作成できなくなります。