最近需要更换服务器,要将老gitlab完整迁移走,网上找了一些资料很多看着详细都是东拼西凑的跑不下去,经过反复折腾,把相关完整步骤整理出来了,顺利的话1小时可以完成(包括数据传输)
1、进入原docker备份
#查询docker容器ID
docker ps -aq
#进入容器
docker exec -it 8121564110 /bin/bash
#进入备份目录
/var/opt/gitlab/backups
#执行备份命令
gitlab-rake gitlab:backup:create
#查询备份出来的文件
ll /var/opt/gitlab/backups
1718338887_2024_06_14_16.4.1_gitlab_backup.tar
#将文件拷贝到docker外,如果有挂接目录可以直接拷贝到磁盘挂接目录,没有就用docker cp
docker cp 容器ID:/var/opt/gitlab/backups/1718338887_2024_06_14_16.4.1_gitlab_backup.tar /root
#备份配置文件
退出容器命令行exit
docker cp 容器ID:/etc/gitlab/gitlab.rb /root
docker cp 容器ID:/etc/gitlab/gitlab-secrets.json /root
#备份docker镜像
#查看镜像名称
cd /root
docker images
docker save docker.io/gitlab/gitlab-ce:latest > /root/gitlab_240614.tar
#将这四个文件从/root目录传输到远程还原服务器
sftp -P 端口 root@123.45.67.8
#可以在远程服务器创建一个文件夹传到这里面
mkdir -p /root/restore_gitlab
2、远程服务器还原
远程服务器现在/root/restore_gitlab有这几个文件:
cd /root/restore_gitlab
ls
1718338887_2024_06_14_16.4.1_gitlab_backup.targitlab.rb
gitlab-secrets.json
gitlab_240614.tar
#导入镜像(一定要是拷贝过来的不然版本不对可能会失败)
docker load < gitlab_240614.tar
#安装拷贝过来的镜像(一定要是拷贝过来的不然版本不对可能会失败)
docker run -dit --privileged=true -p 9443:443 -p 9980:80 -p 9922:22 --name gitlab --restart always -v /home/gitlab/etc:/etc/gitlab -v /home/gitlab/logs:/var/log/gitlab -v /home/gitlab/opt:/var/opt/gitlab gitlab/gitlab-ce
chmod -Rf 755 /home/gitlab
#要等完全启动完,大概5分钟反正要打开登录输入密码能出来
#5分钟后,开始还原
#由于是挂接外部磁盘了,可以直接拷贝到外挂位置(一定要是这个位置不然还原会提示找不到文件)
mv 1718338887_2024_06_14_16.4.1_gitlab_backup.tar /home/gitlab/opt/backups
#还原配置文件(一定要备份,不然第2步要重新来了)
cp /root/restore_gitlab/gitlab.rb /home/gitlab/etc/
cp /root/restore_gitlab/gitlab-secrets.json /home/gitlab/etc/
#查询docker容器ID
docker ps -aq
#进入容器
docker exec -it 34233232 /bin/bash
#停止服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-ctl status
#开始还原
#进入目录找到之前烤入外挂磁盘的备份(目前在容器里)
cd /var/opt/gitlab/backups
#给个权限防止没权限访问
chmod -Rf 755 1718338887_2024_06_14_16.4.1_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1718338887_2024_06_14_16.4.1
#重启
gitlab-ctl restart
#查看服务状态:
gitlab-ctl status
gitlab-rake gitlab:check SANITIZE=true
最后打开系统看看把
http ://127.0.0.1
注意root密码是以前的老密码,以前的仓库内容和成员账号都没变