ラック
Home > ブログ > 記事 > 2018年8月 > GitlabをSSL対応する

GitlabをSSL対応する

カテゴリ: サーバ,開発環境

テスト用に建てたGitlabサーバで、SSL対応のテストを実施しましたのでその手順をメモしておきます。

0. バージョン確認

作業前にバージョン確認。

# gitlab-rake gitlab:env:info

## 略

GitLab information
Version:        10.0.2-ee

## 略

ちょっと古いですが、まあテスト用なので……。

1. Let's Encrypt用に事前の設定編集

まずはLet's Encrypt用に設定を1箇所変更します。

# vi /etc/gitlab/gitlab.rb

# nginx['custom_gitlab_server_config'] = "location ^~ /foo-namespace/bar-project/raw/ {\n deny all;\n}\n"

## ↓

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

上記の設定を終えたら、gitlab-ctlコマンドで再設定と再起動を行います。

# gitlab-ctl reconfigure
Starting Chef Client, version 12.12.15
resolving cookbooks for run list: ["gitlab-ee"]
Synchronizing Cookbooks:

## 略

Running handlers:
Running handlers complete
Chef Client finished, 10/498 resources updated in 15 seconds
gitlab Reconfigured!

# gitlab-ctl restart
ok: run: gitaly: (pid 28792) 0s
ok: run: gitlab-monitor: (pid 28802) 1s
ok: run: gitlab-workhorse: (pid 28815) 0s
ok: run: logrotate: (pid 28825) 1s
ok: run: nginx: (pid 28836) 0s
ok: run: node-exporter: (pid 28880) 0s
ok: run: postgres-exporter: (pid 28886) 1s
ok: run: postgresql: (pid 28898) 0s
ok: run: prometheus: (pid 28906) 1s
ok: run: redis: (pid 28917) 0s
ok: run: redis-exporter: (pid 28921) 0s
ok: run: sidekiq: (pid 28930) 0s
ok: run: unicorn: (pid 28938) 1s

次に、ディレクトリ作成します。これは次のcertbotによる証明書発行に伴うドメイン認証の際に使用するものです。設定の後にgitlab-ctlコマンドで再設定。

# mkdir -p /var/www/letsencrypt

# gitlab-ctl reconfigure
Starting Chef Client, version 12.12.15
resolving cookbooks for run list: ["gitlab-ee"]
Synchronizing Cookbooks:

## 略

Running handlers:
Running handlers complete
Chef Client finished, 2/492 resources updated in 10 seconds
gitlab Reconfigured!

2. 証明書発行

続いて、certbotで証明書を発行します。

# certbot certonly --webroot --webroot-path=/var/www/letsencrypt -d gitlab.example.com
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for gitlab.example.com
Using the webroot path /var/www/letsencrypt for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/gitlab.example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/gitlab.example.com/privkey.pem
   Your cert will expire on 2018-11-26. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

上手く行ったようです。

# ls -al /etc/letsencrypt/live/
合計 0
drwx------ 7 root root 155  8月 28 15:02 .
drwxr-xr-x 9 root root 190  8月 28 15:02 ..
drwxr-xr-x 2 root root  93  8月 28 15:02 gitlab.example.com

# ls /etc/letsencrypt/live/gitlab.example.com/
README         cert.pem       chain.pem      fullchain.pem  privkey.pem

無事に発行されていますね。

3. 証明書適用の為の設定

続いて、発行された証明書を適用するためにGitlabの設定を編集します。変更箇所としては

  1. external_urlhttp://からhttps://に変更
  2. nginx['redirect_http_to_https']の値をtrueに変更
  3. nginx['ssl_certificate']で証明書のパスを指定
  4. nginx['ssl_certificate_key']で秘密鍵のパスを指定
# vi /etc/gitlab/gitlab.rb

#external_url 'http://gitlab.example.com'
external_url 'https://gitlab.example.com'

# nginx['redirect_http_to_https'] = false
nginx['redirect_http_to_https'] = true

# nginx['ssl_certificate'] = "/etc/gitlab/ssl/#{node['fqdn']}.crt"
nginx['ssl_certificate'] = "/etc/letsencrypt/live/gitlab.example.com/fullchain.pem"
# nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/#{node['fqdn']}.key"
nginx['ssl_certificate_key'] = "/etc/letsencrypt/live/gitlab.example.com/privkey.pem"

以上で、再設定と再起動をします。

# gitlab-ctl reconfigure
Starting Chef Client, version 12.12.15
resolving cookbooks for run list: ["gitlab-ee"]
Synchronizing Cookbooks:

## 略

Running handlers:
Running handlers complete
Chef Client finished, 10/496 resources updated in 38 seconds
gitlab Reconfigured!

# gitlab-ctl restart
ok: run: gitaly: (pid 1473) 0s
ok: run: gitlab-monitor: (pid 1486) 1s
ok: run: gitlab-workhorse: (pid 1495) 0s
ok: run: logrotate: (pid 1505) 1s
ok: run: nginx: (pid 1511) 0s
ok: run: node-exporter: (pid 1520) 0s
ok: run: postgres-exporter: (pid 1561) 1s
ok: run: postgresql: (pid 1571) 0s
ok: run: prometheus: (pid 1579) 1s
ok: run: redis: (pid 1591) 0s
ok: run: redis-exporter: (pid 1595) 1s
ok: run: sidekiq: (pid 1604) 0s
ok: run: unicorn: (pid 1613) 1s

OK、再起動で移行しました。それでは、最後にブラウザでアクセスして確認してみます。

SSLの南京錠マークが付いたGitlabサーバ

成功です。無事にSSL対応できました。

参考

タグ: サーバ環境・構築,手順,Git

 



関連する記事一覧