こんにちは、みーまです。
前回の記事では、エックスサーバーのWordPressデータを取り込みしました。
しかしこのままではHTTPでしか接続できません、HTTPSに必要なSSL証明書を取得できるサービスがありますので、それ利用してHTTPS化していきましょう。
- 紹介する手順はnginxで動作させる手順ですので、WordPressインストール済みイメージを使う多くのドキュメントとは違う点だけご注意ください。
- SSL証明書を取得するには、DNSが設定済みで、使いたいドメイン名=Amazon LightsailのIPアドレス となっている必要があります。nslookupまたはdigで確認し、間違いないことを確認しましょう。
Amazonが提供するAWSの中でも特殊な、金額に応じたスペックが選べる、簡易版のクラウドインフラサービスです。
通常、使用量に応じて金額が変動するAWSのサービスと異なり、Amazon Lightsailは金額ベースのプランが選択可能で、最小で3.5USD/月から利用することができます。
配置サブネットが選択できないなどの制約はありますが、セキュリティグループや固定グローバルIP、DNSやロードバランサー、CDNも利用可能で、通常のAWSサービスに戻りたい場合は、スナップショット(バックアップイメージ)からEC2への復元が可能です。
Amazon Lightsail SSHクライアントでの作業(引き続き)
SSHで作業していきます。
今回はファイルの転送がありませんので、これまでの操作方法に加えて、Amazon Lightsailコンソールでの接続操作でもOKです。
1. 環境変数を設定
下記のコードを編集して実行しましょう。環境変数なので特に何も応答はありません。
# certbot get domain
# 取得したいSSL証明書のドメイン(注意:ワイルドカードは不可)
CERTDOMAIN=hogehoge.com
# certbot regist email
# 取得時に申請するメールアドレス。期限切れ連絡などが届く
CERTEMAIL=hoge@hogehoge.com
2. certbot-autoの入手〜実行(インストールモード)
無料SSL取得サービス「Let's Encrypt」のサポートクライアント、certbot-autoで証明書を取得する準備をします。下記コマンドでcertbot-autoの入手から必要プログラムのダウンロードまで自動で行ってくれます。
世界のWebサイトをHTTPS化するという目的の下に活動している組織です。無料で利用可能な為、大手ブログサイトなども採用しています。エックスサーバーの無料SSLもここで取得しています。
まだここではSSL証明書を取得しませんので慌てないようにしましょう。
# Download certbot-auto
sudo curl -L https://dl.eff.org/certbot-auto -o /opt/certbot-auto
sudo chmod a+x /opt/certbot-auto
# Run certbot-auto(install only)
cd /opt/
./certbot-auto --install-only --debug
必要プログラムをインストールしてよいか確認が出ますので、yを入力してください。
下記のメッセージが出たらOKです。
Certbot is installed.
3. certbot-autoでSSL証明書を取得
いよいよSSL証明書を取得します。
sudo /opt/bitnami/ctlscript.sh stop nginx
/opt/certbot-auto --debug certonly --standalone -d $CERTDOMAIN -m $CERTEMAIL --agree-tos -n
下記表示が出れば正しくSSL証明書が取得されています。
Congratulations! Your certificate and chain have been saved at:
うまくいかない場合は最初に記載したnslookupやdigの確認をしましょう。ちなみに当然ながら、存在してなかったり保有していないドメインの証明書は取得できません。
4. WordPressをSSL化する
ここまでで証明書を取得できましたが、まだWordPressで使うように設定されていないので、変更を加えます。
1 | コードを実行して、取得したSSL証明書をnginxで読み込ませます。 |
# Rename default cert file
sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
sudo mv /opt/bitnami/nginx/conf/server.csr /opt/bitnami/nginx/conf/server.csr.old
# Create symbolic link
sudo ln -sf /etc/letsencrypt/live/$CERTDOMAIN/fullchain.pem /opt/bitnami/nginx/conf/server.crt
sudo ln -sf /etc/letsencrypt/live/$CERTDOMAIN/privkey.pem /opt/bitnami/nginx/conf/server.key
sudo chown root:root /opt/bitnami/nginx/conf/server*
sudo chmod 600 /opt/bitnami/nginx/conf/server*
2 | Bitnamiデフォルトのwp-configそのままだとHTTPS化の動作に影響するので、修正します。 |
- wp-config.phpを開きます。
sudo /opt/bitnami/apps/wordpress/htdocs/wp-config.php
- WP_SITEURL および WP_HOMEが定義されているところをコメント化します。
/* That's all, stop editing! Happy publishing. */
の数行下なので、/*と*/で囲んでしまってください。
- 変更を保存するコマンドを入力
:wq
3 | nginx(Webサーバーサービス)を開始 |
コマンドで実施します。
sudo /opt/bitnami/ctlscript.sh start nginx
4 | WordPressサイトでHTTPSでアクセス可能か確認 |
ブラウザを使って、https://申請したドメイン名/で問題無く確認できればOKです。できない場合は、SSL証明書が正しく取得できていたかを確認しましょう。
私の場合は最初に説明した通り、ドメイン名に対する応答IPがAmazon Lightsailになっていなかった為のエラーがありました。
5. 後作業
ここまででHTTPS化自体は完了ですが、Let's Encryptで取得した証明書は3ヶ月と期間が短く、更新手続きはこちら側から行う必要があるため、処理を自動化してしまいます。
1 | 自動処理の為に、cronを利用します。 |
- 下記コマンドを実行します。
sudo vim /etc/cron.d/certbot
- 開いた画面に、下記を中身を貼り付けます。
00 00 * * * root /opt/certbot-auto --debug renew --pre-hook '/opt/bitnami/ctlscript.sh stop nginx' --post-hook '/opt/bitnami/ctlscript.sh start nginx'
- 保存して終了のコマンドを入れます。
:wq
これで毎日0:00に更新コマンドが実施されるようになりました。
更新がある時のみ、短時間ですがWordPressにアクセスできなくなりますので、アクセスの少ない時間を選びましょう。
これでエックスサーバーからデータを引っ越しして、Amazon Lightsail上でHTTPSのWordPressサイトが正しく動作していると思います。
ここまでお疲れさまでした。