GitLab免费版跨地域双服务器备份实现方案咨询
GitLab免费版异地双服务器备份方案
一、主服务器基础备份配置
GitLab免费版自带原生备份工具,先在主服务器完成自动备份的基础设置:
调整备份存储与保留规则
编辑GitLab配置文件/etc/gitlab/gitlab.rb,自定义备份路径和保留时长:gitlab_rails['backup_path'] = '/data/gitlab/backups' # 替换为你的存储路径 gitlab_rails['backup_keep_time'] = 86400 # 保留1天备份,单位秒,按需调整执行
gitlab-ctl reconfigure让配置生效。定时自动生成备份
用crontab -e添加定时任务,比如每天凌晨2点执行备份:0 2 * * * /usr/bin/gitlab-backup create CRON=1注:
CRON=1会关闭备份完成的邮件通知,不需要的话可删除该参数。备份核心配置文件
数据备份之外,必须同步备份GitLab的配置文件,避免恢复时缺失关键设置:tar -czf /data/gitlab/backups/gitlab_config_$(date +%Y%m%d).tar.gz /etc/gitlab/同样可以把这条命令加入crontab,和数据备份同步执行。
二、同步备份到两台异地服务器
推荐用rsync做增量同步,比scp效率更高,适合跨地域传输:
前置准备:SSH免密登录
在主服务器生成密钥对,将公钥同步到两台异地服务器,避免同步时输入密码:
# 主服务器生成密钥(一路回车即可) ssh-keygen -t ed25519 # 复制公钥到异地服务器1 ssh-copy-id user@remote-server1-ip # 复制公钥到异地服务器2 ssh-copy-id user@remote-server2-ip
定时同步任务
在主服务器的crontab中添加同步任务,比如备份完成后1小时(凌晨3点)同步:
# 同步到异地服务器1 0 3 * * * rsync -avz --delete /data/gitlab/backups/ user@remote-server1-ip:/backup/gitlab/ # 同步到异地服务器2 0 3 * * * rsync -avz --delete /data/gitlab/backups/ user@remote-server2-ip:/backup/gitlab/
注:--delete会让异地服务器的备份目录和主服务器保持一致,自动删除过期备份,不需要的话可去掉该参数。
三、异地服务器恢复前置准备
要确保两台异地服务器能随时接管,提前做好以下准备:
- 安装同版本GitLab:异地服务器必须安装和主服务器完全相同版本的GitLab免费版,版本不匹配会导致恢复失败。
- 预配置恢复环境:
当需要恢复时,先停止相关服务:
解压备份的配置文件到gitlab-ctl stop puma gitlab-ctl stop sidekiq/etc/gitlab/,执行gitlab-ctl reconfigure生效。 - 执行数据恢复:
将备份包(比如1701234567_2023_11_29_16.8.0_gitlab_backup.tar)放到异地服务器的GitLab备份目录,执行恢复命令:
恢复完成后启动服务:gitlab-backup restore BACKUP=1701234567_2023_11_29_16.8.0gitlab-ctl start,并验证仓库、用户等数据完整性。
四、优化建议
- 定期验证备份:每月在其中一台异地服务器做一次完整恢复测试,避免备份失效却未察觉。
- 断点续传适配:如果跨地域网络不稳定,给
rsync加--partial参数支持断点续传,或者设置crontab多次尝试同步。 - 备份加密:如果备份包含敏感数据,可在主服务器用
gpg加密备份包后再同步,异地服务器解密后恢复。
内容的提问来源于stack exchange,提问作者Chinnu
相关产品推荐
相关产品推荐

