バックアップ

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しか読めません。

note
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/
note
/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 を実行してください。

note
マシンのSSHホストキーは、/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 パラメータを指定できます。

caution
パラメータを指定しない場合、デフォルトは--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インスタンスのバックアップの作成

caution
インストールで PgBouncer を使っている場合、パフォーマンス上の理由か Patroni クラスターで使う場合に backup コマンドに追加のパラメータが必要になります。

バックアップはコマンドの前に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/'
note
これらのバックアップをコンテナ外に永続化するには、以下のディレクトリにボリュームをマウントします:
  1. /secret/gitlab/backups.
  2. /var/opt/gitlab.バックアップを含むすべてのアプリケーションデータについて
  3. /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
caution
この設定オプションを設定した場合、gitlab_rails['backup_path'] で指定されたディレクトリを作成し、user['username'] で指定されたユーザーが正しくアクセスできるように権限を設定するのはあなた次第です。これを怠ると、GitLabはバックアップアーカイブを作成できなくなります。