Synology / 遇到问题 · 2021年12月31日 0

群晖docker部署gitlab14.6.0,同时配置smtp与https

 在群晖上安装gitlab,需要你的群晖至少有8g内存
 建议使用ssd安装 

前言

对于github经常由于网络环境不能访问,我很早就产生了建gitlab的念头,但是由于这玩意真的太吃内存了,所以拖到了现在,最近已经把新内存条安装好了,可以开始搭建了。

首先我尝试了群晖的gitlab套件,但是问题多多。首先全网配置文件一般都是针对修改gitlab.rb,群晖套件只能修改环境变量。实测gitlab14.6.0版本通过修改环境变量来配置邮件服务器很难,并没有达成目的,所以这时候直接放弃了。

之后根据群友的建议,docker直装了。

拉取与设置镜像

pull镜像
pull镜像

设置端口

设置端口
设置gitlab的端口

设置装载路径

gitlab的装载路径
gitlab的装载路径

之后启动吧,由于我接触docker是在群晖里,所以用不惯docker命令。

前置设置(配合docker里映射的端口)

外部访问链接

external_url 'https://act.jiawei.xin:30001'

更改时区

gitlab_rails['time_zone'] = 'Asia/Shanghai'

设置smtp发件

# gitlab 14.6.0

gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "mail.mb6.top"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "notice-gitlab@mb6.top"
gitlab_rails['smtp_password'] = "***************"
gitlab_rails['smtp_domain'] = "mail.mb6.top"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['smtp_pool'] = false

### Email Settings
gitlab_rails['gitlab_email_enabled'] = true

# 这个gitlab_email_from必须和上边smtp_user_name相同
gitlab_rails['gitlab_email_from'] = 'notice-gitlab@mb6.top'

# 显示发件人
gitlab_rails['gitlab_email_display_name'] = 'Synology_Gitlab'

设置https访问 git

首先需要更正群晖docker的内部时间。群晖docker的时间有时候可以通过设置环境变量更正,有时候一些容器没有用,实测gitlab是可以的,

docker添加环境变量

TZ=Asia/Shanghai

之后修改girlab.rb内

nginx['enable'] = true

nginx['redirect_http_to_https'] = true

# 这个端口默认是80,我改成30000了,因为docker里容器端口设置成了30000
nginx['redirect_http_to_https_port'] = 30000

# 在/docker/gitlab/config/下新建ssl文件夹,把证书放进去
nginx['ssl_certificate'] = "/etc/gitlab/ssl/5411800.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/5411800.key"

# 这个端口默认是443,我改成30001了,因为docker里容器端口设置成了30001
nginx['listen_port'] = 30001
证书路径
证书路径

修改完成后,让配置生效。
在终端机内新建一个窗口

群晖docker控制台,新建终端机
群晖docker控制台,新建终端机

执行下面的命令:

gitlab-ctl reconfigure
gitlab-ctl restart

设置https参考了这个老哥的 帖子,但是老哥用的是14.5.0版本,他说他的有问题,还得改一大堆nginx的设置。我用的14.6.0实测不需要,只改gitlab.rb里这一点就可以了。

vim /etc/gitlab/gitlab.rb
#13行的 http >> https
external_url='https://192.168.0.87:8443'
#修改nginx配置
letsencrypt['enable'] = false
nginx['redirect_http_to_https'] =true
nginx['redirect_http_to_https_port'] = 80
nginx['ssl_certificate'] = "/etc/gitlab/ssl/server.crt"
nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/server.key"
nginx['listen_port'] = 443

在执行完之后,发现git报错:fatal: unable to access ‘https://git.mb6.top:30001/gitlab-instance-e476e04f/Monitoring.git/’: SSL certificate problem: unable to get local issuer certificate

ssl签名不正常clone报错
ssl签名不正常,clone报错

翻了翻官方文档,在官方指导文档里有这样一句话:Make sure you use the full certificate chain in order to prevent SSL errors when clients connect. The full certificate chain order should consist of the server certificate first, followed by all intermediate certificates, with the root CA last. 意思是crt证书不能是单独的public证书或者chain证书,得把他们合到一起,并且key不能有密码。

所以证书再传一份看看吧!

这次成功了,git正常,网页正常,邮件服务正常。

git clone正常
git clone正常
浏览器https访问,并且http重定向到https
浏览器https访问,并且http重定向到https
邮件发送正常
邮件发送正常

系统资源的占用

系统资源的占用
系统资源的占用

资源占用真的挺多的,4g内存配置的群晖应该是没法安装了,不上ssd打开有点慢。

其他可能用到的功能

  1. 生成ed25519 ssh秘钥
ssh-keygen -t ed25519 -C "your_email@example.com"

2. 群晖docker内时间不对 会影响证书的验证

root登陆 ssh终端, 输入命令 docker ps 获取时间不对容器的id

执行命令

docker cp /etc/localtime 040a7616f83d:/etc/localtime

这个容器关闭等操作 均不会受影响。如果删除了重新建立需要重复一次。

参考

https://www.cxybb.com/article/seashouwang/118994439#httpsgitlab_190

https://docs.gitlab.com/omnibus/settings/nginx.html#manually-configuring-https

https://www.zimrilink.com/nas/107.html