- 博客/
使用 Docker 部署 Gitlab,及常用优化项的说明
Table of Contents
环境说明及准备工作#
部署 Gitlab 版本说明:
docker pull gitlab/gitlab-ce:13.10.2-ce.0
提前拉取好镜像。
docker-compose 版本说明:
docker-compose --version docker-compose version 1.18.0, build 8dd22a9
docker version: 19.03.9
创建 Docker-Compose 部署文件#
Gitlab
docker-compose.yaml
部署文件如下所示
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
or443
这两个特殊端口,如果单独给这么一个服务难免有那么一些浪费。当然不是一定需要这样做,对端口没有特殊要求的话,也可以将端口直接映射到对应的 80 or 443 端口,这样配置相对简单,而且省去了后面的一系列的操作。
创建完配置文件后,我们进行一些启动容器的操作
docker-compose up -d
等待几分钟后,我们测试访问一下对应的端口
Gitlab 中的默认用户是
root
可以看到,服务现在已经启动完成。如果你那边访问出现问题,可以检测一下对应的容器日志。
docker logs -f --tail 100 gitlab-ce
添加使用 nginx 代理#
如上面图片所示,如你使用的容器端口映射不是使用
80
,是无法直接 copy 这地址使用的,我们可以通过添加反代解决
,这里介绍如何使用nginx
进行实现。
安装 nginx#
yum install -y nginx*
这里使用 yum 进行直接安装
对应 nginx 配置文件如下所示
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
的免费证书。
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 文件后,我们进行测试访问一下地址
测试上传文件
可以看到,我们刚才 push 上传的 文件已经可以在
dashboard
中看到了。
优化项说明#
这里的优化项指 关闭 Gitlab 中一些,默认开启了但是又没有什么用处的功能,自己更具实际情况进行选择关停即可,
不是必选的操作
。
默认新建项目时 关闭 Auto DevOps#
开启网络钩子#
与 Jenkins 进行集成时,需要用到 WebHook,这里我们需要将此处进行打开。
接口请求限制#
开启后,可有效避免
cc
攻击, 一般在公网中建议开启,内网的话,可有可无。
开启 grafana dashboard#
在 Gitlab 中,默认存在一套 Prometheus 监控方案,当打开 grafana 后,我们可以访问
${GITLAB_URL}/-/grafana
这个地址进行查看。
并且默认的 grafana 中,已预制了对应的展示模板。
设置时区本土化#
关闭使用 ssh 管理代码#
关闭注册功能#
如果你开启了使用 ldap 用户认证的管理,此项强烈建议是把它关闭的。一般打开了的话,常见于一些对外服务的站点,企业中根本不需要。
设置新用户最小权限#
不勾选此项时,默认新添加的用户还是拥有
创建仓库
的权限的,如果管理员想掌控全局
的话,还是建议开启。
总结#
Gitlab 为企业中 常见的 git 代码管理软件,是在实施 Devops
过程中的利剑,功能强大,并内置了 ci/cd、repository、监控等功能。在对 Gitlab 进行配置优化时,我们需要注意在配置时还 存在着全局生效配置
和 项目局部生效配置
,如在全局中配置了未见生效,可以去对应的项目组中查看此项目对应配置也做了相应的更改否。