GitLab 使用 Docker Compose 部署
![GitLab 使用 Docker Compose 部署](https://static001.geekbang.org/infoq/e5/e5be43412b5df8b5d68d1e5d5392f0a6.png)
说明
本文使用
docker-compose.yml
部署 GitLab、GitLab Runner作者部署 GitLab 实例:https://gitlab.xuxiaowei.com.cn
需要服务器上已安装 Docker、Docker Compose
由于本人使用的 Docker 版本比较新(26.1.3),在高版本的 Docker 中,
docker-compose.yml
无需version
关键字, 所以本文脚本不会携带version
本人使用了
TLS
/SSL
,即:配置了https
,如果暂时不想使用https
,可将 脚本中的https
修改为http
如果要 GitLab Docker 容器镜像仓库,必须配置 https 即使你使用权威机构颁发的证书(如:阿里、腾讯等云厂商免费或购买的证书,或者从其他第三方申请、购买的证书),或者自己生成的证书,一般在服务器中都需要配置证书信任一个证书是否在当前操作系统中授信,取决于该证书链是否存在于当前系统的授信证书列表中比如:在 Windows 7 及更早版本的系统上安装软件时,可能会遇见 Windows 验证软件签名时异常, 原因是当前 Windows 不存在需要验证软件签名的证书链,这时只要在当前操作系统中安装微软新颁发的证书链后,即可完成软件的安装 (注意:此处介绍的虽然是软件签名的证书,但是与 https 证书授信原理相同)比如:网站证书已配置完成,浏览器访问时 https 正常工作,但是服务器中的 java 程序、curl、wget 无法访问, 原因是浏览器操作系统包含的证书链包含了访问的域名证书,而服务器中的证书链一般比较旧,需要手动添加证书进行信任如果使用自己创建的证书,需要进行证书信任,请按照使用的域名、IP 进行创建,不要张冠李戴, 如:自己创建域名证书是颁发给gitlab.xuxiaowei.cn
,而使用时用作registry.xuxiaowei.cn
进行配置,这样无法进行信任。自己生成证书时,推荐使用通配符证书,如:*.xuxiaowei.cn
,可以用于gitlab.xuxiaowei.cn
、registry.xuxiaowei.cn
等域名证书的配置如果要启用 GitLab Pages 功能,需要使用与 GitLab 实例不同的 IP, 参见文档:GitLab Pages 管理,下方脚本已完成分配不同 IP 的配置
如果要启用 GitLab Docker 容器镜像仓库,也需要与 GitLab Pages 一样,与 GitLab 实例使用不同的 IP,下方脚本已完成分配不同 IP 的配置
视频
请查看此视频合集中名称带有 docker-compose 的视频:https://www.bilibili.com/video/BV1E1421y718
配置
yamlservices:gitlab:image: 'registry.gitlab.cn/omnibus/gitlab-jh:17.1.0'restart: always# hostname: 'gitlab.xuxiaowei.cn'# 更新证书 并 启动 gitlabentrypoint: /bin/bash -c "update-ca-certificates && /assets/wrapper"#healthcheck:# # 用于定义健康检查的命令,这里使用的是 curl 命令来测试指定 URL 的可访问性。# test: ["CMD", "curl", "-k", "https://gitlab.xuxiaowei.cn/-/liveness?token=FFWoGWuYJih1Jp9e3zby"]# # 定义了健康检查之间的间隔时间。这个字段可能需要补充完整,以确定健康检查之间的间隔时间。# interval: 5s# # 定义了在判定失败之前尝试健康检查的次数。这个字段可能需要补充完整,以确定允许的重试次数。# retries: 5# # 定义了每次健康检查的超时时间。这个字段可能需要补充完整,以确定每次健康检查的超时时间。# timeout: 5s# # 定义了容器启动后开始进行健康检查之前的等待时间。这个字段可能需要补充完整,以确定健康检查开始之前的等待时间。# start_period: 180senvironment:GITLAB_OMNIBUS_CONFIG: |external_url 'https://gitlab.xuxiaowei.cn'# Add any other gitlab.rb configuration here, each on its own line
gitlab-runner:# image: 'gitlab/gitlab-runner:v17.1.0'image: 'registry.cn-qingdao.aliyuncs.com/xuxiaoweicomcn/gitlab-runner:v17.1.0'volumes:- 'GITLAB_HOME/config/ssl:/etc/gitlab-runner/certs'- '/run/docker.sock:/run/docker.sock'container_name: gitlab-runnerextra_hosts:- "gitlab.xuxiaowei.cn:172.26.11.2"#depends_on:# gitlab:# condition: service_healthynetworks:instance:ipv4_address: 172.26.11.3
networks:instance:driver: bridgename: gitlab-instanceipam:config:- subnet: 172.26.11.0/24gateway: 172.26.11.1registry:driver: bridgename: gitlab-registryipam:config:- subnet: 172.26.12.0/24gateway: 172.26.12.1pages:driver: bridgename: gitlab-pagesipam:config:- subnet: 172.26.13.0/24gateway: 172.26.13.1
网络
![](https://static001.geekbang.org/infoq/72/72ea051336e0836d5bb9cc1618af2fc6.png)
外部访问
registry
、pages
时,请自定义路由因为不同网卡之间网络不通,所以 GitLab Runner 容器使用了
registry
网卡,并分配了 172.26.11.3, 所以 GitLab Runner 能与 GitLab 实例 172.26.11.2 进行通信
域名、IP 分配
![](https://static001.geekbang.org/infoq/72/72ea051336e0836d5bb9cc1618af2fc6.png)
挂载卷
挂载卷使用目录形式,根目录是
/srv/gitlab
主要挂载卷
![](https://static001.geekbang.org/infoq/d4/d4f894a282261175dfa0d4762f8a83ab.png)
其他挂载卷
![](https://static001.geekbang.org/infoq/5b/5ba2a078c67acb16187182796ee9176e.png)
1:GitLab 在启用 Pages 后,当用户访问 Pages 功能时,Pages 程序会访问 GitLab 实例, 确认是否存在此 Pages 域名,由于可能无法信任证书,故此处挂载 GitLab 实例的域名证书, 在容器创建时的
entrypoint
命令/assets/wrapper
前增加update-ca-certificates
, 主动触发信任/usr/local/share/ca-certificates
文件夹下的证书2:GitLab Runner 注册时,增加参数
--tls-ca-file
指定证书文件位置, 用于信任 GitLab 实例的 https 证书
证书配置
如果使用
docker-compose.yml
文件内使用了https
,执行创建容器前,需要先存着下列证书文件,如果没有配置https
,则无需下列文件
![](https://static001.geekbang.org/infoq/4d/4d693478820093acf62d148ab3d742fc.png)
创建 docker 命令
在服务器安装 docker、docker compose
创建文件
docker-compose.yml
,内容为上述脚本的内容在
docker-compose.yml
所在的文件夹中执行export GITLAB_HOME=/srv/gitlab && docker compose up -d
密码
默认用户名:root
,默认密码在 /srv/gitlab/config/initial_root_password
文件中
评论