使用acme.sh为GitLab添加HTTPS支持

过时警告
这篇文章所描述的步骤与方法由于时间关系已不再可靠,GitLab 自 10.5 版本开始自带 Let's Encrypt 支持,详情参考官方文档: Let's Encrypt integration in GitLab.

GitLab是什么:

GitLab unifies issues, code review, CI and CD into a single UI

或许你可以把它理解成一个可以免费下载并搭建在自己的服务器上,类似于 GitHub 的工具,不过如果你还不知道它是什么,大概也不需要看这篇文章吧 : )

acme.sh 是一个纯 Shell 语言写成的工具,它可能是目前最好用的 Let's Encrypt 证书申请工具,一次安装,自动续期

准备

  • 一台已经配置好的 GitLab 服务器,并且拥有服务器控制权
  • 确认防火墙已经开放 443
  • 没了。

开工!

首先安装 acme.sh,嗯,对,左边这个就是链接...点击之后会跳转到 GitHub,根据 ReadMe 安装即可。安装后可能需要执行 source ~/.profile 才能使命令生效

申请证书:

acme.sh --issue -d git.orz.corp  -w /opt/gitlab/embedded/service/gitlab-rails/public

将 git.orz.corp 替换为你的 GitLab 域名,如果没有域名只有 IP,是不能申请证书的,只能自签,这里不做介绍,请跳过并参考 “安装证书” 部分

这里可以填写多个不同的子域名,每个子域名使用 -d 参数添加,-w 是指定站点的根目录所在位置,这里填写的位置是 GitLab CE 8.14.4 的默认 WebRoot 位置

使用 WebRoot 方式无需添加 DNS 记录,因为 DNS 记录的生效时间因服务提供商不同而有所不同,所以除非真的想用这种方式,否则还是用 WebRoot 方式方便一些

安装证书

先在 /etc/gitlab 中新建一个名为 ssl 的文件夹,并设置权限为700防止未经授权的用户拿到证书

acme.sh --installcert -d git.orz.corp \
--certpath       /etc/gitlab/ssl/cert.crt  \
--keypath        /etc/gitlab/ssl/cert.key \
--reloadcmd      "gitlab-ctl restart"

同样,将 git.orz.corp 替换成你的 GitLab 使用的域名。这里使用 "gitlab-ctl restart" 的原因是此处的命令会在续期是自动执行,但是更换证书实际上只需要重启而不需要更新 GitLab 的配置,所以不需要使用 "gitlab-ctl reconfigure"

修改配置

使用你最喜欢的编辑器打开 "/etc/gitlab/gitlab.rb",以下提及的配置项如果行开头有 "#"(井号),请删除以取消注释

  • 将 external_url 'http://git.orz.corp' 修改为 external_url 'https://git.orz.corp'
  • 将 nginx['redirect_http_to_https'] = false,将 false 修改为 true
  • nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt" 修改为 nginx['ssl_certificate'] = "/etc/gitlab/ssl/cert.crt"
  • nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key" 修改为 nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/cert.key"
  • 将以下内容的注释取消
 nginx['proxy_set_headers'] = {
  "Host" => "$http_host",
  "X-Real-IP" => "$remote_addr",
  "X-Forwarded-For" => "$proxy_add_x_forwarded_for",
  "X-Forwarded-Proto" => "https",
  "X-Forwarded-Ssl" => "on"
 }

好了,所有配置都已经完成,此时可以保存文件并关闭编辑器,运行 "gitlab-ctl --reconfigure 并等待命令完成"

如果不出意外,那么现在访问你的 GitLab 应该可以看到地址栏前面的绿色小锁头了~

有任何问题欢迎在文章底部留言

发表评论

电子邮件地址不会被公开。 必填项已用*标注