备份

备份和恢复 Linux 软件包安装

建议在安全的地方保存一份 /etc/gitlab 或至少包含 /etc/gitlab/gitlab-secrets.json 的副本。如果您需要恢复极狐GitLab 应用程序备份,您还需要恢复 gitlab-secrets.json。如果不这样做,使用双重身份验证的用户将无法访问您的极狐GitLab 服务器,并且存储在极狐GitLab CI 中的 “secure variables” 也将丢失。

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

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

note 运行 sudo gitlab-ctl backup-etc --backup-path <DIRECTORY> 会将备份放置在指定目录中。如果目录不存在,将创建该目录。推荐使用绝对路径。
note 要创建每日应用程序备份,请编辑 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/
note 确保 /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

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

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

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

要使用此设置,请编辑 /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

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

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

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

  • 极狐GitLab 双重身份验证(2FA)用户 secret (‘QR codes’)
  • 极狐GitLab CI ‘secure variables’

如果将配置备份与应用程序数据备份分开,则可以减少加密的应用程序数据与解密所需的密钥一起丢失/泄露/被盗的可能性。

创建应用备份

要创建仓库和极狐GitLab 元数据的备份,请按照备份创建文档进行操作。

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

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

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

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

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

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

备份应用:

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

备份配置和 secrets:

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/'
note 要在容器外保留这些备份,请在以下目录中挂载卷:
  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
caution 如果您设置此配置选项,则由您创建在 gitlab_rails['backup_path'] 中指定的目录,并设置允许在 user['username'] 中指定的用户具有正确访问权限的许可。否则将阻止极狐GitLab 创建备份存档。