极狐 GitLab

备份

Tier: 基础版,专业版,旗舰版

Offering: 私有化部署

在 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 表:

shell
sudo crontab -e -u root

cron 表将在编辑器中打开。

输入命令以创建包含 /etc/gitlab/ 内容的 tar 文件。例如,安排备份在每个工作日之后的早上运行,即星期二(第 2 天)至星期六(第 6 天):

plaintext
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 文件。

shell
# 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:

ruby
## 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 元数据,请遵循备份创建文档。

备份创建会将 tar 文件存储在 /var/opt/gitlab/backups 中。

如果您想将极狐GitLab 备份存储在不同的目录中,请在 /etc/gitlab/gitlab.rb 中添加以下设置并运行 sudo gitlab-ctl reconfigure:

ruby
gitlab_rails['backup_path'] = '/mnt/backups'

为 Docker 容器中的极狐GitLab 实例创建备份#

当您的安装使用 PgBouncer(无论是出于性能原因还是与 Patroni 集群一起使用)时,备份命令需要附加参数。

可以通过在命令前添加 docker exec -t <your container name> 在主机上安排备份。

备份应用程序:

shell
docker exec -t <your container name> gitlab-backup

备份配置和密钥:

shell
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 会排序这些挂载,使它们能够和谐地工作。

    例如,此配置支持:

    • 将应用程序数据放在常规本地存储上(通过第二个挂载)。
    • 将备份卷放在网络存储上(通过第三个挂载)。

恢复应用程序备份#

请参阅恢复文档。

使用非捆绑数据库进行备份和恢复#

如果您使用非捆绑数据库,请参阅使用非捆绑数据库的文档。

将备份上传到远程(云)存储#

有关详细信息,请查看备份文档。

手动管理备份目录#

Linux 软件包安装会创建由 gitlab_rails['backup_path'] 设置的备份目录。该目录由运行极狐GitLab 的用户拥有,并设置了严格的权限,仅允许该用户访问。 该目录将保存备份归档文件,其中包含敏感信息。 在某些组织中,由于例如将备份归档文件运送到异地等原因,权限需要有所不同。

要禁用备份目录管理,请在 /etc/gitlab/gitlab.rb 中设置:

ruby
gitlab_rails['manage_backup_path'] = false

如果您设置了此配置选项,则需要自行创建 gitlab_rails['backup_path'] 中指定的目录,并设置允许 user['username'] 中指定的用户具有正确访问权限的权限。否则将阻止极狐GitLab 创建备份归档文件。

容器镜像仓库元数据数据库备份凭据#

当使用 gitlab-backup 备份容器镜像仓库元数据数据库时, 极狐GitLab 必须存储允许其连接到 registry PostgreSQL 数据库的凭据。 这些凭据会写入磁盘上的受限文件,并在运行时由备份工具读取。

启用备份角色#

要启用 registry 凭据文件的创建:

  1. 编辑 /etc/gitlab/gitlab.rb:

    ruby
    gitlab_rails['backup_role'] = true
  2. 重新配置极狐GitLab:

    shell
    sudo gitlab-ctl reconfigure

单节点安装#

在容器镜像仓库与极狐GitLab 位于同一节点的单节点安装中, 数据库连接设置会自动从 registry['database'] 配置中派生。 您只需为备份和恢复 PostgreSQL 角色设置凭据:

  1. 编辑 /etc/gitlab/gitlab.rb:

    ruby
    1gitlab_rails['backup_role'] = true 2 3# Credentials for the PostgreSQL role used when creating backups 4gitlab_rails['backup_registry_user'] = 'registry_backup' # default 5gitlab_rails['backup_registry_password'] = '<backup_password>' 6 7# Credentials for the PostgreSQL role used when restoring backups 8gitlab_rails['restore_registry_user'] = 'registry_restore' # default 9gitlab_rails['restore_registry_password'] = '<restore_password>'
  2. 重新配置极狐GitLab:

    shell
    sudo gitlab-ctl reconfigure

多节点安装(专用备份节点)#

对于多节点安装,或者在未与容器镜像仓库位于同一节点的专用备份节点上运行 gitlab-backup 时,请明确指定连接详细信息:

  1. 编辑 /etc/gitlab/gitlab.rb:

    ruby
    1gitlab_rails['backup_role'] = true 2 3gitlab_rails['backup_registry']['database_connection'] = { 4 'host' => 'registry-db.example.com', 5 'port' => 5432, # default 6 'dbname' => 'registry', # default 7 'sslmode' => 'require', 8 'sslcert' => '/path/to/client.crt', 9 'sslkey' => '/path/to/client.key', 10 'sslrootcert' => '/path/to/ca.crt' 11} 12 13gitlab_rails['backup_registry_user'] = 'registry_backup' 14gitlab_rails['backup_registry_password'] = '<backup_password>' 15gitlab_rails['restore_registry_user'] = 'registry_restore' 16gitlab_rails['restore_registry_password'] = '<restore_password>'
  2. 重新配置极狐GitLab:

    shell
    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。 只有非空值的变量才会写入文件。