以下記事の続きです。
AWS環境にRedmineを構築し、ドメイン取得・DNS設定までを行なっています。
[AWS]ほぼ全自動Redmine構築
[AWS]Route53 ドメイン取得
本記事では、HTTP通信からHTTPS通信に切り替える方法を紹介します。
なお、本記事で使用するドメインは例としてwww.example.com
とさせて頂きます。
対応方法
今回はletsencrypt
を使用します。
letsencryptは無料でSSL証明書を発行することができ、誰でもSSL/TLS通信を実現することができるサービスとなっています。
SSL証明書は申請や作成・設定に時間を要しますが、以下リポジトリはDockerコンテナ一つ立てることで証明書の取得・設定を全て自動で行なってくれます。
こんな便利なものを無料で展開してくれるなんて、とてもありがたいことです。。
READMEに書いてある通り、docker-compose.ymlを編集します。
version: '3'
services:
redmine:
image: redmine:4.0.5
restart: always
container_name: redmine_container
environment:
- REDMINE_DB_POSTGRES=db
- REDMINE_DB_USERNAME=postgres
- REDMINE_DB_PASSWORD=postgres
- VIRTUAL_HOST=www.example.com <- ご自身のドメイン
expose:
- 3000
volumes:
- ./redmine/files:/usr/src/redmine/files
links:
- db
db:
image: postgres:10.3
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
volumes:
- ./postgres/data:/var/lib/postgresql/data
https-portal:
image: steveltn/https-portal:latest
ports:
- '80:80'
- '443:443'
links:
- redmine
restart: always
environment:
DOMAINS: 'www.example.com -> http://redmine_container:3000' <-ご自身のドメイン
#STAGE: 'production'
#FORCE_RENEW: 'true'
たったこれだけでSSL通信を実現することができます。
letsencryptは申請に制限があるため、最初は以下をコメントアウトしコンテナを立ち上げてください。
コメントアウトすることで、SSL証明書の代わりに自己証明でテストを行い証明書作成に問題がないか判定してくれます。
#STAGE: 'production'
#FORCE_RENEW: 'true'
コンテナを立ち上げましょう。
$ docker-compose up -d
ログの確認方法は以下の通りです。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a328ea2b95a3 steveltn/https-portal:latest "/init" 4 hours ago Up 4 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp redminedocker_https-portal_1
f24edf5e687f redmine:4.0.5 "/docker-entrypoint.…" 4 hours ago Up 4 hours 3000/tcp redmine_container
8f51137977c3 postgres:10.3 4 hours ago Up 4 hours 5432/tcp redminedocker_db_1
$ docker logs a328ea2b95a3
ログを確認し無事成功していると、以下のような出力となるはずです。
Found domains: www.example.com
Getting directory...
Directory found!
Registering account...
Registered!
Creating new order...
Order created!
Verifying www.example.com...
www.example.com verified!
Signing certificate...
成功していたら、コメントアウトを戻しコンテナを再度立ち上げましょう。
また、以前作成したAWSでのセキュリティグループがHTTPSを許可していないと思います。
コンソールからインバウンドでHTTPSを通すよう設定してください。
ブラウザからご自身のドメインをhttps
で叩いてみてください。
以上で、HTTPS対応は完了です。
終わりに
letsencryptは大変素晴らしいサービスですが、信頼性がやや劣るため商用利用するサービスでは普通にSSL証明書を購入しましょう。