基于 Docker 的 Gitlab 环境迁移遇坑记录

Posted 炼丹狮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于 Docker 的 Gitlab 环境迁移遇坑记录相关的知识,希望对你有一定的参考价值。

目录

因为安全需要,公司的gitlab需要从外网迁移到内网。按道理说公司的gitlab是用的docker部署,直接把原来的docker整个目录复制过来就可以,但是直接复制的会导致gitlab启动不了,中间遇到各种坑,这里记录下可能会帮助到有缘人,O(∩_∩)O哈哈~。

基础环境
操作系统:Ubuntu 18.04
容器环境:Docker version 20.10.12 / docker-compose version
Gitlab环境:Gitlab 13.7.9

(1)迁移准备工作

1.1 停掉gitlab

进入容器所在目录,停掉服务

docker-compose stop

千万可别 docker-compose down 这个将停止运行的容器,并且会删除已停止的容器以及已创建的所有网络。

1.2 拷贝giblab

 scp -r  ./gitlabxx user@192.168.xx.xx:/data/xx/xx

1.3 启动容器

进入拷贝后的目录,启动 gitlab

docker-compose up -d

(2)填坑

2.1 查看容器状态

查看容器状态,发现容器内部一直在重启

docker-compose ps

docker的 state 状态 一直是 starting ,通过网上搜索问题,判断应该是容器内部出了问题,进入容器

docker-compose exec gitlab bash
  • 其中 gitlab 是 docker-compose 的 services 名字,

进入后通过下面命令查看gitlab的运行状态:

gitlab-ctl status 

发现大量的中间件都没有启动,状态是 down ,例如下面这个:
down: alertmanager: (pid xxx) 4437s; run: log: (pid xx) 4461s
原因是容器内部文件复制过来后,导致权限错乱,因此需要重新整理下权限,重新配置下系统

2.2 重新配置权限 + 重新配置gitlab

update-permissions   #重新配置权限
gitlab-ctl reconfigure   #重新整理配置
gitlab-ctl restart   #重启gitlab

操作完之后,会发现大部分 gitlab 的组件都已经启动,有个别的没有启动,因此需要看日志来解决

2.3 解决 gitaly 启动问题

gitlab-ctl tail | grep error   # 查看错误日志

发现错误: /var/opt/gitlab/gitaly/gitaly.pid:permission denied 解决方式是赋权

cd /var/opt/gitlab/gitaly/  # 进入权限错误的目录
chmod 777 ./gitaly.pid      # 修改pid的权限,网上另外的解决办法是删掉这个pid文件
gitlab-ctl restart          #重启gitlab

重启gitlab后,gitaly可以正常启动

2.5 解决 rails 权限问题

查看日志发现错误 /var/opt/gitlab/gitlab-rails/sockets/gitlab.socket: connect: connection refused
解决办法是增加权限:

chmod -R o+x /var/opt/gitlab/gitlab-rails/

2.5 解决 grafana 权限问题

查看 gitlab 状态发现 grafana 还是 down,没有启动

解决办法

chown -R gitlab-prometheus:root /var/opt/gitlab/grafana/data  # 修改权限
gitlab-ctl restart                                            #重启gitlab

重启gitlab 后,发现所有组件都正常启动

访问gitlab可以正常进入,下面贴一个gitlab的架构图,大家对gitlab的各个组件有个大体了解:

GitLab 使用 nginx 将前端请求代理到 Unicorn Web 服务器。默认情况下,Unicorn 与前端之间的通信是通过 Unix domain 套接字进行的,但也支持通过 TCP 转发请求。Web 前端访问 /home/git/gitlab/public 绕过 Unicorn 服务器来提供静态页面,上传(例如头像图片或附件)和预编译资源。GitLab 使用 Unicorn Web 服务器提供网页和 GitLab API。使用 Sidekiq 作为作业队列,反过来,它使用 redis 作为作业信息,元数据和作业的非持久数据库后端。

参考文献:
[1]. https://www.cnblogs.com/kika/p/10851614.html
[2]. https://zhuanlan.zhihu.com/p/354941496

以上是关于基于 Docker 的 Gitlab 环境迁移遇坑记录的主要内容,如果未能解决你的问题,请参考以下文章

基于 Docker 的 Gitlab 环境迁移遇坑记录

基于gitlab-ci实现maven及docker缓存的配置

docker gitlab迁移 备份 部署 搭建以及各种问题

Kubernetes中gitlab的一次迁移

gitlab迁移及迁移后500问题

win10家庭版docker安装+遇坑