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 }"
大功告成!