Gitlab迁移小记

来源:互联网 发布:国家中级程序员证书 编辑:程序博客网 时间:2024/06/05 15:45

本来用家里退休的笔记本,利用ddns,搭建了一个gitlab自己玩,最近刚好拿到一个DigitalOcean的优惠,就把想把它迁移到DigitalOcean的机器上了(毕竟原本的功耗带来的成本还是不低的,一天大概要跑一度电,也许更多,那一个月下来也要30多的开销了。。。不过好处就是性能相对vps来说,绝对算高端的了,6g内存,几年前的笔记本)

在经过对DO的各个机房测速后,似乎荷兰的阿姆斯特丹机器延迟相对低一点,于是就选了那里的vps。PS:选国外机器好处有两个,一是自己随便折腾个网站啥的不用去备案;另一个就是可以自己搭建科–学–上–网的服务器,嘿嘿嘿~

接下来首先当然是在vps上安装gitlab了,我的机器用的是centos7,根据gitlab官网的安装文档,就可以成功安装了。不过后来重装gitlab的时候发现,其实只需要用yum(yum install gitlab-ce)就够了。。。
安装完后,参考这篇文章《使用Gitlab一键安装包后的日常备份恢复与迁移》,将旧机器上的gitlab备份,再将其通过vps传送到新服务器的backup目录(/var/opt/gitlab/backups),然后在新vps上执行恢复命令。这里需要注意,根据官方备份文档的提示:

This procedure assumes that:

  • You have installed the exact same version of GitLab Omnibus with which the backup was created
  • You have run sudo gitlab-ctl reconfigure at least once
  • GitLab is running. If not, start it using sudo gitlab-ctl start.

即:相互迁移的两个gitlab之间的版本必须完全一致;至少执行过一次sudo gitlab-ctl reconfigure;gitlab正在运行。
其中第二条在其他地方都没见到提到过,需要注意一下(尤其是刚装好就要恢复的gitlab,很容易遇到这种情况)。

接着执行(注意这里的1393513186换成你的备份的前缀,如1393513186_gitlab_backup.tar):
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=1393513186

但是执行完悲剧了,出现类似这样的提示:

GitLab version mismatch: Your current GitLab version (8.10.1)
differs from the GitLab version in the backup! Please switch to the
following version and try again: version: 8.2.3

Hint: git checkout v8.2.3

其实这里很好理解,就是前面规则里的第一条,要求gitlab版本一致。但是这里我脑袋抽了,居然没想到把新的gitlab降级到8.2.3,而是直接想着把旧的gitlab升级到8.10.1再重新生成一个备份供新gitlab使用。。。也许是想着新的版本肯定更好用吧。。。

升级完旧gitlab,并且生成新备份传到新vps上,恢复的时候,一大堆数据库异常,大概都是一些表约束无法删除、表不存在之类的;然后再往下执行还有一些其他错误。最后,直接登录gitlab,发现好像东西都在,然而却看不到git项目的文件,估计是只恢复了数据库,却没有恢复repository,在新的gitlab上执行备份,生成的备份文件只有几十k,而原来的备份文件可是70+MB啊。。。显然是恢复失败了,后面折腾多了好几次,还是同样的结果——失败。

终于,灵机一动,难道是新版本的问题?要不我把gitlab退回8.2.3,反正之前在8.2.3生成的备份文件还在。说干就干,查了一下,用yum remove 或者 yum erase 删除(中间似乎有用过yum downgrade之类的,好像也失败,是否用过不太清楚了),查了下,说yum erase会把配置文件也一块干掉,于是选择了它,然而事实是,用yum erase卸载后,至少在我所知的与gitlab有关的两个路径(/etc/gitlab//var/opt/gitlab/),东西都完整的在那,根本没被删掉。。。于是手动删除,只保留backup文件夹。接着安装8.2.3版本,只需要yum install gitlab-ce-8.2.3就行了。安装完后,也把旧版本/etc/gitlab/下的内容替换到新机器的相同目录下,然后立即执行
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=XXXXXXXX

依旧是数据库那里一大堆错误提示,但是后面的其它东西都恢复成功了!怀着忐忑的心执行了gitlab-rake gitlab:backup:create生成新的备份,然后到/var/opt/gitlab/backupsll,结果是:
total 151124
-rw-r--r-- 1 root root 77373440 Jul 28 20:06 1469520460_gitlab_backup.tar
-rw------- 1 git git 77373440 Jul 28 13:38 1469684319_gitlab_backup.tar

竟然完全一样!此时被兴奋冲昏了头脑,都忘了严谨思考了。虽说大小一样,但只能说明该恢复的都恢复的差不多了,还是有可能不一样的(比如某个配置默认值是1,而你的设置值是2,不管恢复成功与否,总文件大小肯定还是一样的),要验证真的一样,可能只能用md5了,或者利用git的版本管理来对比差异,还能定位到不一样的地方在哪。这个后面看心情吧,可能懒得弄了,毕竟东西也不是很重要,自己玩玩而已,而且看到运行起来基本都没问题。

最后总结一下:要迁移gitlab时,旧服务器gitlab-rake gitlab:backup:create并拷到新服务器的/var/opt/gitlab/backups;新服务器装上和旧服务器一样版本的gitlab(不建议升级旧服务器,万一有问题了咋办呢?新服务器迁移完升不升级再决定),也把旧版本/etc/gitlab/下的内容替换到新机器的相同目录下,然后
sudo gitlab-ctl reconfigure
sudo gitlab-ctl start
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
sudo gitlab-rake gitlab:backup:restore BACKUP=XXXXXXXX

其中XXXXXXXX就是你gitlab备份的数字前缀。
到此应该就可以了,如果不行的话,就问度娘谷歌去吧,哈哈~

PS:感觉好像还是旧的版本8.2.3运行起来比较流畅,新版本8.10.1似乎比较卡一些,因为我的机器配置也比较低(512M内存,自己设置了2g的swap,不然根本跑不起来),跑旧的都够吃力了,跑新的似乎容易挂掉,当然也可能是之前的都没恢复成功引起的。

0 0
原创粉丝点击