july
july
发布于 2024-09-24 / 45 阅读
0

Docker迁移Gitlab-ce14.0.6

准备工作

查看容器配置信息,找到容器挂载、映射端口等配置信息

docker inspect gitlab-self

image.png

发现有在宿主机进行挂载目录,所以直接压缩文件夹 (gitlab容器建议先停止再进行压缩),这里排除prometheus/data/wal目录下的监控文件

# -c:创建一个新的归档文件。
# -v:显示详细操作过程(verbose)。
# -p:保留文件的原始权限(解压时)
# -z:使用 gzip 压缩归档文件。
# -f:<file>:指定归档文件的名称(必须放在选项列表的最后)。

tar -cvpzf gitlab-test.tar.gz --exclude=/usr/local/gitlab-test/opt/prometheus/data/wal \
/usr/local/gitlab-test
#导出docker中Gitlab镜像
docker save -o gitlab-ce.tar gitlab/gitlab-ce:latest
Error response from daemon: open /var/lib/docker/overlay2/533c75944e981dc73c7f96c9b7df66134a9baa5f3005ca74c5196e7a5a2b1259/diff/usr/bin/find: no such file or director
#导出不了考虑需要重启,运行3年多的Gitlab怕无法启动,于是考虑下载相同版本的docker镜像

#导入镜像
docker load -i gitlab-ce.tar

#查看镜像
docker images

运行GitLab容器

docker run -itd -p 9980:8090 -p 9922:9922 \
-v /data/gitlab/gitlab-test/etc:/etc/gitlab \
-v /data/gitlab/gitlab-test/log:/var/log/gitlab \ 
-v /data/gitlab/gitlab-test/opt:/var/opt/gitlab  \
--restart always \
--name gitlab-self \
gitlab/gitlab-ce:14.0.6-ce.0

修改配置

配置里面还使用老的域名,这里需要更新,并且需求使用外部Nginx再进行代理一层。

外部https请求----------->Nginx(第一层)------->GitLab容器内部Nginx(第二层)

进入容器GitLab容器内部

docker exec -it gitlab-self /bin/bash
#查看Gitlab各组件运行状态
gitlab-ctl status 

#修改/etc/gitlab/gitlab.rb
vi /etc/gitlab/gitlab.rb

#修改下面内容
#gitlab访问地址 注意这里配置的域名地址对应着拉取代码的地址
external_url 'http://xxxx.dame.com/gitlab'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = 'http://xxxx.dame.com'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922

#修改Nginx 监听端口,这样模式是注释掉的,需要需求注释
nginx['listen_port'] = 8090 

#修改好后退出

#更新配置 /etc/gitlab/gitlab.rb使用ruby编写的脚本,使用gitlab-ctl reconfigure
#会自动根据脚本生成配置信息/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab-ctl reconfigure 

#重启gitlab 
gitlab-ctl restart

#访问测试看看
curl http://127.0.0.1:8090

#重新配置权限
update-permissions   

配置外层Nginx

location /gitlab {
          proxy_next_upstream http_502 http_504 error timeout invalid_header;
          add_header Cache-Control no-store;
          client_max_body_size 1024m;
          proxy_set_header  Host $http_host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          # 配置需要反向代理的GitLab容器服务器地址,/gitlab对应external_url中的/gitlab
          proxy_pass http://xxxxx:9980/gitlab;
}

测试配置并重新启动

nginx -t

#重启
nginx -s reload

参考

https://docs.gitlab.com/ee/install/docker/troubleshooting.html#:~:text=To%20fix%20your%20container%2C%20execute%20update-permissions%20and%20restart,docker%20exec%20gitlab%20update-permissions%20sudo%20docker%20restart%20gitlab