在 gitlab ce 中使用 LetsEncrypt 和 Google 网站管理员工具

Using LetsEncrypt and Google webmaster tools with gitlab ce

我已经使用certbot获得了SSL证书。当时 ubuntu 的默认 apache 服务器正在侦听端口 80。假设我的服务器可以通过 example.com.

访问

现在,我是 运行 GitLab CE 9.4.4 服务器,使用我之前通过 letsencrypt 获得的 SSL 证书。在 /etc/gitlab/gitlab.rb 我也有类似的东西

nginx['ssl_certificate'] = "/etc/letsencrypt/live/example.com/fullchain.pem"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/example.com/privkey.pem"

(以及 docker 注册表中带有 registry_nginx 的类似行。)

但是,certbot renew 在尝试更新我的证书时失败了,因为无法通过 http://example.com/.well-known.

访问 /var/www/.well-known

当有人尝试使用 Google 网站管理员工具时,会出现类似的问题。默认验证过程要求您将名为 googleXXXXXXX.html 的文件上传到服务器的根目录。

如何将 GitLab 配置为服务器静态文件 .well-known 和以 google 开头的文件?

(不幸的是,包含 gitlabstatic 文件 的 Google 搜索会产生有关 GitLab 页面的结果。)

通过 GitLab Webroot

Ubuntu 上 GitLab CE 的 webroot 默认为 /opt/gitlab/embedded/service/gitlab-rails/public。您可以将 googleXXXX.html 复制到此目录并将 LetsEncrypt 的 webroot 指向此目录:

...
[renewalparams]
authenticator = webroot
installer = None
account = SOMEHASH
[[webroot_map]]
example.com = /opt/gitlab/embedded/service/gitlab-rails/public

通过 GitLab 配置

配置 LetsEncrypt

打开letencrupt更新配置,例如/etc/letsencrypt/renewal/example.com.conf,并调整选项,使网站根目录指向/var/www/letsencrypt:

...
[renewalparams]
authenticator = webroot
installer = None
account = SOMEHASH
[[webroot_map]]
example.com = /var/www/letsencrypt

创建目录 /var/www/letsencrypt/var/www/letsencrypt/.well-known。后一个目录将存放验证挑战文件。

配置网站站长工具

创建目录 /var/www/google 并将 googleXXXX.html 下载到新创建的目录中。

配置 GitLab(用于 LetsEncrypt 和网站管理员工具)

打开/etc/gitlab/gitlab.rb并添加以下两行。

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

通过运行

重新配置你的gitlab服务器
gitlab-ctl reconfigure

所有以 /.will-known 开头的请求现在都将转发到 /var/www/letsencrypt 目录。同样,所有以/google开头的请求都被转发到目录/var/www/google。 (请注意,这种方法会使以 google 开头的用户或组无法访问。在这种情况下,您可以更改 gitlab 配置以包含 googleXXXX.html)