docker部署gitlab实践总结

二维码
| Jul 10, 2020 | 原创

关于 gitlab 的容器部署方式,官方文档 已经比较详细,在这里整理下在实操中的遇到的具体细节问题。

gitlab 提供两个具体的镜像,社区开源版(gitlab/gitlab-ce)和收费版(gitlab/gitlab-ee)。使用也比较简单,直接拉取运行,或者制作 Dockerfile 文件即可:

# 创建数据卷目录
mkdir /data/gitlab
export GITLAB_HOME=/data/gitlab

# 拉去镜像
sudo docker pull gitlab/gitlab-ce:13.1.3-ce.0

# 运行
sudo docker run --detach \
	--hostname example.com \
	--publish 443:443 \
	--publish 80:80 \
	--publish 22:22 \
	--name gitlab \
	--restart always \
	--volume $GITLAB_HOME/config:/etc/gitlab \
	--volume $GITLAB_HOME/logs:/var/log/gitlab \
	--volume $GITLAB_HOME/data:/var/opt/gitlab \
	gitlab/gitlab-ce:13.1.3-ce.0

容器部署,唯一要关注的是数据是持久化,所以需要配置三个数据卷映射。

项目配置 {config}

gitlab 配置存放于 /etc/gitlab 目录下,最核心的文件是 gitlab.rb 配置,运行项目后,需要额外做一些配置。

1.https 配置

默认 gitlab 没有启动 https 服务,需要配置如下字段,且准备好证书文件存放在 /etc/gitlab/ssl 目录下:

# 配置外部https访问域名
external_url 'https://example.com'

# 启用nginx配置
nginx['enable'] = true

# 客户端文件上传最大尺寸
nginx['client_max_body_size'] = '250m'

# 是否支持自动http调整到https
nginx['redirect_http_to_https'] = true

# nginx http端口
nginx['redirect_http_to_https_port'] = 80

# 证书文件
nginx['ssl_certificate'] = "/etc/gitlab/ssl/example.com.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/example.com.key"
nginx['ssl_ciphers'] = "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256"
nginx['ssl_prefer_server_ciphers'] = "on"

其他配置字段请根据自己具体情况评估是否启用, 字段大部分来自己于 nginx 官方默认配置。

2. 邮箱配置

gitlab 提供的发邮件官方配置(查看)已经总结的非常详细,这里使用的是 smtp配置:

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = ""
gitlab_rails['smtp_port'] = 587
gitlab_rails['smtp_user_name'] = ""
gitlab_rails['smtp_password'] = ""
gitlab_rails['smtp_domain'] = ""
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['gitlab_email_from'] = 'haodev@alarm.360.cn'

测试邮件配置

gitlab 自带邮件配置测试脚本,请直接登录启动的容器 bash 环境下,运行:

gitlab-rails console

然后输入发送邮件脚本:

Notify.test_email('收件箱地址', 'Message Subject', 'Message Body').deliver_now

如果能收到测试邮件即配置成功。