正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

バックアップ

  • プラン: 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 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を実行することを忘れないでください。

マシンの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/'

これらのバックアップをコンテナ外に保持するには、以下のディレクトリにボリュームをマウントします:

  1. /secret/gitlab/backups

  2. /var/opt/gitlabすべてのアプリケーションデータ用)。これにはバックアップが含まれます。

  3. /var/opt/gitlab/backups(オプション)。The 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はバックアップアーカイブを作成できません。

コンテナレジストリメタデータデータベースバックアップ認証情報

gitlab-backupを使用してコンテナレジストリメタデータデータベースをバックアップする場合、GitLabはレジストリPostgreSQLデータベースに接続するための認証情報を保存する必要があります。これらの認証情報は、ディスク上の制限されたファイルに書き込まれ、ランタイム時にバックアップツールによって取得されます。

バックアップロールを有効にする

レジストリ認証情報ファイルの作成を有効にするには:

  1. /etc/gitlab/gitlab.rbを編集します:

    gitlab_rails['backup_role'] = true
  2. GitLabを再設定します:

    sudo gitlab-ctl reconfigure

単一ノードインストール

コンテナレジストリがGitLabとコロケーションされている単一ノードインストールでは、データベース接続設定はregistry['database']設定から自動的に導き出されます。バックアップおよび復元するPostgreSQLロールの認証情報のみを設定する必要があります:

  1. /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>'
  2. GitLabを再設定します:

    sudo gitlab-ctl reconfigure

マルチノードインストール(専用バックアップノード)

マルチノードインストール、またはコンテナレジストリがコロケーションされていない専用のバックアップノードでgitlab-backupを実行する場合は、接続の詳細を明示的に指定します:

  1. /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>'
  2. GitLabを再設定します:

    sudo gitlab-ctl reconfigure

認証情報ファイル

sudo gitlab-ctl reconfigureの後、以下のファイルが/opt/gitlab/etc/gitlab-backup/env/の下に作成されます:

ファイル書き込まれた環境変数
env-connectionREGISTRY_DATABASE_HOST, REGISTRY_DATABASE_PORT, REGISTRY_DATABASE_NAME, REGISTRY_DATABASE_SSLMODE, REGISTRY_DATABASE_SSLCERT, REGISTRY_DATABASE_SSLKEY, REGISTRY_DATABASE_SSLROOTCERT
env-backup_userREGISTRY_DATABASE_USER, REGISTRY_DATABASE_PASSWORD(バックアップロールの認証情報)
env-restore_userREGISTRY_DATABASE_USER, REGISTRY_DATABASE_PASSWORD(復元ロールの認証情報)

すべてのファイルはroot:rootが所有し、0400パーミッションを持っています。親ディレクトリには0750パーミッションがあります。空でない値を持つ変数のみがファイルに書き込まれます。