世界上最伟大的投资就是投资自己的教育

首页Nginx
随风 · 练气

Nginx 学习笔记系列文章教程之 给 GitLab 应用加上 https

随风发布于5340 次阅读

1. 介绍

在以前的一篇文章我们介绍过如何用 docker 来部署 gitlab 应用:使用 compose 部署 GitLab 应用 (八)

还有一篇文章是介绍用acme.sh给网站加上 https 的:使用 acme.sh 安装 Let’ s Encrypt 提供的免费 SSL 证书

现在这篇文章来结合之前的两篇文章的内容,给 gitlab 网站加上 https 应用的。

2. 申请证书

第一步是申请证书:

$ acme.sh --issue -d gitlab.rails365.net -w /srv/docker/gitlab/gitlab

/srv/docker/gitlab/gitlab是 gitlab 这个 docker 所使用的数据卷的目录。

执行这行命令,你会发现输出是这样的:

[Sun Mar 12 11:06:15 CST 2017] Single domain='gitlab.rails365.net'
[Sun Mar 12 11:06:15 CST 2017] Getting domain auth token for each domain
[Sun Mar 12 11:06:15 CST 2017] Getting webroot for domain='gitlab.rails365.net'
[Sun Mar 12 11:06:15 CST 2017] Getting new-authz for domain='gitlab.rails365.net'
[Sun Mar 12 11:06:20 CST 2017] The new-authz request is ok.
[Sun Mar 12 11:06:20 CST 2017] Verifying:gitlab.rails365.net
[Sun Mar 12 11:06:25 CST 2017] gitlab.rails365.net:Verify error:Invalid response from http://gitlab.rails365.net/.well-known/acme-challenge/M383V-Nx8XeuYkzt5gUYIufSbiOuMB5ox3OZyKXz21M: 
[Sun Mar 12 11:06:25 CST 2017] Please add '--debug' or '--log' to check more details.
[Sun Mar 12 11:06:25 CST 2017] See: https://github.com/Neilpang/acme.sh/wiki/How-to-debug-acme.sh

主要报错的这一行是这里:

gitlab.rails365.net:Verify error:Invalid response from http://gitlab.rails365.net/.well-known/acme-challenge/M383V-Nx8XeuYkzt5gUYIufSbiOuMB5ox3OZyKXz21M

其实acme.sh要验证一下这个网站的所有权,也就是说只要你能证明这个网站或域名你是能控制的,就可以了,它是通过向网站写些数据,或读些数据来验证的,比如,在你的网站根目录下新建一个目录.well-known,再往里面写些东西。

所以我们只要用 nginx 把这个处理一下就好了:

比如:

location /.well-known/ {
    root /srv/docker/gitlab/gitlab;
  }

下面会给出完整的配置的。

然后再执行之前的命令就会成功的。

接着把证书安装到 gitlab 那里。

$ mkdir /srv/docker/gitlab/gitlab/ssl
$ acme.sh --installcert -d gitlab.rails365.net \
               --keypath       /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key  \
               --fullchainpath /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key.pem \
               --reloadcmd     "sudo nginx -s reload"
$ openssl dhparam -out /srv/docker/gitlab/gitlab/ssl/dhparam.pem 2048

最后 nginx 里加上配置:

upstream gitlab {
  server                    127.0.0.1:10080;
}
server {
  listen                    443 ssl;
  server_name               gitlab.rails365.net;
  ssl_certificate           /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key.pem;
  ssl_certificate_key       /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key;
  # ssl_dhparam
  ssl_dhparam               /srv/docker/gitlab/gitlab/ssl/dhparam.pem;
  server_tokens             off;
  root                      /dev/null;

  # 配合acme.sh使用ssl, 验证网站
  location /.well-known/ {
    root /srv/docker/gitlab/gitlab;
  }

  location / {
    proxy_read_timeout      300;
    proxy_connect_timeout   300;
    proxy_redirect          off;
    proxy_set_header        X-Forwarded-Proto $scheme;
    proxy_set_header        Host              $http_host;
    proxy_set_header        X-Real-IP         $remote_addr;
    proxy_set_header        X-Forwarded-For   $proxy_add_x_forwarded_for;
    proxy_set_header        X-Frame-Options   SAMEORIGIN;
    proxy_pass              http://gitlab;
  }
}

server {
    listen 80;
    server_name gitlab.rails365.net;
    return 301 https://gitlab.rails365.net$request_uri;
}

3. 改造 gitlab

经过前面的处理,也是能正常访问的,不过好像有些问题,因为 gitlab 网站里面还是在使用 http 协议作为代码的访问协议,而不是 https。

这里要把 gitlab 改造一下。

打开docker-compose.yml文件,主要更改以下几个地方:

- GITLAB_HTTPS=true
- GITLAB_PORT=443

gitlab:
    restart: always
    image: sameersbn/gitlab:8.15.2
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    - "10443:443"

    ...

    - GITLAB_HTTPS=true
    - SSL_SELF_SIGNED=false

    - GITLAB_HOST=gitlab.rails365.net
    - GITLAB_PORT=443
    - GITLAB_SSH_PORT=10022

开启了 gitlab 的 https 服务,把 https 的服务的端口改为了 443,并且暴露了10443端口。

然后 nginx 里也改变一下:

upstream gitlab {
  server                    127.0.0.1:10443;
}

location / {
    ...
    proxy_pass              https://gitlab;
  }

端口变了,变成了10443,还有http://gitlab变成了https://gitlab

4. 复制证书

你要把证书复制到 gitlab 下。

mkdir -p /srv/docker/gitlab/gitlab/certs
cp /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key.pem /srv/docker/gitlab/gitlab/certs/gitlab.crt
cp /srv/docker/gitlab/gitlab/ssl/gitlab.rails365.net.key /srv/docker/gitlab/gitlab/certs/gitlab.key
cp /srv/docker/gitlab/gitlab/ssl/dhparam.pem /srv/docker/gitlab/gitlab/certs/dhparam.pem
chmod 400 /srv/docker/gitlab/gitlab/certs/gitlab.key

现在可以正常以 https 访问 gitlab 了。

完结。

本站文章均为原创内容,如需转载请注明出处,谢谢。

1 条回复
  • 随风 · 练气
    随风 · 练气 #1

    其实把证书 安装到 /srv/docker/gitlab/gitlab/certs/ 会更直接些

    acme.sh --installcert -d gitlab.rails365.net \
                   --keypath       /srv/docker/gitlab/gitlab/certs/gitlab.key  \
                   --fullchainpath /srv/docker/gitlab/gitlab/certs/gitlab.crt \
                   --reloadcmd     "sudo nginx -s reload"
    openssl dhparam -out /srv/docker/gitlab/gitlab/certs/dhparam.pem 2048
    
相关小书
nginx教程

nginx教程

最全面,最深入的nginx入门到精通的教程

发表于

喜欢
统计信息
    学员: 29915
    视频数量: 1996
    文章数量: 526

© 汕尾市求知科技有限公司 | Rails365 Gitlab | 知乎 | b 站 | csdn

粤公网安备 44152102000088号粤公网安备 44152102000088号 | 粤ICP备19038915号

Top