Gitlab旧版本迁移

最近搞了个N305小主机准备玩玩虚拟机,顺便把gitlab从VPS迁过来,省一个机器钱。

最好的迁移方式是在兼容的最新系统里装一个旧版本的相同版本Gitlab,然后用备份恢复方式迁移。

通过gitlab版本寻找适合的OS版本

可以在已部署的gitlab网页中/help目录查看,或者命令行sudo gitlab-rake gitlab:env:info, 我这里是8.9.2

在gitlab旧版本安装包页面 https://packages.gitlab.com/gitlab/gitlab-ce 中搜索8.9.2

Distro/Version是发行版机器版本外号,这个还得查一下比如ubuntu16是xenial, 接下来就去OS官网寻找对应版本安装即可

新系统中安装旧版gitlab

还是在gitlab旧版本安装包页面 https://packages.gitlab.com/gitlab/gitlab-ce 中下载对应OS版本的安装包(下载链接在点进去的右上角)

然后使用对应OS方法安装,参考https://docs.gitlab.com/ee/update/package/index.html#upgrade-using-a-manually-downloaded-package

比如Ubuntu使用 sudo dpkg -i xxxx.deb

这样旧版gitlab就装好了 可以用sudo gitlab-ctl status看下启动正常不

备份待迁移的Gitlab数据,迁移到新机器恢复

进入旧实例的网页/help中,寻找 Administrator documentation里面的Raketasks里面的Backup restore,查看备份和还原方法。(不同版本有微小区别,不能看最新的官方文档)

以8.9.2的deb安装包版本为例,现执行sudo gitlab-rake gitlab:backup:create 产出备份文件到 /var/opt/gitlab/backups/

其他可能需要迁移的配置文件:

/etc/gitlab/gitlab.rb 配置文件须备份
/var/opt/gitlab/nginx/conf nginx配置文件
/etc/postfix/main.cfpostfix 邮件配置备份

想办法用sftp或者scp把文件拷贝到新机器相同目录

在新机器执行

sudo gitlab-rake gitlab:backup:restore BACKUP=123456789  

这里的123456789是备份文件的时间戳前缀,跟着提示两遍yes确认就顺利恢复了。

现在可以启动起来sudo gitlab-ctl start,看一下首页是否正常访问。

此时可能会发现首页正常,但是项目详情页500。

通过sudo gitlab-ctl tail可以查看实时日志

如果是 openssl::cipher::ciphererror (bad decrypt):的报错,其实是数据库加密的密钥没有迁移过来。 可以先将配置文件/etc/gitlab/gitlab-secrets.json 拷贝到新机器,然后执行下列命令

sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"  

大功告成!

Ruosen

Be a Geek, Do the right thing;