- 备份和恢复 Linux 软件包安装的配置
- 创建应用程序备份
- 为 Docker 容器中的极狐GitLab 实例创建备份
- 恢复应用程序备份
- 使用非打包数据库进行备份和恢复
- 上传备份到远程(云)存储
- 手动管理备份目录
{{< details >}}
- Tier: 基础版, 专业版, 旗舰版
- 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 >}}
-
/secret/gitlab/backups
。 -
/var/opt/gitlab
用于所有应用程序数据,包括备份。 -
/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 >}}