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

Lightsailで常時SSLのWordPress

今後構築の機会が増えそうなのと、複数の記事を参照してようやくできたので、一つの記事にまとめる意味で書き始めました!

参考URL

この記事でやらないこと

  • 複数インスタンス
  • ロードバランシング
  • CloudFront

手順

Lightsailの構築

気をつけるようなところはありません。唯一、キーペアの取り扱いはご注意ください。

AWS Consoleにログインした後、Lightsailは別画面で開くことになります。(リージョンの混乱を避けるため?)

オレンジ色の「インスタンスの作成」ボタンをクリックします。
screenshot-lightsail.aws.amazon.com-2019.05.14-15-51-30.png

開いた画面ではデフォルトとなっていますが、リージョンとアベイラビリティゾーンを変更することができます。(特に変更が必要なければそのままで)
screenshot-lightsail.aws.amazon.com-2019.05.14-15-36-20.png

次にプラットフォーム(OS)と設計図(アプリ)を選択します。(LinuxとWordpressを洗濯します。)
screenshot-lightsail.aws.amazon.com-2019.05.14-15-37-03.png

ここも必要なければ触らなくて良いのですが、起動スクリプトを用意していればここで設定できます。また、SSHキーも変更できます。
screenshot-lightsail.aws.amazon.com-2019.05.14-15-38-05.png

次にインスタンスプランを選択します。一番安いプランを選択すると初月無料となります。
screenshot-lightsail.aws.amazon.com-2019.05.14-15-39-14.png

最後にインスタンスの識別のための名前を設定します。AWSアカウント内で一意の名前である必要があります。タグ付けオプションはリソースへのアクセスを区別したい場合に付与します。
screenshot-lightsail.aws.amazon.com-2019.05.14-15-39-34.png

最下段の「インスタンスの作成」ボタンをクリックすると、Lightsailが起動します。

screenshot-lightsail.aws.amazon.com-2019.05.14-16-15-51.png

Elastic IP アタッチ

LightsailのデフォルトではパブリックIPアドレスが一時的に割り当てられたままとなり、インスタンスを再起動するとIPアドレスが変更されます。
EC2ではそれを防ぐため、ElasticIPを付与するのですが、Lightsailでも同様に付与することができます。
ElasticIPの上限数はデフォルトでAWSアカウントで5個までなのですが、Lightsailで付与する分はこのカウントに含まれないようです。
EC2ではVPCを使う関係で制限されているのでしょうか、EC2インスタンスを停止しておくとElasticIP分の課金が発生しますが、Lightsailでは1つだけ無料で付与でき、停止しても課金されません。

LightsailへのSSH接続

ブラウザでSSH接続するには、「SSHを使用して接続」ボタンをクリックします。独自のSSHクライアントで接続するには、あらかじめ設定したSSHキーを使い、画面のIPアドレスとユーザ名を使用して接続します。
screenshot-lightsail.aws.amazon.com-2019.05.14-16-21-12.png

Wordpressの確認

SSH接続で使用したぷブリックIPアドレスをブラウザのアドレスバーに入力するとデフォルトのWordpressが開くことを確認できます。

screenshot-avatarworld.orylab.com-2019.05.14-16-26-42.png

bitnami banner 削除

bitnamiイメージから作成されたWordpressにはデフォルトでbitnamiバナーが表示されます。
これを下記のコマンドで表示されないようにします。

$ sudo /opt/bitnami/apps/wordpress/bnconfig --disable_banner 1
$ sudo /opt/bitnami/ctlscript.sh restart apache

独自ドメイン

AWSで管理しているドメインの場合はRoute53を、それ以外の場合はそれぞれのDNS設定でAレコードをLightsailのパブリックIPアドレスに向けます。

LetsencryptによるSSL化

AWS上のロードバランサーやCloudFrontを使用する場合はAWSのCertificationManager(ACM)で証明書を発行しますが、それ以外の場合は、Letsencryptを使用します。

$ cd /tmp
$ git clone https://github.com/letsencrypt/letsencrypt
$ cd letsencrypt
$ ./letsencrypt-auto
$ ./letsencrypt-auto certonly --webroot -w /opt/bitnami/apps/wordpress/htdocs/ -d example.com_
$ sudo cp /etc/letsencrypt/live/example.com/fullchain.pem /opt/bitnami/apache2/conf/server.crt
$ sudo cp /etc/letsencrypt/live/example.com/privkey.pem /opt/bitnami/apache2/conf/server.key
$ sudo /opt/bitnami/ctlscript.sh restart apache

httpsにリダイレクトする

ApacheとWordpressのconfigにそれぞれリダイレクトのための設定を書き込む。

vi /opt/bitnami/apps/wordpress/conf/httpd-prefix.conf

- RewriteCond "%{HTTP_HOST}" ^ec2-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})-([0-9]{1,3})\..*\.amazonaws.com(:[0-9]*)?$
- RewriteRule "^/?(.*)" "%{REQUEST_SCHEME}://%1.%2.%3.%4%5/$1" [L,R=302,NE]
+ RewriteCond %{HTTPS} !=on
+ RewriteRule ^/(.*) https://example.com/$1 [R,L]
vi /opt/bitnami/apps/wordpress/htdocs/wp-config.php

define('WP_SITEURL', 'https://example.com/');
define('WP_HOME', 'https://example.com/');

証明書更新のシェルを準備してCron実行を仕掛ける

letsencryptを使った証明書更新のためのシェルを書いて、Cron実行の設定を追加する。

sudo vi /etc/letsencrypt/renew-certificate.sh

#!/bin/bash
sudo /opt/bitnami/ctlscript.sh stop apache
sudo /usr/local/certbot/certbot-auto --email="user@example.com" --domains="www.example.com" renew
sudo cp /etc/letsencrypt/live/www.example.com/fullchain.pem /opt/bitnami/apache2/conf/server.crt
sudo cp /etc/letsencrypt/live/www.example.com/privkey.pem /opt/bitnami/apache2/conf/server.key
sudo /opt/bitnami/ctlscript.sh start apache
# crontab -e (root実行、取扱注意)

0 0 1 * * /etc/letsencrypt/renew-certificate.sh 2> /dev/null

以上です。

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
No 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
ユーザーは見つかりませんでした