在 Linux 环境下迁移 GitLab(从一台服务器迁移到另一台,或本机大版本升级前的迁移),最稳妥、官方推荐的做法是 通过备份 + 恢复。下面我按 常用场景 给你一套完整、可落地的迁移方案。
| 迁移方式 | 适用场景 | 推荐度 |
|---|---|---|
| 备份 + 恢复 | 整机迁移、升级、灾备 | ⭐⭐⭐⭐⭐ |
| Docker 镜像迁移 | GitLab 跑在 Docker | ⭐⭐⭐⭐ |
| 直接复制数据目录 | 同源同版本 | ⭐⭐(风险高) |
✅ 生产环境强烈推荐:备份 + 恢复
目标服务器 GitLab 版本 ≥ 源服务器版本(主版本一致)
查看版本:
gitlab-rake gitlab:env:info
# 或
cat /opt/gitlab/version-manifest.txt
❗ 不同大版本直接恢复会失败。
sudo gitlab-ctl stop
sudo gitlab-rake gitlab:backup:create
备份完成后,文件位于:
/var/opt/gitlab/backups/
文件名示例:
1690000000_2024_01_01_gitlab_backup.tar
sudo cp /etc/gitlab/gitlab.rb /root/gitlab.rb.bak
sudo cp -R /etc/gitlab/ssl /root/gitlab_ssl.bak
sudo cp /etc/gitlab/gitlab-secrets.json /root/gitlab-secrets.json.bak
⚠️ 丢失 gitlab-secrets.json 会导致:
scp /var/opt/gitlab/backups/*.tar root@目标服务器IP:/var/opt/gitlab/backups/
scp /root/gitlab.rb.bak root@目标服务器IP:/root/
scp /root/gitlab-secrets.json.bak root@目标服务器IP:/root/
示例(Ubuntu / Debian):
sudo apt-get update
sudo apt-get install -y gitlab-ee=16.7.2-ee.0
指定版本安装(示例):
sudo apt install gitlab-ee=16.7.2-ee.0
或 CentOS / RHEL:
yum install gitlab-ee-16.7.2-ee.0.el8
sudo cp /root/gitlab.rb.bak /etc/gitlab/gitlab.rb
sudo cp /root/gitlab-secrets.json.bak /etc/gitlab/gitlab-secrets.json
如有 SSL:
sudo cp -R /root/gitlab_ssl.bak /etc/gitlab/ssl
sudo gitlab-ctl reconfigure
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=1690000000_2024_01_01
⚠️ 只需写文件名前缀,不要
.tar
过程中会询问:
sudo gitlab-ctl start
验证状态:
sudo gitlab-ctl status
sudo gitlab-rake gitlab:check
浏览器访问 GitLab:
✅ 先升级源 GitLab → 再备份 → 再迁移
docker exec -t gitlab gitlab-backup create
docker cp gitlab:/etc/gitlab/gitlab-secrets.json .
docker cp gitlab:/etc/gitlab/gitlab.rb .
恢复时挂载相同目录即可。
/etc/gitlab/gitlab.rb 中:gitlab_rails['gitlab_shell_ssh_port'] = 22
/etc/ssh/| 数据规模 | 备份 | 恢复 |
|---|---|---|
| 10 GB | 5 分钟 | 5–10 分钟 |
| 100 GB | 20–40 分钟 | 30–60 分钟 |
如果你愿意,可以告诉我:
我可以给你 精确到命令的迁移方案 ✅