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的地方。
具体做法是:

  1. 编辑 /etc/gitlab/gitlab.rb 文件,找到custom_gitlab_server_config并改成:

    nginx['custom_gitlab_server_config'] = "location ^~ /.well-known { root /var/www/letsencrypt; }"

    然后保存退出,运行一遍gitlab-ctl reconfigure

  2. 用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目录下会自动生成证书。

  3. 配置证书
    再次编辑/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哦。

最后修改:2019 年 05 月 10 日
如果觉得我的文章对你有用,请随意赞赏