前言

需要用到Gitlab,但是其他地方的不放心,看了下有docker版的,所以搭一个记录一下。

过程

安装

[!NOTE]

主要参考官方文档:https://docs.gitlab.com/ee/install/docker.html#install-gitlab-using-docker-compose

安装好docker后,创建一个docker-compose.yml,如下:

version: '3.6'
services:
  web:
    image: 'gitlab/gitlab-ee:latest'
    restart: always
    hostname: 'gitlab.gm7.org'
    environment:
      GITLAB_OMNIBUS_CONFIG: |
        # Add any other gitlab.rb configuration here, each on its own line
        external_url 'https://gitlab.gm7.org'
        gitlab_rails['gitlab_shell_ssh_port'] = 2222
    ports:
      - '80:80'
      - '443:443'
      - '2222:22'
    volumes:
      - '/srv/gitlab/config:/etc/gitlab'
      - '/srv/gitlab/logs:/var/log/gitlab'
      - '/srv/gitlab/data:/var/opt/gitlab'
    shm_size: '256m'

然后执行如下命令即可:

docker-compose up -d

等它ok,gitlab就搭建好了,没啥技术含量

image-20220108152616019

映射目录说明

GitLab中主要三个目录需要被映射出来,分别是

  • /etc/gitlab : 配置文件目录。GitLab的主要配置文件 gitlab.rb 保存在这个目录
  • /var/opt/gitlab :GitLab的运行目录和数据保存目录
  • /var/log/gitlab : GitLab的日志目录

一些问题

配置设置:https://docs.gitlab.com/omnibus/settings/

设置root密码

设置其他信息,比如邮箱啥的,都一样

网上全部都说访问第一次网页会提示设置root密码,然而我没看到设置root密码的地方,就找到了另一种方法:直接进容器里面改

docker exec -it gitlab_web_1 /bin/bash
# 执行后等它加载完
gitlab-rails console -e production
# 获取root用户
user = User.where(id: 1).first
# 设置密码
user.password = 'test123...'
user.password_confirmation = 'test123...'
# 保存
user.save!
# 退出
exit

image-20220108152550540

去网页端登陆,OK

image-20220108152700121

配置自己的证书

gitlab会在 config/ssl 目录下生成自签名证书,但因为没有CA认证,所以重配置命令最后会报证书检查错误,不过不影响配置生效,浏览器会有安全警告,需要手动接受证书或者访问会被阻止。

如果有CA认证证书,可以按照以下步骤安装和配置

首先将认证证书和密钥文件放置在 config/ssl 目录下,然后修改NGINX的SSL证书配置(config/github.rb中)。例如:

nginx['ssl_certificate'] = "/etc/gitlab/ssl/gitlab.gm7.org.pem"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/gitlab.gm7.org.key"

image-20220108154233517

保存配置修改后,执行 docker exec -it gitlab_web_1 gitlab-ctl reconfigure 使变更生效。接下来就可以完全正常的通过浏览器访问安全地址了。

[!WARNING]

必须要将 external_url 配置为HTTPS地址,GitLab才会开启HTTPS,只配置证书不会开启HTTPS。

集成证书

gitlab可以自动集成Let's Encrypt的证书,而无需我们配置

修改conf/gitlab.rb,对主域的Let's Encrypt支持:

letsencrypt['enable'] = true                      # GitLab 10.5 and 10.6 require this option
external_url "https://gitlab.example.com"         # Must use https protocol
letsencrypt['contact_emails'] = ['[email protected]'] # Optional

自动更新SSL证书,还是修改配置文件,默认配置文件是每4天午夜的时候更新,也可以使用如下配置

letsencrypt['auto_renew'] = true
# This example renews every 7th day at 12:30
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"

手动更新SSL证书

gitlab-ctl renew-le-certs

刷新配置

gitlab-ctl reconfigure

配置HTTP跳转

当HTTPS开启之后,GitLab会关闭HTTP访问。此时可以配置GitLab将HTTP请求转发到HTTPS,但不能只以HTTP方式访问。

修改 config/gitlab.rb 修改以下配置:

nginx['redirect_http_to_https'] = true
nginx['redirect_http_to_https_port'] = 80

保存配置修改后,执行 docker exec -it gitlab_web_1 gitlab-ctl reconfigure 使变更生效。此时,再访问HTTP地址,就会跳转到HTTPS。

配置SSH端口

使用Docker部署GitLab,由于一般22端口已经被宿主服务器使用了,需要将GitLab SSH服务的22端口映射到其他端口。接下来以使用2222端口为例。

[!NOTE]

上面我们已经用本地2222端口映射了内部的22端口了,所以不需要再单独映射了

修改 config/gitlab.rb

gitlab_rails['gitlab_shell_ssh_port'] = 8122

image-20220108154809568

保存配置修改后,执行 docker exec -it gitlab_web_1 gitlab-ctl reconfigure 使变更生效。

关闭自带NGINX

GitLab自带的NGINX可以关闭,但此时需要配置Workhorse服务,因为默认情况下Workhorse只监听Unix Socket。

config/gitlab.rb 中添加以下配置:

nginx['enable'] = false
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "0.0.0.0:8181"

上例中的配置将使Workhorse监听8181端口。保存配置修改后,执行 docker exec -it gitlab_web_1 gitlab-ctl reconfigure 使变更生效。

[!WARNING]

在启动容器时需要将Workhorse监听的端口映射出来。

配置Nginx反向代理

通常情况下都会在GitLab前放置一个Nginx做为服务的反向代理。这时,需要对Nginx和GitLab的配置都做出调整。

例如,首先在用来做反向代理的Nginx中,添加以下服务配置:

upstream gitlab-workhorse {
    server 192.168.1.18:8181;
}

server {
  listen *:80;

  server_name my-gitlab;
  server_tokens off; 

  gzip on;

  proxy_set_header Host $http_host_with_default;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

  location / {
    proxy_cache off;
    proxy_pass  http://gitlab-workhorse;
  }
}

以上配置中,假设GitLab服务监听的是 192.168.1.18 上的 8181 端口。X-Real-IPX-Forwarded-For两个Header用来向GitLab服务传递客户端的真实IP。

为了让GitLab后端能够正常从 X-Real-IPX-Forwarded-For 中读取客户端的IP,需要在 config/gitlab.rb 添加以下配置:

nginx['real_ip_trusted_addresses'] = ['192.168.1.0/24', '172.17.0.0/24']

当Nginx代理也是Docker容器时,其IP有可能是172.17.0.0网段,所以这里也在配置中添加了这个网段。

[!WARNING]

无论GitLab自带的Nginx服务是否开启,都需要添加这个配置

邮箱配置

参考:https://docs.gitlab.com/omnibus/settings/smtp.html?spm=a2c6h.12873639.0.0.5edfaf686YW1R0#smtp-settings

修改 config/gitlab.rb

image-20220108160256555

还有

image-20220108161001562

保存配置修改后,执行使变更生效。

docker exec -it gitlab_web_1 gitlab-ctl reconfigure

邮件发送测试(发送标题和正文不能包含中文)

docker exec -it gitlab_web_1 /bin/bash
# 控制台,等几分钟
gitlab-rails console
# 发送测试邮件
Notify.test_email('收件人邮箱', '邮件标题', '邮件正文').deliver_now

image-20220108161550146

image-20220108161420681

上传文件过大

提示

error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large

出现以上问题同样是因为上传软件包过大,需要我们在nginx参数中进行调整设置文件传输大小的限制。需要注意的是,如果是反向代理的Gitlab需要我们将两台服务器的nginx都进行设置。

grep -r "client_max_body_size" /srv/gitlab

config/gitlab.rb设置

nginx['client_max_body_size'] = '1024m'

[!TIP]

还是不行建议用ssh

开启邮箱验证

image-20220110113345212

禁用avatar头像

头像服务器在国外,开启头像可能会因为加载不出来头像而阻塞正常图片的加载

image-20220112164333402

版本更新

参考更新文档:https://docs.gitlab.com/ee/update/

更新路径:https://docs.gitlab.com/ee/update/#upgrade-paths

docker tags: https://hub.docker.com/r/gitlab/gitlab-ee/tags

当前版本:14.6.1-ee,准备升级到 16.0.1-ee(latest),更新路径如下:

image-20230526下午21332427

14.9.5 > 14.10.5 > 15.0.5 > 15.1.6 > 15.4.6 > 15.8.5 > 15.11.0 > 15.11.6 > 16.0.1

为什么中间多了一些版本

15.8.5版本:是因为不知道什么原因,从15.4.6无法直接到15.11.0,所以找了个中间的尝试才成功

15.11.0版本:不知道为啥从15.8.5不能直接到15.11.6,找了个接近的11的版本

流程如下:

# pull最近的版本
docker pull gitlab/gitlab-ee:14.9.5-ee.0
# 修改 docker-compose.yml 中的image
image: 'gitlab/gitlab-ee:14.9.5-ee.0'
# 执行升级
docker-compose down && docker-compose up -d

...
一直重复到你想要的最新版本即可

必须要一个大版本一个大版本的更新,经历了一下午,终于是成功了。

image-20230526下午84543135

可能问题

通过docker logs gitlab_web_1查看日志,如果是一些配置问题,那就根据提示去修改即可。

Q:

/opt/gitlab/embedded/bin/runsvdir-start: line 24: ulimit: pending signals: cannot modify limit: Operation not permitted
/opt/gitlab/embedded/bin/runsvdir-start: line 37: /proc/sys/fs/file-max: Read-only file system

A:

docker-compose.yaml文件中的image下方添加一行 privileged: true

然后执行如下代码

docker exec -it gitlab_web_1 update-permissions
docker restart gitlab_web_1
Copyright © d4m1ts 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-05-26 20:46:41

results matching ""

    No results matching ""