SSLのカスタム証明書

docker-compose経由でRetoolをデプロイするときに、すぐにSSLを取得できるhttps-portalサービスがdocker-compose.yamlファイルに含まれています。この設定により、LetsEncryptを使用して、自動的に証明書をプロビジョニングします。VPC上にRetoolをデプロイする場合、LetsEncryptは証明書のプロビジョニングに必要なチャレンジを実行できません。この場合、手動で証明書を追加する必要があります。

https-portalの変更

docker-compose.yamlファイルに移動して、https-portalサービスを次に置き換えます。

https-portal:
  image: nginx:latest
  ports:
    - '80:80'
    - '443:443'
  command: [nginx-debug, '-g', 'daemon off;'] # エラーログの取得はコンテナで行うとよい
  volumes:
    - ./nginx:/etc/nginx/conf.d
    - ./certs:/etc/nginx/certs
  links:
    - api
  depends_on:
    - api
  networks:
    - frontend-network

証明書のマウント

前のステップで、nginxが証明書を検索する2つのDockerボリュームを作成しました。では、これらのボリュームが指すディレクトリーを作成しましょう。

retool-onpremiseディレクトリー内で、次の操作を行います。

  1. certsディレクトリーを作成します(すでに作成されている場合があります)。
  2. .crtファイルおよび.keyファイルをcertsディレクトリーに移動します。

nginxの構成

nginxの構成には.confファイルが必要です。

  1. nginxディレクトリーを作成します(すでに作成されている場合があります)。
  2. nginxディレクトリー内で、FILENAME.confという名前のファイルを作成します(末尾が.confの名前にすることができます)。
  3. FILENAME.confに次を追加します。
server {
    listen 80;
    server_name retool.yourcompany.dev; # <- 自分のサブドメインに変更

    location / {
        return 301 https://$host$request_uri;
    }    
}
server {
    listen 443 ssl;
    server_name retool.yourcompany.dev; # <- これを上記のserver_nameと一致するように変更
    ssl_certificate     /etc/nginx/certs/hatch.crt; # <- これを自分の.crtファイル名に変更
    ssl_certificate_key /etc/nginx/certs/hatch.key; # <- これを自分の.keyファイル名に変更

    location / {
        proxy_pass http://api:3000;
    }
}

コンテナーの再起動

sudo docker-compose up -dを実行します。

トラブルシューティング

実行すると、コンテナーのログを表示できます。

docker-compose exec https-portal bash
cd /var/log/nginx
cat error.log