准备
Docker环境
已支持docker compose插件(当然,也可以转为直接docker run的指令)
(可选)SSL证书
如果需要外网HTTPS访问,则需要准备好相关SSL证书
免费的证书获取方式很多,自行搜索,这里不展开讨论
使用Compose方式部署
-
编写
compose.yml
脚本文件内的宿主机部分路径请根据实际情况修改,这里假定都Gitlab配置挂载到宿主机的
/data/docker/mnt/gitlab
目录映射的端口部分也请根据你的实际端口占用情况做修改
ymlname: gitlab services: gitlab: container_name: gitlab image: gitlab/gitlab-ee privileged: true ports: # HTTP访问端口 - "33880:80" # SSH端口,可以通过该端口进行sshclone - "33222:22" # HTTPS访问端口,如需HTTPS访问可开启 # - "33443:443" volumes: - '/data/docker/mnt/gitlab/config:/etc/gitlab' - '/data/docker/mnt/gitlab/logs:/var/log/gitlab' - '/data/docker/mnt/gitlab/data:/var/opt/gitlab' # 如果需要配置开启HTTPS,则需要将SSL证书挂载进容器 # - '/data/docker/mnt/ssl/ssl.crt:/ssl/ssl.crt' # - '/data/docker/mnt/ssl/ssl.key:/ssl/ssl.key' restart: always
-
Tips:如果网络环境不具备拉取Docker镜像的条件,可以通过以下两种方式解决
- 可以在有条件的环境下拉取镜像后将镜像进行
docker save
为文件后,将其上传至服务器内解压 - 配置docker代理
- 可以在有条件的环境下拉取镜像后将镜像进行
修改密码
bash
# 进入容器内部
docker exec -it gitlab /bin/bash
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户,id为1的用户是超级管理员
user = User.where(id:1).first
# 修改密码为1234566
user.password='1234566'
# 保存
user.save!
# 退出Gitlab控制台
exit
# 退出容器
exit
(可选)配置HTTPS
本质上就是Gitlab会自行内置一个Nginx,如果不开启HTTPS,这个内置的Nginx是不会开启的
这里假设你的域名地址为
gitlab.xxx.com
-
修改
/etc/gitlab/gitlab.rb
文件 (这里指容器内的路径,也可以直接修改挂载到宿主机的文件,这里配置的是/data/docker/mnt/gitlab/config/gitlab.rb
;如果是二进制部署,则为/etc/gitlab/gitlab.rb
)bash# 进入容器内部 docker exec -it gitlab /bin/bash # 编辑gitlab配置文件 vi /etc/gitlab/gitlab.rb
加入下面的内容
rb# 填写外部访问地址,其实写内网IP也无所谓 external_url 'https://gitlab.xxx.com:33443' # 因为external_url指定的端口非443,如果不指定则会变成监听33443,而容器内应该监听443端口 nginx['listen_port'] = 443 # 开启强制HTTPS,即HTTP时自动重定向到HTTPS nginx['redirect_http_to_https'] = true # `/ssl`是容器内的路径,保持和DockerCompose文件内容器挂载目录一致,可以自定义 nginx['ssl_certificate'] = "/ssl/ssl.crt" nginx['ssl_certificate_key'] = "/ssl/ssl.key" # 由于配置了域名,要把Gitlab内的SSH的地址做出响应修改,不然会显示未内网地址 gitlab_rails['gitlab_ssh_host'] = 'gitlab.xxx.com' # SSH端口默认是22,但是我们在DockerCompose文件已经将22映射到宿主机的33222端口,其实这里也只是影响了Gitlab网页上默认显示的使用SSH方式clone的端口而已 gitlab_rails['gitlab_shell_ssh_port'] = 33222 # 时区配置 gitlab_rails['time_zone'] = 'Asia/Shanghai'
-
使配置生效
bash# Reload配置 (有时候仅重载配置无效,必须重启,很奇怪) gitlab-ctl reconfigure # 或者直接重启 gitlab-ctl restart
- 踩坑日志
- 如果修改了默认的Gitlab端口,并且在
external_url
指定了非80或者443端口,最好一定要配置nginx['listen_port'] = 443
,这个配置决定了容器内部的Nginx监听的地址,如果不配置,会变成监听external_url
指定的端口,这里是33443,然而在容器内它应该监听的是443,除非在compose文件就就直接将端口映射写成33443:33443
(其实感觉写成一个还更好,可以不用配置nginx['listen_port']
了) - 配置了域名,一定要记得修改
gitlab_rails['gitlab_ssh_host']
配置,否则Gitlab上默认会让你用内网IP的方式进行SSH,ssh端口同理 - 如果配置后无法访问,可以看看容器内的
/var/opt/gitlab/nginx/conf/gitlab-http.conf
文件配置是否正确,这个文件是根据gitlab.orb
自动生成的
- 如果修改了默认的Gitlab端口,并且在
(可选)配置SMTP
前面我们已经将Gitlab的配置挂载到宿主机,所以可以直接在宿主机上修改Gitlab的配置文件,当然你也可以进入容器内修改原文件,由于大家宿主机可能各不相同,所以以进入容器内修改为例
bash
# 进入容器内部
docker exec -it gitlab /bin/bash
# 编辑gitlab配置文件
vi /etc/gitlab/gitlab.rb
rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 587
# 替换为你自己的邮箱地址
gitlab_rails['smtp_user_name'] = "[email protected]"
# 在QQ邮箱账号管理内生成一个授权码
gitlab_rails['smtp_password'] = "*********afw"
gitlab_rails['smtp_domain'] = "smtp.qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = false
gitlab_rails['smtp_pool'] = false
# 替换为你自己的邮箱地址
gitlab_rails['gitlab_email_from'] = "[email protected]"
gitlab_rails['gitlab_email_enabled'] = true
-
踩坑日志
gitlab_rails['smtp_enable_starttls_auto']
和gitlab_rails['smtp_tls']
不能同时为true,但是必须开启一个- 当
gitlab_rails['smtp_enable_starttls_auto']=true
时,gitlab_rails['smtp_port']
端口必须为587,不能为465; - 同样的,如果
gitlab_rails['smtp_tls'] = true
,端口应为465
生成License
我本来尝试直接把这个写到docker compose文件内一起部署的,但是一直尝试都是报错无权限,就放弃这个方式了。。。
-
生成
bashdocker run --rm -it \ -v "./license:/license-generator/build" \ -e LICENSE_NAME="Tim Cook" \ -e LICENSE_COMPANY="Apple Computer, Inc." \ -e LICENSE_EMAIL="[email protected]" \ -e LICENSE_PLAN="ultimate" \ -e LICENSE_USER_COUNT="2147483647" \ -e LICENSE_EXPIRE_YEAR="2500" \ ghcr.io/lakr233/gitlab-license-generator:main
容器会自动生成两个文件
- license_key.pub
- GitLabBV.gitlab-license
-
拷贝
将生成
license_key.key
的内容,拷贝至Gitlab容器内/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub
-
禁ping (可选)
修改gitlab.orb文件,追加下面这行内容
bashgitlab_rails['usage_ping_enabled'] = false
-
重启Gitlab
bashsudo gitlab-ctl reconfigure sudo gitlab-ctl restart
-
配置License
-
等待Gitlab重启后使用管理员账户登录
-
进入管理员模式
-
设置-通用-添加许可证
-
将
GitLabBV.gitlab-license
的内容填写到Gitlab
-