正式なドキュメントは英語版であり、この日本語訳は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インスタンスのバックアップを作成する

パフォーマンス上の理由、またはPatroniクラスターで使用する場合、PgBouncerを使用するインストールでは、バックアップコマンドには追加のパラメータが必要です。

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(オプション)。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がバックアップアーカイブを作成できなくなります。