环境说明及准备工作

  • 部署 Gitlab 版本说明:

    1
    
    docker pull gitlab/gitlab-ce:13.10.2-ce.0
    

    提前拉取好镜像。

  • docker-compose 版本说明:

    1
    2
    
    docker-compose --version
    docker-compose version 1.18.0, build 8dd22a9
    
  • docker version: 19.03.9

创建 Docker-Compose 部署文件

Gitlab docker-compose.yaml 部署文件如下所示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
mkdir -p /data/docker-compose/gitlab-ce 

cd /data/docker-compose/gitlab-ce # 配置文件注意保留,后续的维护多需要使用

cat docker-compose.yaml
version: '2'
services:
    gitlab:
      image: 'gitlab/gitlab-ce:13.10.2-ce.0'
      restart: always
      hostname: 'gitlab.treesir.pub'
      container_name: 'gitlab-ce'
      environment:
        TZ: 'Asia/Shanghai'
        GITLAB_OMNIBUS_CONFIG: |
          external_url 'http://gitlab.treesir.pub'  # or protocol "https"
          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'] = "sample@qq.com"
          gitlab_rails['smtp_password'] = "sample"
          gitlab_rails['smtp_authentication'] = "login"
          gitlab_rails['smtp_enable_starttls_auto'] = true
          gitlab_rails['smtp_tls'] = true
          gitlab_rails['gitlab_email_from'] = 'sample@qq.com'
      ports:
        - '18080:80'
      volumes:
        - /application/gitlab/config:/etc/gitlab
        - /application/gitlab/data:/var/opt/gitlab
        - /application/gitlab/logs:/var/log/gitlab
volumes:
    config:
    data:
    logs:

修改对应配置项中的 域名地址smtp信息,这里使用的 smtp地址信息为 QQemail的,获取方式可以参考 此方法

还有就是需要注意一下配置文件中的端口映射,这里将容器内的 80 端口映射到了 18080,原因是打算用 nginx 来配置代理使用,这样可以更加合理的利用80 or 443 这两个特殊端口,如果单独给这么一个服务难免有那么一些浪费。当然不是一定需要这样做,对端口没有特殊要求的话,也可以将端口直接映射到对应的 80 or 443 端口,这样配置相对简单,而且省去了后面的一系列的操作。

创建完配置文件后,我们进行一些启动容器的操作

1
docker-compose up -d

image-20210409163819513

等待几分钟后,我们测试访问一下对应的端口

Gitlab 中的默认用户是 root

image-20210409164819832

可以看到,服务现在已经启动完成。如果你那边访问出现问题,可以检测一下对应的容器日志。

1
docker logs -f --tail 100 gitlab-ce

添加使用 nginx 代理

image-20210409165223276

如上面图片所示,如你使用的容器端口映射不是使用 80,是无法直接 copy 这地址使用的,我们可以通过添加 反代解决,这里介绍如何使用 nginx 进行实现。

安装 nginx

1
yum install -y nginx*

这里使用 yum 进行直接安装

对应 nginx 配置文件如下所示

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
cat /etc/nginx/conf.d/gitlab.conf

upstream gitlab {
  server 192.168.8.110:18080;  # 如 nginx 和 gitlab在同一台机器上时,建议使用地址 "127.0.0.1"
}

server {
  listen 80;
  server_name gitlab.treesir.pub;
  location / {
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;

    proxy_set_header        Host                $http_host;
    proxy_set_header        X-Real-IP           $remote_addr;
    proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
    proxy_set_header        X-Forwarded-Proto   http;
    proxy_set_header        X-Frame-Options     SAMEORIGIN;
    proxy_pass http://gitlab ;
  }
}

#server {
#  listen 443 ssl;
#  server_name registry.example.com;
#
#  ssl on;
#  ssl_certificate /letsencrypt/fullchain.pem;
#  ssl_certificate_key /letsencrypt/privkey.pem;
#
#  location / {
#    proxy_read_timeout      300;
#    proxy_connect_timeout   300;
#    proxy_redirect          off;
#
#    proxy_set_header        Host                $http_host;
#    proxy_set_header        X-Real-IP           $remote_addr;
#    proxy_set_header        X-Forwarded-For     $proxy_add_x_forwarded_for;
#    proxy_set_header        X-Forwarded-Proto   https;
#    proxy_set_header        X-Frame-Options     SAMEORIGIN;
#    proxy_pass http://gitlab;
#  }
#}

默认内网自己使用的话,对安全没有什么需求的话,可以只开启 http 协议,但是如果在公网的话,还是建议开启 https的。配置文件中有示例配置,打开注释即可进行使用,证书的话这里推荐 acme.sh 的免费证书。

1
2
3
4
5
6
7
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

nginx -s reload  # 重载生效

systemctl enable nginx # 设置 nginx 开机自启

更改 hosts 文件后,我们进行测试访问一下地址

更改 hosts文件 方法说明

image-20210409172159652

测试上传文件

image-20210409172547967

image-20210409172607523

可以看到,我们刚才 push 上传的 文件已经可以在 dashboard 中看到了。

优化项说明

这里的优化项指 关闭 Gitlab 中一些,默认开启了但是又没有什么用处的功能,自己更具实际情况进行选择关停即可,不是必选的操作

默认新建项目时 关闭 Auto DevOps

image-20210412150002697

开启网络钩子

与 Jenkins 进行集成时,需要用到 WebHook,这里我们需要将此处进行打开。

image-20210412150343435

接口请求限制

开启后,可有效避免 cc 攻击, 一般在公网中建议开启,内网的话,可有可无。

image-20210412150549008

开启 grafana dashboard

在 Gitlab 中,默认存在一套 Prometheus 监控方案,当打开 grafana 后,我们可以访问 ${GITLAB_URL}/-/grafana 这个地址进行查看。

image-20210412150825760

image-20210412151147827

并且默认的 grafana 中,已预制了对应的展示模板。

image-20210412151401340

设置时区本土化

image-20210412151612643

关闭使用 ssh 管理代码

image-20210412152449920

关闭注册功能

如果你开启了使用 ldap 用户认证的管理,此项强烈建议是把它关闭的。一般打开了的话,常见于一些对外服务的站点,企业中根本不需要。

image-20210412152950209

设置新用户最小权限

不勾选此项时,默认新添加的用户还是拥有创建仓库 的权限的,如果管理员想 掌控全局 的话,还是建议开启。

image-20210412153256775

总结

Gitlab 为企业中 常见的 git 代码管理软件,是在实施 Devops 过程中的利剑,功能强大,并内置了 ci/cd、repository、监控等功能。在对 Gitlab 进行配置优化时,我们需要注意在配置时还 存在着全局生效配置项目局部生效配置,如在全局中配置了未见生效,可以去对应的项目组中查看此项目对应配置也做了相应的更改否。