最近因为云主机资源到期,需要吧gitlab和nexus的私库进行迁移。这里做下记录。
gitlab和nexus都是基于docker做的部署,由于时间久远,基本也忘了怎么整的了,需要从零摸索。
首先,我们需要搞清当时docker部署方式,主要是有没有对外关联存储文件什么的。推荐方法,使用runlike工具。基于python3开发的一个小组件,十分好用。虽然docker inspect也能查看docker容器状态,但是不够直观。
这里需要注意,runlike需要python3.7以上版本支持,需要先更新python版本,可能会牵扯一堆问题,请自行解决。
安装方法:pip install runlike
这里我也是在服务器上七搞八搞(反正要迁移了,只要数据不搞丢就完了),才装了python3.10,升级了openSSL到1.1.1b,然后才装上了runlike。
效果:
是不是比inspect好用多了,基本可以直接启动容器了。
通过上面截图可以看出,gitlab是将整个git的数据文件全部映射到宿主机了
这就比较好搞,上新服务器上重启一个服务,就用上面runlike的脚本启动就行,然后把原服务器mnt/gitlab的目录tar打包,scp搞到新服务器上,然后tar解压缩替换源文件就行了。对了,替换前先stop服务,然后替换完再重启。基本就搞定。
当然,上述方法有个弊端,如果你修改了gitlab的配置,比方说gitlab.rb,或者其他内部配置,那么新容器可能无法同步过来。当然,你知道改了哪些可以重新配。我这里记不得了。所以我利用了我们主机的harbor镜像服务。先通过docker commit将当前运行的gitlab容器重新打包镜像。然后docker tag打标签,docker login到harbor上,docker pull推送到harbor。然后在新服务器上直接用上传harbor的镜像docker run一下,就确保镜像内配置通过过来了。然后按照上面步骤,把mnt下gitlab目录替换,启动就可以运行了。原git的用户,库,分组配置,全部都过来了。不过发现又出现了时间问题。按照我之前文章的方法:GitLab提交时间显示错误解决办法_b哈利路亚d的博客-CSDN博客_gitlab 时间
删除缓存(因为毕竟是县创建的容器,然后才复制数据过来,可能导致有初期缓存,引发了这个问题),重新配置并重启gitlab服务就恢复了。nexus就比较麻烦。
关键的数据目录没有映射出来。
没办法,先到新服务器上面创建镜像,注意,这次改了下,映射了目录;
参考脚本如下:
- docker commit -a "dict" -m "wwb" 4e2d40986deb nexus:v1
-
- docker tag nexus:v1 shandong.harbor.cn:4443/dict/nexus:v1
-
- docker login https://shandong.harbor.cn:4443
-
- docker push shandong.harbor.cn:4443/dict/nexus:v1
-
- docker run -d --privileged=true --name nexus3 -p 9091:8081 --restart always --volume=/usr/local/work/maven:/var/nexus-data -v /home/nexus-data:/nexus-data shandong.harbor.cn:4443/dict/nexus:v1
-v /home/nexus-data:/nexus-data 这里把nexus-data映射到了主机/home/nexus-data目录下,为了方便以后迁移。
然后通过docker cp 把上面说的核心目录复制到主机,然后tar,scp,tar到/home/nexus-data目录下。然后重启服务。
结果出问题了,容器不断重启。查看docker logs发现,是权限问题。经查找
需要设置
chown -R 200 /home/nexus-data
就可以了
其实中间过程都还挺顺利的,就是runlike需要python3.7有点难搞。阿里云最高到3.6.5,需要编译安装,然后由于版本比较新,关联依赖都需要更新,例如openssl,花了点时间。不过效果还是很好的。