Linux GitLab的备份与恢复策略
导读: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
- 示例:每天 02:00 执行并抑制非错误输出
- 远程与异地
- 结合 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
