今天有个需求,想要把以前一个Gitlab迁移到新的Server上。
我第一个想到的就是用Docker在新Server上创建Gitlab,我比较喜欢用docker-compose,因此docker-compose.yml如下:

创建之后第一次启动较久,需要耐心,知道可以在浏览器里输入本机IP看到Gitlab的界面。
我首先尝试了将原机器里/etc/gitlab和/var/opt/gitlab的内容都拷贝到新机器上,但是不行。所以还是得要做Migration。
过程如下:参考《Migrating GitLab to Another Server》
原机器:
- gitlab-ctl stop unicorn
- sudo gitlab-ctl stop sidekiq
- gitlab-rake gitlab:backup:create
- 生成的备份文件位于:/var/opt/gitlab/backups/,名称格式为XXXXXXXXXX_gitlab_backup.tar或XXXXXXXXXX_<year>_<mm>_<dd>_<version>_gitlab_backup.tar(取决于当前版本)
- 然后将上述文件,连同在/etc/gitlab下的所有文件,都拷贝到新机器的同样位置。
- 用chown将上述文件的用户改为git
新机器
- gitlab-ctl stop unicorn
- gitlab-ctl stop sidekiq
- gitlab-rake gitlab:backup:restore BACKUP=XXXXXXXXX
- gitlab-ctl start
- gitlab-rake gitlab:check SANITIZE=true
- 如果做5的时候还有一些错误,界面上会指出如何解决,运行其提示的命令即可。
我当时遇到的最大的一个问题是,原机器上的gitlab版本太低了,是8.x.x,而用docker的最新gitlab-ce版本已经到了12.5.5。
解决办法有两个思路,一个是把原机器上的gitlab升级到12.5.5,然后备份;一个是在新机器上装一个8.x.x的版本,然后再迁移。
我走了前边那条路,因为docker貌似没有那么旧的gitlab-ce版本。
由于操作系统是CentOS,因此用yum install gitlab-ce即可升级。但是,不支持从8直接跳到12,只能够一个主版本一个主版本一点一点地升级。
参考官方文档《Upgrade recommendations》,我的升级路径是8.3.4->8.17.7->9.5.10->10.8.7->11.11.8->12.5.5。
其实yum上最新的gitlab-ce已经是12.5.8了,但docker那边用latest拿到的还是12.5.5,因此我也就升到了12.5.5。
重复备份恢复的流程,一切顺利。
