MENU
オンライン講座開催中

AWS LightsailでWordPressにドメインを設定してSSL化する手順【お名前.com対応】

AWS LightsailでWordPressにドメインを設定してSSL化する手順【お名前.com対応】
目次

ドメインをLightsailに紐付ける

お名前.comでドメインを取得済みの場合、DNS設定とネームサーバーの変更が必要です。

お名前.comでAレコードを追加

お名前.com管理画面 →「DNS設定」→「DNSレコード設定」でAレコードを追加します。

  • ホスト名:空欄(@)
  • TYPE:A
  • VALUE:Lightsailの静的IPアドレス

ネームサーバーを変更する

お名前.comの「ネームサーバー設定」で以下に変更します。これをしないとDNSが反映されません。

01.dnsv.jp
02.dnsv.jp
03.dnsv.jp
04.dnsv.jp

DNS反映を確認する

反映には数分〜数時間かかります。以下のサイトで世界各地の反映状況を確認できます。

https://www.whatsmydns.net

緑のチェックが増えてきたらブラウザで http://ドメイン名 にアクセスしてみましょう。WordPressのトップが表示されれば成功です。

WordPressのURLをドメインに更新する

DNSが反映されたら、WordPressに設定されているURLをドメインに変更します。LightsailのSSHで以下を実行してください。

sudo wp --path=/var/www/html option update siteurl 'http://ドメイン名' --allow-root
sudo wp --path=/var/www/html option update home 'http://ドメイン名' --allow-root

Success: Updated 'siteurl' option. と表示されれば完了です。

SSL化(HTTPS)する

Let’s EncryptとCertbotを使って無料でSSL化できます。

ハマりポイント:bncert-toolが使えない

Lightsailの古い記事では以下のコマンドが紹介されていますが、このインスタンス構成では使えませんでした。

# これは動かなかった
sudo /opt/bitnami/bncert-tool

代わりにcertbotを使います。

certbotをインストール

sudo apt update && sudo apt install -y certbot python3-certbot-apache

Apacheの設定ファイルにServerNameを追加

certbotがドメインを認識できるよう、Apacheの設定ファイルを編集します。

sudo bash -c 'cat > /etc/apache2/sites-available/000-default.conf << '"'"'EOF'"'"'

        ServerName ドメイン名
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

EOF'

設定を確認してApacheを再起動します。

sudo apache2ctl configtest && sudo systemctl restart apache2

Syntax OK と表示されれば問題ありません。

SSL証明書を取得・インストール

sudo certbot --apache -d ドメイン名

メールアドレスの入力と利用規約への同意を求められます。完了すると証明書が自動でインストールされます。

もし証明書のインストールに失敗した場合は以下で再試行できます。

sudo certbot install --cert-name ドメイン名

ブラウザで https://ドメイン名 にアクセスして鍵マークが表示されれば完了です。証明書は90日ごとに自動更新されます。

メモリ不足でサイトが落ちる問題を解決する

作業後少ししたらアクセスできなくなっていました….

Lightsailの$5プランはRAMが512MBしかありません。SWELLなど重めのテーマをインストールすると、メモリ不足でApacheが落ちてサイトにアクセスできなくなることがあります。

スワップメモリを追加することで仮想的にメモリを増やし、安定させることができます。

スワップメモリを追加する

SSHで以下を順番に実行してください。

sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

最後のfstabへの追記で、再起動後もスワップが有効になります。

確認する

free -h

以下のようにSwapの行に1.0Giと表示されれば成功です。

               total        used        free      shared  buff/cache   available
Mem:           447Mi       280Mi       8.9Mi        42Mi       212Mi       167Mi
Swap:          1.0Gi          0B       1.0Gi

これで重めのテーマを使っていても安定して動作するようになります。

【補足】画像やリンクがIPアドレスで表示される場合

httpsに変更したはずなのに画像がたまに表示されないことがある…という人向けの補足です。
WordPressの内部設定がまだhttpのままになっていることが原因です。

SSL設定が完了してもサイトを開くと画像が表示されなかったり、ソースを見るとURLがIPアドレスになっていることがあります。

これはLightsailのWordPressに最初から入っている wp-config.php の設定が原因です。

php

define( 'WP_HOME', 'http://' . $_SERVER['HTTP_HOST'] . '/' );
define( 'WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST'] . '/' );

アクセス時のホスト名をそのまま使う設定になっているため、httpやIPアドレスでアクセスされると混在が起きてしまいます。

修正手順

LightsailのブラウザSSHで接続して以下を実行します(あなたのドメイン は自分のドメインに置き換えてください)。

bash

sudo python3 -c "
content = open('/var/www/wp-config.php').read()
content = content.replace(\"define( 'WP_HOME', 'http://' . \$_SERVER['HTTP_HOST'] . '/' );\", \"define( 'WP_HOME', 'https://あなたのドメイン' );\")
content = content.replace(\"define( 'WP_SITEURL', 'http://' . \$_SERVER['HTTP_HOST'] . '/' );\", \"define( 'WP_SITEURL', 'https://あなたのドメイン' );\")
open('/var/www/wp-config.php', 'w').write(content)
print('done')
"

done と表示されれば成功です。念のため確認しましょう。

bash

grep -n "WP_HOME\|WP_SITEURL" /var/www/wp-config.php

以下のように https://あなたのドメイン になっていればOKです。

define( 'WP_HOME', 'https://あなたのドメイン' );
define( 'WP_SITEURL', 'https://あなたのドメイン' );

これで画像やリンクが正しく https://あなたのドメイン で出力されるようになります。

  • URLをコピーしました!
目次