在 Linux 服务器上迁移 GitLab 数据,常见场景有:
下面按最常用、最稳妥的方式讲。
gitlab-rake gitlab:env:info
源和目标 GitLab 大版本必须一致(如都是 16.x)
gitlab-ctl stop unicorn
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
(老版本可能是 unicorn,新版本是 puma)
gitlab-rake gitlab:backup:create
备份文件在:
/var/opt/gitlab/backups/
文件名类似:
1234567890_2024_01_01_gitlab_backup.tar
该备份 不包含:
/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json
/etc/gitlab/gitlab.rb
/etc/gitlab/gitlab-secrets.json
/var/opt/gitlab/backups/*.tar
示例:
scp /var/opt/gitlab/backups/*.tar root@new-server:/var/opt/gitlab/backups/
scp /etc/gitlab/gitlab.rb root@new-server:/etc/gitlab/
scp /etc/gitlab/gitlab-secrets.json root@new-server:/etc/gitlab/
# CentOS / Rocky / Alma
yum install gitlab-ee
# Ubuntu / Debian
apt install gitlab-ee
vi /etc/gitlab/gitlab.rb
确保:
external_url 'http://gitlab.example.com'
gitlab-ctl reconfigure
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1234567890_2024_01_01
恢复完成后:
gitlab-ctl restart
gitlab-rake gitlab:check SANITIZE=true
浏览器访问 GitLab,确认:
仅限 完全同版本 + 同路径:
rsync -avz /var/opt/gitlab/ root@new:/var/opt/gitlab/
rsync -avz /etc/gitlab/ root@new:/etc/gitlab/
然后:
gitlab-ctl reconfigure
gitlab-ctl restart
⚠️ 容易出权限 / 版本问题
如果是容器:
docker exec -t gitlab gitlab-backup create
挂载卷直接拷贝:
/var/opt/gitlab
/etc/gitlab
❌ 版本不一致 → 恢复失败
❌ 忘记 gitlab-secrets.json → CI/Token 失效
❌ 没停服务 → 数据不一致
如果你愿意,可以告诉我:
我可以给你精确命令。