gitlabバックアップについて
前の記事ではdockerを使用してgitlabサービスを実行する方法について説明しましたが、gitlabのバックアップについて説明します.
使用するdockerコンテナで実行されるgitlabなので、バックアップを考えると、コンテナのマウントディレクトリを直接コピーしたいのが第一反応かもしれません.しかし、直接コピーしたディレクトリは、別のサーバで直接正常に動作しますか?gitlabコンテナの実行用のデータは確かにマウントディレクトリにあり、理論的には直接使用することができます.しかし、直接コピーにはいくつかの問題があります.gitlabコンテナの実行ログを見ると、データベースアクセス権に関するエラーやredisパラメータの設定などのエラーが見つかります.ディレクトリコピーの過程で、2台のサーバ上の環境が完全に一致しないと、元のサーバ上のgitlab-psqlユーザのuidが996で、所有者がgitlab-psqlユーザのファイルを別のサーバにコピーした後、996のuidは別のユーザに対応し、そのときに権限の問題が報告されます.これらの問題を調べてみると、やはり面倒な感じがします~~
gitlabに付属のbackupコマンドを使用してバックアップします.gitlabのhelpドキュメントには、URLアドレス:http://your-gitlab-server/help/raketasks/backup_restore.mdgitlabのbackupメカニズムを用いて[TIMESTAMP]_という名前のgitlab_backup.tarのtarファイル.このtarファイルには、すべてのデータベースデータ、すべてのrepoデータ、およびすべての添付ファイルが含まれます.TIMESTAMPは秒単位のタイムスタンプで、1477287208_などの異なるバックアップファイルを区別します.gitlab_backup.tar.なお,backupメカニズムによるバックアップではgitlabのバージョンに対して厳格な一致が要求される.例えば8.6版のgitlabで生成されたバックアップファイルは、8.7版のgitlabで復元され、エラーが報告されます.
(1)backup操作のコマンド
バックアップするコンテンツを選択するには、SKIP変数を使用することもできます.SKIP変数のオプションは、db、uploads(attachments)、repositories、builds(CI build output logs)、artifacts(CI build artifacts)、lfs(LFS objects)です.複数のアイテム間をカンマで区切るには、次の手順に従います.
backupコマンドが実行されると、端末にデータベースやrepoデータなどをエクスポートする操作ログが表示されます.
(2)backupの関連配置backupファイルの保存場所はconfig/gitlab.ymlプロファイルに設定します.このプロファイルを開くと、backupに関するこのような構成が見つかります.
デフォルトでは、バックアップファイルは/var/opt/gitlab/backupsディレクトリの下に配置され、archive_permissionsプロパティはtarファイルを生成する権限プロパティを指定します.デフォルトは0600です.upload設定でバックアップをリモートサーバにアップロードすることもできますが、詳細はここでは説明しません.
注意:gitlab.ymlにbackupsを配置した後、gitlab-ctl reconfigureコマンドを実行すると、配置されたものが流されていることに気づき、gitlab.rbの中に配置してください.
(3)backupファイルによるリカバリまず,リカバリに用いるサーバにはbackupファイルと同バージョンのgitlab実行環境が必要である.同じgitlabのdockerミラーを使用しているので、バージョンの一貫性は確保できます.次に、backupのtarファイルがプロファイルで指定した/var/opt/gitlab/backupsディレクトリの下にあることを確認する必要があります.
その後、コマンドとともにリカバリ操作を実行できます.
なお、backupで生成するtarファイルのバックアップはgitlabのプロファイルをバックアップしない、gitlab.rb, gitlab.yml,/etc/gitlab/gitlab-secrets.json(two-factor authentication暗号化情報がデータベースに格納されているkey)などのプロファイルは、別途バックアップする必要があります.
(4)バックアップを構成するタイミングタスクcronによるタイミングバックアップ操作
バックアップファイルの保存時間を指定したい場合は、/etc/gitlab/gitlab.rbでの構成:
方法1
使用するdockerコンテナで実行されるgitlabなので、バックアップを考えると、コンテナのマウントディレクトリを直接コピーしたいのが第一反応かもしれません.しかし、直接コピーしたディレクトリは、別のサーバで直接正常に動作しますか?gitlabコンテナの実行用のデータは確かにマウントディレクトリにあり、理論的には直接使用することができます.しかし、直接コピーにはいくつかの問題があります.gitlabコンテナの実行ログを見ると、データベースアクセス権に関するエラーやredisパラメータの設定などのエラーが見つかります.ディレクトリコピーの過程で、2台のサーバ上の環境が完全に一致しないと、元のサーバ上のgitlab-psqlユーザのuidが996で、所有者がgitlab-psqlユーザのファイルを別のサーバにコピーした後、996のuidは別のユーザに対応し、そのときに権限の問題が報告されます.これらの問題を調べてみると、やはり面倒な感じがします~~
方法2
gitlabに付属のbackupコマンドを使用してバックアップします.gitlabのhelpドキュメントには、URLアドレス:http://your-gitlab-server/help/raketasks/backup_restore.mdgitlabのbackupメカニズムを用いて[TIMESTAMP]_という名前のgitlab_backup.tarのtarファイル.このtarファイルには、すべてのデータベースデータ、すべてのrepoデータ、およびすべての添付ファイルが含まれます.TIMESTAMPは秒単位のタイムスタンプで、1477287208_などの異なるバックアップファイルを区別します.gitlab_backup.tar.なお,backupメカニズムによるバックアップではgitlabのバージョンに対して厳格な一致が要求される.例えば8.6版のgitlabで生成されたバックアップファイルは、8.7版のgitlabで復元され、エラーが報告されます.
(1)backup操作のコマンド
# gitlab ,
sudo gitlab-rake gitlab:backup:create
# gitlab ,
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
バックアップするコンテンツを選択するには、SKIP変数を使用することもできます.SKIP変数のオプションは、db、uploads(attachments)、repositories、builds(CI build output logs)、artifacts(CI build artifacts)、lfs(LFS objects)です.複数のアイテム間をカンマで区切るには、次の手順に従います.
sudo gitlab-rake gitlab:backup:create SKIP=db,uploads
backupコマンドが実行されると、端末にデータベースやrepoデータなどをエクスポートする操作ログが表示されます.
(2)backupの関連配置backupファイルの保存場所はconfig/gitlab.ymlプロファイルに設定します.このプロファイルを開くと、backupに関するこのような構成が見つかります.
## Backup settings
backup:
path: "/var/opt/gitlab/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
archive_permissions: # Permissions for the resulting backup.tar file (default: 0600)
keep_time: # default: 0 (forever) (in seconds)
pg_schema: # default: nil, it means that all schemas will be backed up
upload:
# Fog storage connection settings, see http://fog.io/storage/ .
connection:
# The remote 'directory' to store your backups. For S3, this would be the bucket name.
remote_directory:
multipart_chunk_size:
encryption:
デフォルトでは、バックアップファイルは/var/opt/gitlab/backupsディレクトリの下に配置され、archive_permissionsプロパティはtarファイルを生成する権限プロパティを指定します.デフォルトは0600です.upload設定でバックアップをリモートサーバにアップロードすることもできますが、詳細はここでは説明しません.
注意:gitlab.ymlにbackupsを配置した後、gitlab-ctl reconfigureコマンドを実行すると、配置されたものが流されていることに気づき、gitlab.rbの中に配置してください.
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups" #
gitlab_rails['backup_archive_permissions'] = 0644 #
gitlab_rails['backup_keep_time'] = 864000 # 10
(3)backupファイルによるリカバリまず,リカバリに用いるサーバにはbackupファイルと同バージョンのgitlab実行環境が必要である.同じgitlabのdockerミラーを使用しているので、バージョンの一貫性は確保できます.次に、backupのtarファイルがプロファイルで指定した/var/opt/gitlab/backupsディレクトリの下にあることを確認する必要があります.
sudo cp 1393513186_gitlab_backup.tar /var/opt/gitlab/backups/
その後、コマンドとともにリカバリ操作を実行できます.
#
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
# restore , gitlab
sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186
# gitlab
sudo gitlab-ctl start
# gitlab
sudo gitlab-rake gitlab:check SANITIZE=true
なお、backupで生成するtarファイルのバックアップはgitlabのプロファイルをバックアップしない、gitlab.rb, gitlab.yml,/etc/gitlab/gitlab-secrets.json(two-factor authentication暗号化情報がデータベースに格納されているkey)などのプロファイルは、別途バックアップする必要があります.
(4)バックアップを構成するタイミングタスクcronによるタイミングバックアップ操作
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1
バックアップファイルの保存時間を指定したい場合は、/etc/gitlab/gitlab.rbでの構成:
# limit backup lifetime to 7 days - 604800 seconds
gitlab_rails['backup_keep_time'] = 604800