Help us understand the problem. What is going on with this article?

DockerでMovable Type for AWSを驚くほど簡単に無料SSL化する

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イメージがあります。

https://hub.docker.com/r/steveltn/https-portal/

手順

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ですが、こんなカジュアルな使い方もありますよーというお話でした。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away