Contents
docker安装gitlab
转载来源:(156条消息) Docker 搭建 Gitlab 服务器 (完整详细版)_docker gitlab_Touch&的博客-CSDN博客
gitlab 镜像
docker search gitlab
docker pull gitlab/gitlab-ce:latest
启动gitlab容器
# 启动容器
docker run \
-itd \
-p 9980:80 \
-p 9922:22 \
-v /home/gitlab/etc:/etc/gitlab \
-v /home/gitlab/log:/var/log/gitlab \
-v /home/gitlab/opt:/var/opt/gitlab \
--restart always \
--privileged=true \
--name gitlab \
--shm-size 256
gitlab/gitlab-ce
实际上,这里需要在中间加上参数 共享内存大小配置--shm-size="1g"
, 默认的配置64m不够,metric监控数据可能溢出,日志暴涨。
命令 | 描述 |
---|---|
-i | 以交互模式运行容器,通常与 -t 同时使用命令解释 |
-t | 为容器重新分配一个伪输入终端,通常与 -i 同时使用 |
-d | 后台运行容器,并返回容器ID |
-p 9980:80 | 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口 |
-p 9922:22 | 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口 |
-v /home/gitlab/etc:/etc/gitlab | 将容器/etc/gitlab目录挂载到宿主机/usr/local/gitlab-test/etc目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样 |
–restart always | 容器自启动 |
–privileged=true | 让容器获取宿主机root权限 |
–name gitlab | 设置容器名称为gitlab |
gitlab/gitlab-ce | 镜像的名称,这里也可以写镜像ID |
接下来的配置请在容器内进行修改,不要在挂载到宿主机的文件上进行修改。否则可能出现配置更新不到容器内,或者是不能即时更新到容器内,导致gitlab启动成功,但是无法访问
修改配置
#进容器内部
docker exec -it gitlab /bin/bash
#修改gitlab.rb
vi /etc/gitlab/gitlab.rb
#加入如下
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://192.168.124.194'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.124.194'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 9922
# 让配置生效
gitlab-ctl reconfigure
这里默认配置gitlab访问端口80,ssh clone 端口 9922。
但是注意,创建容器的时候,我们将容器80端口映射到了主机9980端口,容器22端口映射到了主机9922端口。
gitlab-ctl reconfigure之后,/etc/gitlab/gitlab.rb文件的配置会映射到gitlab.yml这个文件,由于咱们在docker中运行,在gitlab上生成的http地址应该是http://192.168.124.194:9980,所以,要修改下面文件:
# 修改http和ssh配置
vi /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
gitlab:
host: 192.168.124.194
port: 9980 # 这里改为9980
https: false
浏览器访问
路径访问:http://192.168.124.194:9980/
机器配置要大于4g,否则很容易启动不了,报502
第一次访问,会让修改root密码 修改后以root用户登录即可
实际上,我安装的版本,不是这样的过程,需要进入容器,找到root的初始密码。
参考:(156条消息) gitlab获取默认用户密码,修改默认密码_gitlab默认用户名密码_votaries的博客-CSDN博客
默认用户root
获取初始密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Gitlab操作
创建分组,创建项目
Docker搭建Gitlab服务器完成!!!
问题处理:puma进程太多
Puma 是一个用于 Ruby 应用程序的快速、多线程和高度并发的 HTTP 1.1 服务器。它运行提供极狐GitLab 面向用户的功能的核心 Rails 应用程序。
运行gitlab之后,其内运行的puma进程太多(top查看,好多个puma)
参考:https://docs.gitlab.cn/jh/administration/operations/puma.html
参考: https://blog.csdn.net/m0_46542378/article/details/125344764
我是进入docker, 进入gitlab.rb,
docker exec -it gitlab /bin/bash
vi /etc/gitlab/gitlab.rb
搜索puma,如下配置取消注释。
puma['enable'] = true
puma['ha'] = false
puma['worker_timeout'] = 60
puma['worker_processes'] = 2
puma['min_threads'] = 4
puma['max_threads'] = 4
然后重新配置,重新启动docker
gitlab-ctl reconfigure
exit
docker stop gitlab
docker start gitlab
问题处理:运行一段时间后gitlab卡死
gitlab容器运行一段时间后卡死。请求web地址显示500或502.
docker log gitlab
# 发现有超多日志,一直没有达到末尾
# 很多重复日志,类似:writing value to /dev/shm/gitlab/puma/gauge_all_puma_master-0.db failed with unmapped file"
df -hT
# 发现磁盘占用异常,已经快满了
du -h --max-depth=1 /
# 一步步排查下去,发现是gitlab容器的日志卷很大
#
# 进入容器中,进一步查找大日志文件位置
docker exec -it docker /bin/bash
google了一下,“writing value to /dev/shm/gitlab/xxxxxxx failed with unmapped file” 这样的异常,基本是由于docker容器默认分配的64m共享内存shm偏小,gitlab中开启了监控,metrics数据过多,继而日志中不断报错,直至硬盘写满,造成服务异常,最终前端返回500或502状态。
参考:https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/5476 参考:https://docs.gitlab.com/ee/install/docker.html#devshm-mount-not-having-enough-space-in-docker-container 参考:https://blog.csdn.net/qq_33420835/article/details/109013202 参考:https://blog.csdn.net/wd18508423052/article/details/116306096
先进入容器,truncate日志文件,释放一部分硬盘空间。
docker exec -it gitlab /bin/bash
cd xxx
truncate -s 0 ./xxx.log
解决docker容器默认分配的64m共享内存shm偏小:
主要有两个方法,方法一删除实例重建。 这里采用方法二: (1) 先停止所有容器,docker stop container_ID
-
停止docker服务。systemctl stop docker
-
cd /var/lib/containers/要修改的容器id,这个目录是放容器的,有可能因为改了路径有变化。
-
vim hostconfig.json,找到ShmSize
保存后,重启docker服务,重启gitlab实例。日志增长速度,恢复正常,不再产生前述异常日志。
问题:待解决:git clone http端口不对
新建项目,clone按钮,显示的http clone 地址还是显示的容器内默认的80端口,不是映射出来的9980端口。(git clone ssh地址倒是正确的)。
说明/etc/gitlab/gitlab.rb中
external_url字段中,需要加上端口号。比如改成9980. 建立容器时映射改为 -v 9980:9980.
这就需要重新建立容器。还有一种方法,是为容器动态添加端口映射。(docker在网络方面的配置,linux系统中还是用的iptables或者firewalld,所以需要改对应容器的配置文件)
参考:https://juejin.cn/post/6844903849451323399
发表回复