課題
リリースが近づいてきていよいよ人様に公開するためにhttps化が必要になりました。
必要だけどhttps ssl周りにあまり詳しくないので簡単な方法を探していました。
ピッタリの方法があったのでご紹介します。
https-portalとは
前提知識
dockerちょっとわかる
docker-composeちょっとわかる
let's encryptがなにかわかる
ネットワーク周りちょっとわかる
nginxちょっとわかる
本文
https-portal は let'encrypt の証明書を自動発行・更新機能のついたnginxプロキシサーバのdocker imageです。
これを使うと既存のサービスにあまり手を入れずにhttps化することができます。
github.com
導入方法
今回はコンテナ化されていないウェブアプリをhttps化した手順についてざっくり解説します。
必要なもの・こと
まずdockerとdocker-composeをインストールします。
今回使った環境はubuntuだったのでこんな感じです。
sudo apt install docker.io docker-compose
docker-compose.yamlの用意
version: '3'
services:
https-portal:
image: steveltn/https-portal:1
container_name: hoge-https-portal
ports:
- '80:80'
- '443:443'
networks:
- hoge
restart: always
environment:
STAGE: 'production'
DOMAINS: >-
hoge.com -> http://dockerhost:9999/,
volumes:
- hoge-ssl-certs:/var/lib/https-portal
- hoge-vhosts:/var/www/vhosts
networks:
hoge:
volumes:
hoge-ssl-certs:
こんな感じのものを用意しました。詳しくはhttps-portalのgithubを見ると良いと思います。
重要な部分は environment: STAGE:のところと DOMAINS: >-のところです
STAGE: 'local'にすると自己証明書で起動します。
STAGE: 'staging' にすると let'encryptのテスト用証明書が発行されます。
STAGE: 'production' にすると let'encryptの本番証明書が発行されます。
DOMAINS: の左辺で指定したドメインからのアクセスを右辺で指定したホスト上の指定のポートに転送します。
今回の場合は hoge.comへのアクセスをdockerhostの9999ポートに転送します。
サーバ設定変更
nginxを80ポートで起動していました。
このままだとhttps-portalが起動できないので設定を変更しましょう。
server {
listen 80;
この辺をこんな感じに https-portalのdocker-compose.yamlで指定したポートに変更しておきます。
server {
listen 9999;
できたらnginxをリロード
sudo nginx -t
sudo nginx -s reload
サーバのポートを開けておく
httpsリクエストを受け取れるように443ポートを開けておきます。
環境によるので割愛
https-portal起動
作成したdocker-compose.yamlをサーバに配置します。
配置したディレクトリで
sudo docker-compose up -d
これでエラーが出なければhttps-portalが起動しているはずです。
起動しているかの確認は
sudo docker ps
あとはドメイン指定が必要な設定ファイル等を調整して完了です。