{{< details >}}

  1. Tier: 基础版, 专业版, 旗舰版
  2. Offering: 私有化部署

{{< /details >}}

备份和恢复 Linux 软件包安装的配置

建议将 /etc/gitlab 或至少 /etc/gitlab/gitlab-secrets.json 的副本保存在安全的地方。如果您需要恢复极狐GitLab 应用程序备份,也需要恢复 gitlab-secrets.json。否则,使用双因素身份验证的极狐GitLab 用户将无法访问您的极狐GitLab 服务器,并且存储在极狐GitLab CI 中的“安全变量”将会丢失。

不建议将配置备份存储在与应用程序数据备份相同的位置,请参见下文。

所有 Linux 软件包安装的配置都存储在 /etc/gitlab 中。要备份您的配置,只需运行 sudo gitlab-ctl backup-etc。它会在 /etc/gitlab/config_backup/ 中创建一个 tar 归档。目录和备份文件将仅对 root 可读。

{{< alert type=”note” >}}

运行 sudo gitlab-ctl backup-etc --backup-path <DIRECTORY> 将备份放在指定目录中。目录将被创建(如果不存在)。建议使用绝对路径。

{{< /alert >}}

要创建每日应用程序备份,请编辑用户 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/

{{< alert type=”note” >}}

确保 /secret/gitlab/backups/ 存在。

{{< /alert >}}

您可以按如下方式提取 tar 文件。

# 重命名现有的 /etc/gitlab(如果有)
sudo mv /etc/gitlab /etc/gitlab.$(date +%s)
# 更改下面的示例时间戳以匹配您的配置备份
sudo tar -xf gitlab_config_1487687824_2017_02_21.tar -C /

在恢复配置备份后,请记得运行 sudo gitlab-ctl reconfigure

{{< alert type=”note” >}}

您的机器 SSH 主机密钥存储在 /etc/ssh/ 的单独位置。请务必备份和恢复这些密钥,以避免在必须执行完整机器恢复时出现中间人攻击警告。

{{< /alert >}}

限制配置备份的备份生命周期(修剪旧备份)

极狐GitLab 配置备份可以使用与极狐GitLab 应用程序备份相同的 backup_keep_time 设置来修剪。

要使用此设置,请编辑 /etc/gitlab/gitlab.rb

## 将备份生命周期限制为 7 天 - 604800 秒
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

{{< alert type=”warning” >}}

如果未提供参数,默认值为 --delete-old-backups,这将删除所有早于当前时间减去 backup_keep_time 的备份,如果 backup_keep_time 大于 0。

{{< /alert >}}

将配置备份与应用程序数据分开

不要将极狐GitLab 应用程序备份(Git 仓库、SQL 数据)存储在与配置备份(/etc/gitlab)相同的位置。gitlab-secrets.json 文件(可能还有 gitlab.rb 文件)包含数据库加密密钥,用于保护 SQL 数据库中的敏感数据:

  • 极狐GitLab 双因素身份验证(2FA)用户密钥(“QR 码”)
  • 极狐GitLab CI “安全变量”

如果将配置备份与应用程序数据备份分开,您可以降低加密应用程序数据与解密所需密钥一起丢失/泄露/被盗的风险。

创建应用程序备份

要创建您的仓库和极狐GitLab 元数据的备份,请参见备份创建文档

备份创建将存储一个 tar 文件在 /var/opt/gitlab/backups

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

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

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

{{< alert type=”warning” >}}

当您的安装使用 PgBouncer 时,出于性能原因或与 Patroni 集群一起使用时,备份命令需要额外的参数

{{< /alert >}}

可以通过在命令前加上 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/'

{{< alert type=”note” >}}

要在容器外持久化这些备份,请在以下目录中挂载卷:

{{< /alert >}}

  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 中设置:

gitlab_rails['manage_backup_path'] = false

{{< alert type=”warning” >}}

如果您设置了此配置选项,则需自行创建 gitlab_rails['backup_path'] 中指定的目录,并设置权限,以便 user['username'] 中指定的用户能够正确访问。未能这样做将阻止极狐GitLab 创建备份档案。

{{< /alert >}}