WordPressをEC2で使うにはおなじみの高速実行環境Amimoto。
よく使う構成はプロビジョニング時に自動設定できるようになっているので、色々と見てみると便利。
(逆にこれを忘れていると自分で用意した構成を失ってしまったりちゃんと起動しなかったりする可能性も……無いとは言えないかもしれない。多分無い)
そんな構成群については Launch-with-1-Click/lw1-amimoto を参照。
今回はまっさらな WordPress Powered by AMIMOTO (HVM PHP7 Ready) にLet's encrypt の公式クライアント (certbot) のインストールとNginxのHTTP2有効化を一発でやる。
(といっても設定される証明書は用意されている自己署名証明書なのであしからず)
とりあえずインスタンスを立て、初回プロビジョニングが終わるまで待つ。初回はyum install
とかあるので数分かかる模様。パブリックDNSにブラウザからアクセスできるようになったら準備OK。
設定した秘密鍵を使ってSSHでインスタンスに接続し、Amimotoの設定ファイルを上書き。
$ cat /opt/local/amimoto.json|jq '. + {"nginx":{"http2_enable":true},"letsencrypt":{"install":true}}| .run_list |=.+ ["recipe[amimoto::nginx_default]"]' > ~/amimoto.json
$ cp ~/amimoto.json /opt/local/amimoto.json
sudoでプロビジョニングを実行。
$ sudo /opt/local/provision
これでLet's encryptが使えるようになる……!はずだったんだけど無限にcertbotのビルドに時間がかかった。めっちゃCPUクレジット食われる……
失敗したかと思ってやり直しそうになったものの、気長に待てばなんとか終了。
あ、それとNginxのconfファイルを作成する有効にしたので念のため戻しておく。
$ jq '. .run_list|= .-["recipe[amimoto::nginx_default]"]' /opt/local/amimoto.json > ~/amimoto.json
$ cp ~/amimoto.json /opt/local/amimoto.json
(jqは便利だ……)
試しに https でインスタンスにアクセスできることを確認する。
ところでAmazon Linuxは OpenSSL 1.0.1系のためALPNが使えずNPNのみなので残念ながら Chrome でHTTP/2が使えない。いい加減どうにかしてくれ〜
certbot
コマンドへのシンボリックリンクは現状張られていないのでletsencrypt
コマンドを使う。
独自ドメインを使う場合は事前にDNSをインスタンスに向けておくこと。(というかEC2のパブリックDNSではLet's encryptは使えなさそう。ビルド待ちの間にしておけると良さそう。)
$ sudo su -
# letsencrypt auth --webroot -d {your-domain} -w /var/www/vhosts/{instance-id}/
初回は登録するメールアドレスとか聞かれる。
Congratulations! のメッセージが表示されていれば成功。
/etc/nginx/conf.d/default-ssl.conf
のssl_certificate
,ssl_certificate_key
を発行した証明書のパスに書き換え。
...
ssl_certificate /etc/letsencrypt/live/{your-domain}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/{your-domain}/privkey.pem;
...
反映させる。
# service nginx reload
設定したドメインでhttpsでアクセスして証明書エラーが出ていないことが確認できれば成功。
以後は通常のAmimoto同様に使えば良い。
めっちゃ時間かかるしCPU食うし簡単というのは看板に偽りしかなかった気もする
普通にやったほうが絶対はやい……
$ cd /tmp
$ sudo yum install python27-pip python27-virtualenv augeas-libs dialog gcc libffi-devel openssl-devel system-rpm-config
$ sudo mkdir /opt/letsencrypt
$ sudo virtualenv /opt/letsencrypt/
$ sudo /opt/letsencrypt/bin/pip install certbot
$ sudo ln -s /opt/letsencrypt/bin/certbot /usr/local/bin/certbot