Movable Type Advent Calendar 2019 12日目です。
Dockerを使った簡単SSL化のお話です。MT以外でも使えます。
Movable Type for AWS
Movable TypeにはAWS版が用意されています。EC2でインスタンスを立ち上げるときにプレインストールイメージが選択できます。
手順はMovable Type for AWS(AMI)スタートガイド| CMS プラットフォーム Movable Type を Amazon EC2 のクラウドでなどをご参考ください。
nano、microインスタンスでは、Movable Typeが無料です(EC2の料金しかかからない)。太っ腹!
しかもCGI版ではなく、Plack版で高速。格安レンタルサーバーを借りてMTをインストールするという選択肢は過去のものとなりました。
SSL非対応
Movable Type for AWSは、デフォルトではSSL非対応です。昨今はAOSSLが主流となり、そもそも管理画面の認証もあるのでそのままでは実用化できません。
何らかの方法でSSL化が必要です。
- nginxまたはApacheをSSL対応する → 証明書を購入するかLet's Encryptを使う
- ELB/ALBを使う → ACMで無料のSSL証明書も使える
- CloudFrontを使う → ACMで無料のSSL証明書も使える
ぱっと思いつくのはこのあたりですが、今回はDockerを使って簡単に無料SSL(Let's Encrypt)化する方法を紹介します。
steveltn/https-portal
「Dockerとかよく知らないし、Let's Encryptも面倒なんだよなー」と思った方もご安心ください。私もそうです。
Let's EncryptによるSSL化をアホみたいに簡単にしてくれるDockerイメージがあります。
手順
EC2インスタンスの起動・DNS設定・ポート開放
まずはMovable Type 7のEC2インスタンスを起動し、ドメイン名でアクセスできるようにDNSを設定してください。
この例では、ssl-mt.ideamans.com
としました(←説明用のドメイン名なので実際には開けません)。
セキュリティグループでは、ポート22(SSH)
・80(http)
・443(https)
のインバウンドアクセスを許可してください。
http://ssl-mt.ideamans.com
を開くとMTのセットアップページが表示されるはずです。
まずはdockerをインストール
EC2インスタンスにSSHでログインして次のコマンドを実行します。
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
nginxの待ち受けポートを8080に変更
EC2インスタンスの起動直後は、
インターネット → nginx(:80) → MT(:5000)
という経路でMTを利用しますが、次のように変更していきます。
インターネット → Docker(:80/443) → nginx(:8080) → MT(:5000)
そのため、nginxの待ち受けポートを8080
に変更します(Apacheの場合は読み替えてください)。
sudo vi /etc/nginx/nginx.conf
41行目付近にあるポート番号を変更します。
server {
listen 8080; # 80から変更
include /etc/nginx/nginx_common.conf;
}
nginxを再起動します。
sudo systemctl restart nginx
steveltn/https-portalを起動
次のdockerコマンドでsteveltn/https-portal
を起動します。DOMAINS=ssl-mt.ideamans.com->
の部分はお使いのドメインに置き換えてください。
sudo docker run \
-e "DOMAINS=ssl-mt.ideamans.com->http://dockerhost:8080" \
-e "STAGE=production" \
-d --restart always \
-p 80:80 -p 443:443 \
steveltn/https-portal
そのまま2〜3分待ちましょう。DHの生成などで少し時間がかかりますが、設定は以上です。
認証用のディレクトリの準備とか自動更新とか面倒な部分は全部このDockerイメージsteveltn/https-portal
がうまいことやってくれます。**え? Let's Encryptってもっと面倒じゃなかった?**って感じですね。
SSLで開く!
ブラウザでhttps://ssl-mt.ideamans.com/
にアクセスすると安全な状態でMTを開けます。これでインストールも安全にできる!
と、こんな風にSSL化が簡単にできました。
さらにdocker run
コマンドに-v ./https-portal:/var/lib/https-portal
みたいな感じでボリュームマウントを追加すると、証明書などを永続化できるので再起動も早くなります。
Web制作ではあまり出番がなく、縁の遠いDockerですが、こんなカジュアルな使い方もありますよーというお話でした。