温馨提示×

ubuntu gitlab 怎么备份数据

小樊
43
2025-12-06 21:58:56
栏目: 智能运维

Ubuntu 上 GitLab 备份与恢复实操指南

一 备份前准备与关键注意事项

  • 备份命令会生成包含仓库、数据库、上传文件CI/CD 产物LFS 等的归档,但默认不包含敏感配置文件,需单独备份:/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json。恢复时版本需与备份时一致(或按官方支持矩阵进行升级/降级后再恢复)。为提高大并发写入时的备份一致性,可使用复制策略创建备份。备份文件默认位于 /var/opt/gitlab/backups,可在配置中自定义路径。

二 手动创建备份

  • 修改备份路径(可选):编辑 /etc/gitlab/gitlab.rb
    • 启用并设定路径:gitlab_rails[‘manage_backup_path’] = truegitlab_rails[‘backup_path’] = “/data/gitlab-backups”
    • 设定保留时间(秒):gitlab_rails[‘backup_keep_time’] = 2592000(示例为 30 天)
    • 使配置生效:sudo gitlab-ctl reconfigure
  • 执行备份(两种等效方式,建议使用新接口):
    • 新接口:sudo /opt/gitlab/bin/gitlab-backup create(可加 STRATEGY=copy 提升一致性;加 CRON=1 静默)
    • 旧接口:sudo gitlab-rake gitlab:backup:create
  • 备份完成后确认归档生成:
    • 查看默认目录:ls -l /var/opt/gitlab/backups
    • 或查看自定义目录:ls -l /data/gitlab-backups
  • 重要提示:上述备份不包含 gitlab.rbgitlab-secrets.json,请手动另行备份。

三 自动定时备份与保留策略

  • 使用 root 的 crontab 添加定时任务(示例为每天 02:00 备份):
    • 编辑:sudo crontab -e
    • 添加:0 2 * * * /opt/gitlab/bin/gitlab-backup create STRATEGY=copy CRON=1
  • 按保留时间自动清理:
    • 若已在 gitlab.rb 中设置 backup_keep_time,GitLab 会自动清理过期归档;也可在系统层用 find 定期删除,例如保留 30 天:
      • find /var/opt/gitlab/backups -type f -mtime +30 -delete
  • 建议做法:在备份完成后,用脚本将归档同步/拷贝到远程存储(如另一台服务器或对象存储),以防单机故障导致备份丢失。

四 远程备份与异地留存示例

  • 步骤概览:
    • 在备份服务器 B 创建备份目录(如 /data/code_backup),在 GitLab 服务器 A 生成 SSH 密钥对并将公钥追加到 B 的 ~/.ssh/authorized_keys,实现免密登录。
    • 在 A 上编写备份脚本(示例要点):
      • 执行备份:/opt/gitlab/bin/gitlab-backup create
      • 查找最新归档(如近 60 分钟):find /data/gitlab-backups -type f -mmin -60 -name ‘.tar
      • 复制到 B:scp $BACKUPFILE_SEND_TO_REMOTE root@B_IP:/data/code_backup
      • 远程清理旧备份(在 B 上):find /data/code_backup -type f -mtime +14 -name ‘.tar’ -delete
    • 在 A 上用 crontab 定时执行该脚本(如每天 23:00),并在 B 上定时清理过期备份(如保留 14 天)。

五 恢复步骤要点

  • 准备:在新/目标机器安装同版本 GitLab,先 gitlab-ctl reconfigure;将备份归档放到配置的 backup_path(默认 /var/opt/gitlab/backups),并确保文件属主为 git:git
  • 停止相关进程(两种常见组合,择一执行):
    • 组合一(较新版本常见):sudo gitlab-ctl stop pumasudo gitlab-ctl stop sidekiq
    • 组合二(旧版本常见):sudo gitlab-ctl stop unicornsudo gitlab-ctl stop sidekiq
  • 执行恢复(BACKUP 参数为“时间戳_版本号”,不含 “_gitlab_backup.tar” 后缀):
    • 示例:sudo /opt/gitlab/bin/gitlab-backup restore BACKUP=1687460936_2023_06_22_14.3.3
  • 启动与自检:sudo gitlab-ctl start,必要时执行 gitlab-rake gitlab:check SANITIZE=true 检查一致性。
  • 恢复敏感配置与密钥:将事先备份的 /etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json 放回并重新加载:sudo gitlab-ctl reconfigure

0