准备工作
查看容器配置信息,找到容器挂载、映射端口等配置信息
docker inspect gitlab-self
发现有在宿主机进行挂载目录,所以直接压缩文件夹 (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