使用Docker部署GitLabEE

准备

Docker环境

已支持docker compose插件(当然,也可以转为直接docker run的指令)

(可选)SSL证书

如果需要外网HTTPS访问,则需要准备好相关SSL证书

免费的证书获取方式很多,自行搜索,这里不展开讨论

使用Compose方式部署

  1. 编写compose.yml脚本

    文件内的宿主机部分路径请根据实际情况修改,这里假定都Gitlab配置挂载到宿主机的/data/docker/mnt/gitlab目录

    映射的端口部分也请根据你的实际端口占用情况做修改

     

    yml

    代码解读

    复制代码

    name: 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镜像的条件,可以通过以下两种方式解决

    1. 可以在有条件的环境下拉取镜像后将镜像进行docker save为文件后,将其上传至服务器内解压
    2. 配置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

  1. 修改/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'
  2. 使配置生效

     

    bash

    代码解读

    复制代码

    # Reload配置 (有时候仅重载配置无效,必须重启,很奇怪) gitlab-ctl reconfigure # 或者直接重启 gitlab-ctl restart
  • 踩坑日志
    1. 如果修改了默认的Gitlab端口,并且在external_url指定了非80或者443端口,最好一定要配置nginx['listen_port'] = 443,这个配置决定了容器内部的Nginx监听的地址,如果不配置,会变成监听external_url指定的端口,这里是33443,然而在容器内它应该监听的是443,除非在compose文件就就直接将端口映射写成33443:33443(其实感觉写成一个还更好,可以不用配置nginx['listen_port']了)
    2. 配置了域名,一定要记得修改gitlab_rails['gitlab_ssh_host']配置,否则Gitlab上默认会让你用内网IP的方式进行SSH,ssh端口同理
    3. 如果配置后无法访问,可以看看容器内的/var/opt/gitlab/nginx/conf/gitlab-http.conf文件配置是否正确,这个文件是根据gitlab.orb自动生成的

(可选)配置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'] = "xxx@qq.com" # 在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'] = "xxx@qq.com" gitlab_rails['gitlab_email_enabled'] = true

  • 踩坑日志

    1. gitlab_rails['smtp_enable_starttls_auto']gitlab_rails['smtp_tls']不能同时为true,但是必须开启一个
    2. gitlab_rails['smtp_enable_starttls_auto']=true时,gitlab_rails['smtp_port']端口必须为587,不能为465;
    3. 同样的,如果gitlab_rails['smtp_tls'] = true,端口应为465

生成License

参考:github.com/Lakr233/Git…

我本来尝试直接把这个写到docker compose文件内一起部署的,但是一直尝试都是报错无权限,就放弃这个方式了。。。

  1. 生成

     

    bash

    代码解读

    复制代码

    docker run --rm -it \ -v "./license:/license-generator/build" \ -e LICENSE_NAME="Tim Cook" \ -e LICENSE_COMPANY="Apple Computer, Inc." \ -e LICENSE_EMAIL="tcook@apple.com" \ -e LICENSE_PLAN="ultimate" \ -e LICENSE_USER_COUNT="2147483647" \ -e LICENSE_EXPIRE_YEAR="2500" \ ghcr.io/lakr233/gitlab-license-generator:main

    容器会自动生成两个文件

    1. license_key.pub
    2. GitLabBV.gitlab-license
  2. 拷贝

    将生成license_key.key的内容,拷贝至Gitlab容器内/opt/gitlab/embedded/service/gitlab-rails/.license_encryption_key.pub

  3. 禁ping (可选)

    修改gitlab.orb文件,追加下面这行内容

     

    bash

    代码解读

    复制代码

    gitlab_rails['usage_ping_enabled'] = false
  4. 重启Gitlab

     

    bash

    代码解读

    复制代码

    sudo gitlab-ctl reconfigure sudo gitlab-ctl restart
  5. 配置License

    1. 等待Gitlab重启后使用管理员账户登录

    2. 进入管理员模式

    3. 设置-通用-添加许可证

    4. GitLabBV.gitlab-license的内容填写到Gitlab

      image.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值