首页主机资讯Linux GitLab的备份与恢复策略

Linux GitLab的备份与恢复策略

时间2026-01-20 05:49:03发布访客分类主机资讯浏览654
导读:Linux GitLab 备份与恢复策略 一 核心原则与范围 备份范围包含:数据库(PostgreSQL)、仓库、附件、CI 构件与日志、LFS、容器镜像、Pages 等,生成单一的 .tar 归档;但敏感配置文件 /etc/gitlab...

Linux GitLab 备份与恢复策略

一 核心原则与范围

  • 备份范围包含:数据库(PostgreSQL)、仓库、附件、CI 构件与日志、LFS、容器镜像、Pages 等,生成单一的 .tar 归档;但敏感配置文件 /etc/gitlab/gitlab-secrets.json/etc/gitlab/gitlab.rb 默认不包含在归档中,需要单独备份与恢复。恢复时要求 GitLab 版本与备份时一致(推荐相同小版本),避免兼容性问题。备份文件默认位于 /var/opt/gitlab/backups,可通过配置自定义路径与保留时长。

二 备份策略与关键配置

  • 基本命令
    • GitLab 12.1+:使用 gitlab-backup create
    • GitLab ≤12.1:使用 gitlab-rake gitlab:backup:create
  • 备份路径与保留
    • 配置项:
      • gitlab_rails[‘manage_backup_path’] = true
      • gitlab_rails[‘backup_path’] = “/var/opt/gitlab/backups”(可按需修改)
      • gitlab_rails[‘backup_archive_permissions’] = 0644
      • gitlab_rails[‘backup_keep_time’] = 604800(保留 7 天,可按需调整)
    • 修改后执行:gitlab-ctl reconfigure
  • 高一致性备份
    • 使用 STRATEGY=copy 将数据先拷贝到临时目录再打包,规避运行中文件变更导致 tar 报错(代价是磁盘占用翻倍)。
  • 并行与性能
    • 设置并发提升仓库备份速度:
      • GITLAB_BACKUP_MAX_CONCURRENCY(默认 1
      • GITLAB_BACKUP_MAX_STORAGE_CONCURRENCY(默认 1
  • 传输友好归档
    • 生成 rsync 友好压缩包:GZIP_RSYNCABLE=yes(需系统 gzip 支持)
  • 备份内容裁剪
    • 使用 SKIP 跳过不需要的目录,例如:SKIP=db,uploads(按需组合)
  • 定时任务
    • 示例:每天 02:00 执行并抑制非错误输出
      • 0 2 * * * /opt/gitlab/bin/gitlab-backup create CRON=1
  • 远程与异地
    • 结合 scp/rsync + SSH 免密 将备份文件自动复制到远程存储或备份机,实现本地保留 + 异地留存。

三 恢复流程与要点

  • 前置检查
    • 目标机 GitLab 版本与备份时一致(推荐相同版本);将备份 .tar 放到配置的 backup_path 下并确保权限正确(属主 git:git)。
  • 停止写入服务
    • 建议停止:gitlab-ctl stop puma(或 unicorn)、gitlab-ctl stop sidekiq
  • 执行恢复
    • GitLab 12.1+:gitlab-backup restore BACKUP=< 时间戳或文件名前缀> (示例:1750765308_2025_06_24_16.7.6)
    • GitLab ≤12.1:gitlab-rake gitlab:backup:restore BACKUP=< 同上>
    • 非交互:添加 force=yes
  • 恢复敏感配置
    • 手动恢复 /etc/gitlab/gitlab-secrets.json/etc/gitlab/gitlab.rb(保持原有权限与所有权)
  • 启动与自检
    • 执行:gitlab-ctl reconfigure & & gitlab-ctl restart
    • 自检:gitlab-rake gitlab:check SANITIZE=true
  • 迁移场景
    • 与恢复步骤一致,确保版本一致后,将备份文件拷贝到新机的 backup_path 再执行恢复。

四 实战脚本与定时任务示例

  • 本地每日备份 + 保留 7 天
    • /opt/gitlab/bin/gitlab-backup create CRON=1
    • 配置:gitlab_rails[‘backup_keep_time’] = 604800
  • 远程备份脚本(免密 SSH)
    • 备份机脚本要点:
      • LocalBackDir=/data/gitlab-backups
      • RemoteBackDir=/data/code_backup
      • 生成备份后 scp 最新 .tar 到备份机
      • 备份机定时清理 +3 天 旧包
    • 定时任务示例:0 23 * * * /deploy/bin/backup_code.sh
  • 说明
    • 脚本需确保目录存在、权限正确(属主 git:git),并在修改 gitlab.rb 后执行 gitlab-ctl reconfigure

五 常见问题与排障

  • 版本不一致
    • 恢复失败或异常多与版本不匹配有关,务必在相同版本(推荐同小版本)间恢复;跨版本请先规划升级路径再恢复。
  • 扩展权限错误
    • 恢复 PostgreSQL 扩展(如 pg_trgm、btree_gist)报“must be owner”时,可在恢复前用 gitlab-psql 删除扩展或调整属主后再恢复,恢复后视需要重建扩展。
  • 配置文件遗漏
    • 未恢复 gitlab-secrets.json 会导致加密变量、2FA、Runner 注册等异常;务必单独备份与恢复该文件及 gitlab.rb
  • 仓库备份中断
    • 大量并发写入时 tar 报错“file changed as we read it”,启用 STRATEGY=copy 提升一致性(注意磁盘占用)。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Linux GitLab的备份与恢复策略
本文地址: https://pptw.com/jishu/786739.html
GitLab在Linux项目中的角色与定位 Linux GitLab的持续集成与部署

游客 回复需填写必要信息