基于Docker的gitlab迁移&备份&配置域名
备份:参考下文
docker容器里的Gitlab备份
备份完成后,首先进入容器查看当前git版本
#进入容器
docker exec -it gitlab-test /bin/bash
#查看版本号
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
我的git版本是12.2.5,在新机器上(我这里是另外一个容器),安装相同版本gitlab,使用docker pull拉取镜像
docker pull gitlab/gitlab-ce:12.2.5-ce.0
安装完成后启动容器并设置端口映射、指定容器名等
docker run \
--privileged=true \
--hostname 192.168.1.25 \
--detach \
--publish 1180:80 \
--publish 11443:443 \
--publish 1122:22 \
--name gitlab-test \
--restart unless-stopped \
--volume /home/gitlab-test/config:/etc/gitlab \
--volume /home/gitlab-test/log:/var/log/gitlab \
--volume /home/gitlab-test/data:/var/opt/gitlab \
gitlab/gitlab-ce:12.2.5-ce.0
#--hostname 指定服务器IP
#--publish 设置端口映射
#--name 指定容器名称
#--restart 指定重启策略
#--volume 挂载目录
这里映射180端口,需要放开该端口,若已关闭防火墙可忽略
#开放180端口
firewall-cmd --permanent --zone=public --add-port=180/tcp
#立即生效
firewall-cmd --reload
访问gitlab: http://192.168.1.25:180
至此,新gitlab安装完毕。
开始迁移
我这里是新建一个gitlab容器,属于同一台服务器内,可以使用docker cp 移动备份文件,若迁移对象为不同服务器可使用scp 或 ftp
1.上面已经把备份文件拷贝到本机,将备份文件和gitlab.rb、gitlab-secrets.json分别拷贝到容器中(以下操作在宿主机上)
#将备份文件拷贝到gitlab容器内,gitlab-test为目标容器名称
docker cp /data2/git-back/1641520067_2022_01_07_12.2.5_gitlab_backup.tar gitlab-test:/var/opt/gitlab/backups/
#将rb和json文件分别拷贝到目标容器指定目录下并修改名称为gitlab.rb和gitlab-secrets.json
docker cp /data2/git-back/gitlab-secrets.json.bak_22.01.07 gitlab-test:/etc/gitlab/gitlab.rb
docker cp /data2/git-back/gitlab.rb.bak_22.01.07 gitlab-test:/etc/gitlab/gitlab-secrets.json
进入容器查看相关文件权限,将rb和json文件修改为600
#进入容器
docker exec -it gitlab-test /bin/bash
#修改权限,进入到rb目录,修改rb和json文件权限
#(以下操作在新git的容器内)
cd /etc/gitlab
chmod 600 gitlab.rb
chmod 600 gitlab-secrets.json
#进入备份文件目录,将备份文件权限修改为777,不然可能恢复的时候会出现权限不够,不能解压的问题
cd /var/opt/gitlab/backups/
chmod 777 1641520067_2022_01_07_12.2.5_gitlab_backup.tar
执行命令停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
执行命令从备份文件中恢复gitlab
gitlab-rake gitlab:backup:restore BACKUP=备份文件编号
例如我的是:gitlab-rake gitlab:backup:restore BACKUP=1641520067_2022_01_07_12.2.5
#一定是自己的备份文件编号,一定是只有编号,去掉“_gitlab_backup.tar”
敲完命令之后会出现两次交互页面,都输入yes
最后,在容器内启动gitlab
gitlab-ctl start
使用ip:端口访问,原git所有用户都可登录且密码不变,所有项目数据完整的迁移了过来。
原git中拉取代码使用的域名,为方便后续操作,修改为域名访问,与原域名关联
以下操作在宿主机上
#在宿主机找到nginx配置文件
cd /etc/nginx/conf.d/
vim gitlab.com.conf #这里选择你自己的nginx配置文件,或者新建.conf文件
#添加或修改如下配置,180是我这里的映射端口,且防火墙已放行。
server {
listen 80;
server_name git.work.ubisor.com;
location / {
proxy_pass http://127.0.0.1:180/;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#保存退出
重启nginx配置生效
systemctl restart nginx
使用域名访问gitlab,
至此,完结!
经测试,一切功能正常!