说明
- gitlab安装的方式很多,容器方式相对比较容易管理且不污染宿主机环境
- 使用Docker-Compose方法,固化启动操作到yaml文件、挂载容器数据到本地, 容器上下线不会存在数据丢失
步骤
前置
资源要求
- 存在一台已安装Docker的服务器,建议2核CPU、6GB内存以上
- gitlab是内存型应用,运行非常消耗内存
- 6G是实际观察发现的可勉强运行的内存底线,官方建议的4G内存不靠谱
- 登录dockerhub,查看gitlab/gitlab-ce最新的tag,获取最新gitlab的版本号,如16.7.3-ce.0
- 不建议版本号使用latest,不利于后续升级确定版本
- ce为社区版本
- ee为商业版本
目录准备
- 创建compose目录及文件存储目录
# 存放gitlab的compose目录
mkdir -p /data/gitlab
# 创建compose文件
touch /data/gitlab/docker-compose.yml
# gitlab的数据存放目录
mkdir -p /data/gitlab/config
mkdir -p /data/gitlab/data
mkdir -p /data/gitlab/logs
安装
- 创建docker自定义bridge网络,
docker network create --driver bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 network-test
- 修改docker-compose.yml文件,如下
services:
gitlab:
# 使用的gitlab镜像
image: gitlab/gitlab-ce:16.7.3-ce.0
# 自定义的容器名称
container_name: gitlab
# 启动策略
restart: unless-stopped
# 特权模式,允许一些root权限的操作
privileged: true
# hostname设置
hostname: 'gitlab'
# 环境设置,gitlab自定义配置大多使用环境变量控制
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://test.gitlab.com:8181'
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['smtp_enable'] = 'true'
gitlab_rails['smtp_address'] = 'smtp.qq.com'
gitlab_rails['smtp_port'] = '465'
gitlab_rails['smtp_user_name'] = 'xxx@qq.com'
gitlab_rails['smtp_password'] = 'xxx'
gitlab_rails['smtp_domain'] = 'qq.com'
gitlab_rails['smtp_authentication'] = 'login'
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = 'xx@qq.com'
gitlab_rails['gitlab_ssh_host'] = 'test.gitlab.com'
gitlab_rails['gitlab_shell_ssh_port'] = 22
volumes:
# 这三个目录必须挂载,这三个是gitlab的动态数据
# 挂载后支持dockcer compose进行down再up后数据不丢失
- './config:/etc/gitlab'
- './data:/var/opt/gitlab'
- './logs:/var/log/gitlab'
ports:
# 映射ssh clone方式的端口到宿主机
- '22:22'
# 映射http clone方式的端口到宿主机
- '80:80'
# 共享内存大小,建议至少256m起步
shm_size: '256m'
networks:
network-test:
# 设置一个静态ip地址
ipv4_address: "172.18.0.8"
networks:
network-test:
external: true
-
GITLAB_OMNIBUS_CONFIG参数解释
- external_url
- gitlab的访问地址
- gitlab的http/https克隆地址,根据填的时http、https自动判断
- 支持ip、域名
- 指定端口,默认为80,如果ip或者域名后带自定义端口, 则web访问和http/https拉取的端口自动调整为此自定义端口
- gitlab_rails[‘time_zone’]
- 时区,国内使用Asia/Shanghai
- smtp相关:配置gitlab服务器发邮件使用的配置,此处时一个使用QQ邮箱的例子,需要注意点如下:
- gitlab_rails[‘smtp_user_name’]:发送gitlab邮件的真实邮箱,建议独立申请一个,不要使用自己生活邮箱
- gitlab_rails[‘smtp_password’]:不是邮箱的登录密码,而是smtp服务的授权码
- gitlab_rails[‘gitlab_email_from’]:设置GitLab发送的邮件的发件人地址。指定邮件中显示的发件人地址,比如"noreply@example.com"。这个地址通常是一个专门用于GitLab发送邮件的虚拟地址,而不是真实的用户邮箱地址
- gitlab_rails[‘gitlab_ssh_host’]:ssh拉取方式的地址,支持域名和ip,建议和external_url的域名/IP部分一致
- gitlab_rails[‘gitlab_shell_ssh_port’]:ssh拉取方式的端口,默认22,请根据实际修改
- external_url
-
启动gitlab容器
cd /data/gitlab
docker compose up -d
- (可选)启动后修改配置
- 方法一:docker compose down后,修改docker-compose.yml文件后再启动
- 方法二:进入docker容器后手动修改
# 宿主机上执行命令进入容器
docker exec -ti gitlab bash
# 文件路径
vi /etc/gitlab/gitlab.rb
# 例子,如修改ssh端口为2222
# 对应的docker-compose.yml中的端口也需要修改,否则宿主机无法映射
gitlab_rails['gitlab_shell_ssh_port'] = 2222
# 配置生效
gitlab-ctl reconfigure
# 重启生效
gitlab-ctl restart
- 首次启动时间很久,需要长时间等待,至少十几分钟
- 第一次登陆gitlab需要修改默认root密码
- 获取初始密码
docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
升级
docker gitlab的升级一般类似其他方式升级,都需要按照官方的版本升级图,官方升级参考
- 执行升级前备份
docker exec -ti gitlab gitlab-rake gitlab:backup:create
- 下线当前Docker容器
cd /data/gitlab
docker compose down
- 修改镜像版本号后再上线
- 如修改docker-compose.yml中images的tag从v16.3.6到16.7.3
- 上线修改后的容器
docker compose up -d
- 等待10分钟左右
- 容器上线后gitlab自动运行升级,挺慢的,预计需要十几分钟
参考文档
Gitlab官方Docker安装指导
Gitlab官方升级指导
Docker部署的gitlab升级指南
Docker部署gitlab(避坑版)
Nas码农篇:群晖Docker安装Gitlab
评论区