Let's Encrypt的教程早就烂大街了。
本文主要针对GitLab如何设置Let's Encrypt证书来进行说明。服务器为Nginx。
因为GitLab也是用Nginx,虽然说可以改一改Ngninx的设置文件,但总觉得GitLab有个gitlab-ctl reconfigure
,自动配置各种包括Nginx在内的环境。直接捣鼓nginx.conf
说不定哪天就挂掉了都不知道原因。
安装 Certbot
https://certbot.eff.org/
什么?看了这你还不会装?退群吧。
注:虽然官方首推 certbot,但是个人觉得 acme.sh 也不错的。
https://github.com/Neilpang/acme.sh
简单粗暴,还能一键 ECC 证书。
新建证书
参考官方文档 User Guide > Getting certificates > Webroot
这一块:
https://certbot.eff.org/docs/using.html#webroot
它会访问你所验证的域名根目下的 .well-known
目录。并且你会在access_log
看到类似这样的访问记录:
66.133.109.36 - - [05/Jan/2016:20:11:24 -0500] "GET /.well-known/acme-challenge/HGr8U1IeTW4kY_Z6UIyaakzOkyQgPr_7ArlLgtZE8SX HTTP/1.1" 200 87 "-" "Mozilla/5.0 (compatible; Let's Encrypt validation server; +https://www.letsencrypt.org)"
所以我们要做的就是想办法在GitLab网址的根目录下建一个可以访问到.well-known的地方。
具体做法是:
编辑 /etc/gitlab/gitlab.rb 文件,找到
custom_gitlab_server_config
并改成:nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"
然后保存退出,运行一遍
gitlab-ctl reconfigure
。用certbot建立证书。
假设你的gitlab网址是gitlab.domain.com,那么现在它应该可以访问到gitlab.domain.com/.well-known。
运行这段命令:certbot cert-only --web-root -w /var/www/letsencrypt -d gitlab.domain.com
然后在/etc/letsencrypt/live/gitlab.domain.com目录下会自动生成证书。
配置证书
再次编辑/etc/gitlab/gitlab.rb,找到相关配置并改成下面这个样子:nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.domain.com/fullchain.pem" nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.domain.com/privkey.pem"
最后别忘了设置
nginx['redirect_http_to_https'] = true
,并在external_url里使用https哦。