バックアップ
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab Self-Managed
Linuxパッケージインストールにおける設定のバックアップと復元
すべてのLinuxパッケージインストール設定は/etc/gitlabに保存されます。GitLabアプリケーションのバックアップとは別に、設定と証明書のコピーを安全な場所に保管してください。これにより、暗号化されたアプリケーションデータが、それを復号化するために必要なキーと一緒に失われたり、漏洩したり、盗まれたりする可能性が減少します。
特に、gitlab-secrets.jsonファイル(および場合によってはgitlab.rbファイル)には、SQLデータベース内の機密情報を保護するためのデータベース暗号化キーが含まれています:
これらのファイルが失われると、2FAユーザーはGitLabアカウントへのアクセスを失い、「セキュアな変数」はCI設定から失われます。
設定をバックアップするには、sudo gitlab-ctl backup-etcを実行します。これは/etc/gitlab/config_backup/にtarアーカイブを作成します。ディレクトリおよびバックアップファイルはrootのみが読み取り可能です。
sudo gitlab-ctl backup-etc --backup-path <DIRECTORY>を実行すると、バックアップが指定されたディレクトリに配置されます。そのディレクトリが存在しない場合は作成されます。絶対パスを推奨します。
毎日のアプリケーションバックアップを作成するには、rootユーザーのcronテーブルを編集します:
sudo crontab -e -u rootcronテーブルがエディタに表示されます。
/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を実行することを忘れないでください。
マシンのSSHホストキーは、/etc/ssh/の別の場所に保存されます。完全なマシン復元を実行する必要がある場合は、中間者攻撃の警告を避けるために、これらのキーもバックアップして復元するようにしてください。
設定バックアップのライフタイムを制限する(古いバックアップを削除)
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が0より大きい場合、現在の時刻からbackup_keep_timeを差し引いたよりも古いバックアップはすべて削除されます。
アプリケーションバックアップの作成
リポジトリとGitLabメタデータのバックアップを作成するには、バックアップ作成ドキュメントに従ってください。
バックアップ作成により、/var/opt/gitlab/backupsにtarファイルが保存されます。
GitLabバックアップを別のディレクトリに保存したい場合は、/etc/gitlab/gitlab.rbに次の設定を追加してsudo gitlab-ctl reconfigureを実行します:
gitlab_rails['backup_path'] = '/mnt/backups'Dockerコンテナ内のGitLabインスタンスのバックアップを作成する
インストールでPgBouncerを使用している場合、パフォーマンス上の理由、またはPatroniクラスターとともに使用する場合に、バックアップコマンドには追加のパラメータが必要です。
コマンドの前に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(オプション)。Thegitlab-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はバックアップアーカイブを作成できません。
コンテナレジストリメタデータデータベースバックアップ認証情報
gitlab-backupを使用してコンテナレジストリメタデータデータベースをバックアップする場合、GitLabはレジストリPostgreSQLデータベースに接続するための認証情報を保存する必要があります。これらの認証情報は、ディスク上の制限されたファイルに書き込まれ、ランタイム時にバックアップツールによって取得されます。
バックアップロールを有効にする
レジストリ認証情報ファイルの作成を有効にするには:
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['backup_role'] = trueGitLabを再設定します:
sudo gitlab-ctl reconfigure
単一ノードインストール
コンテナレジストリがGitLabとコロケーションされている単一ノードインストールでは、データベース接続設定はregistry['database']設定から自動的に導き出されます。バックアップおよび復元するPostgreSQLロールの認証情報のみを設定する必要があります:
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['backup_role'] = true # Credentials for the PostgreSQL role used when creating backups gitlab_rails['backup_registry_user'] = 'registry_backup' # default gitlab_rails['backup_registry_password'] = '<backup_password>' # Credentials for the PostgreSQL role used when restoring backups gitlab_rails['restore_registry_user'] = 'registry_restore' # default gitlab_rails['restore_registry_password'] = '<restore_password>'GitLabを再設定します:
sudo gitlab-ctl reconfigure
マルチノードインストール(専用バックアップノード)
マルチノードインストール、またはコンテナレジストリがコロケーションされていない専用のバックアップノードでgitlab-backupを実行する場合は、接続の詳細を明示的に指定します:
/etc/gitlab/gitlab.rbを編集します:gitlab_rails['backup_role'] = true gitlab_rails['backup_registry']['database_connection'] = { 'host' => 'registry-db.example.com', 'port' => 5432, # default 'dbname' => 'registry', # default 'sslmode' => 'require', 'sslcert' => '/path/to/client.crt', 'sslkey' => '/path/to/client.key', 'sslrootcert' => '/path/to/ca.crt' } gitlab_rails['backup_registry_user'] = 'registry_backup' gitlab_rails['backup_registry_password'] = '<backup_password>' gitlab_rails['restore_registry_user'] = 'registry_restore' gitlab_rails['restore_registry_password'] = '<restore_password>'GitLabを再設定します:
sudo gitlab-ctl reconfigure
認証情報ファイル
sudo gitlab-ctl reconfigureの後、以下のファイルが/opt/gitlab/etc/gitlab-backup/env/の下に作成されます:
| ファイル | 書き込まれた環境変数 |
|---|---|
env-connection | REGISTRY_DATABASE_HOST, REGISTRY_DATABASE_PORT, REGISTRY_DATABASE_NAME, REGISTRY_DATABASE_SSLMODE, REGISTRY_DATABASE_SSLCERT, REGISTRY_DATABASE_SSLKEY, REGISTRY_DATABASE_SSLROOTCERT |
env-backup_user | REGISTRY_DATABASE_USER, REGISTRY_DATABASE_PASSWORD(バックアップロールの認証情報) |
env-restore_user | REGISTRY_DATABASE_USER, REGISTRY_DATABASE_PASSWORD(復元ロールの認証情報) |
すべてのファイルはroot:rootが所有し、0400パーミッションを持っています。親ディレクトリには0750パーミッションがあります。空でない値を持つ変数のみがファイルに書き込まれます。