在 CentOS 上迁移 GitLab,常见有 同版本迁移 和 跨版本/跨服务器迁移 两种场景。下面按最稳妥、官方推荐的方式给你说明。
gitlab-rake gitlab:env:info
# 或
cat /opt/gitlab/version-manifest.txt
✅ 目标服务器 GitLab 版本必须 ≥ 源服务器版本
gitlab-ctl stop
gitlab-rake gitlab:backup:create
备份文件位置:
/var/opt/gitlab/backups/
# 文件名类似:
1234567890_2024_01_01_gitlab_backup.tar
scp /var/opt/gitlab/backups/*.tar root@目标IP:/var/opt/gitlab/backups/
# 示例(CentOS 7)
yum install -y gitlab-ce-<版本号>
⚠️ 不要先初始化数据,直接恢复
# 修改文件权限
chown git:git /var/opt/gitlab/backups/*.tar
# 恢复
gitlab-rake gitlab:backup:restore BACKUP=1234567890_2024_01_01
恢复时:
yesyesgitlab-ctl reconfigure
gitlab-ctl restart
GitLab 备份 不包含配置文件
/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab-secrets.json
拷贝到目标服务器相同位置,然后:
gitlab-ctl reconfigure
⚠️ gitlab-secrets.json 不拷贝会导致:
逐级升级
12 → 13 → 14 → 15 → 16
每一步:
yum update gitlab-ce-<下一版本>
gitlab-ctl reconfigure
gitlab-rake db:migrate
❌ 不支持直接跨多个大版本恢复备份
docker exec -t gitlab gitlab-rake gitlab:backup:create
docker cp gitlab:/var/opt/gitlab/backups ./backups
恢复同理。
gitlab-rake gitlab:check SANITIZE=true
页面登录后检查:
GitLab version mismatch
✅ 必须版本一致或目标更高
gitlab-ctl status
gitlab-ctl tail
gitlab-rake "gitlab:password:reset[root]"
如果你愿意,可以告诉我:
我可以给你精确到命令的迁移方案。