Xserverで使っている独自ドメインを、より柔軟に構成できるAWSのEC2へ移行した手順を、実録でまとめます。
AWS(Amazon Web Services)とは、Amazon Web Services, Inc. により提供されるクラウドコンピューティングサービスで、Bitnami WordPressは「WordPressが最初から入っているセット」というようなものです。
目的と前提1.
目的:EC2上のWordPressを独自ドメインで常時HTTPS化し、wwwなしに統一して公開します。2.
前提:独自ドメインのネームサーバー管理はXserverのままにし、DNS(Aレコード)のみ変更します。3.
前提:WordPressは「WordPress Certified by Bitnami and Automattic」のAMIで構築します(WebサーバーはApacheです)。
全体像(完成イメージ)1.
EC2に固定のElastic IP(固定グローバルIP)を割り当てます。2.
XserverのDNSでAレコードをElastic IPに向けます(@/www/* を同じIPへ)。3.
WordPressのURLを独自ドメインに固定します(wp-config.php)。4.
無料SSL(Let’s Encrypt)を導入し、HTTP→HTTPS、www→non-wwwへ自動リダイレクトします。5.
権限やPHP設定を整えて、メディアと大容量インポートを正常化します。
EC2を用意して初期設定
1.
EC2を起動します(AMIはBitnami WordPress)。セキュリティグループは、HTTP:80/TCP=0.0.0.0/0、HTTPS:443/TCP=0.0.0.0/0、SSH:22/TCP=自分の固定IPのみにします。2.
Elastic IPを割り当て、EC2に関連付けます。以後このIPが固定の宛先になります。3.
SSHでEC2に接続します(Windows PowerShellの例)。
icacls C:\path\to\key.pem /inheritance:r
icacls C:\path\to\key.pem /grant:r "%USERNAME%:R"
ssh -i C:\path\to\key.pem bitnami@<Elastic-IP>
4.
初期のWordPress管理パスワードを確認します(Bitnamiの既定保存先)。
sudo cat /var/lib/bitnami/metadata/credentials/bitnami_application_password
移行に備えてPHPや権限を整える
1.
アップロード上限などを調整します(大きいエクスポートを扱う想定)。
sudo nano /opt/bitnami/php/etc/php.ini
# 例
upload_max_filesize = 2048M
post_max_size = 2048M
memory_limit = 1024M
max_execution_time = 300
sudo /opt/bitnami/ctlscript.sh restart php-fpm
sudo /opt/bitnami/ctlscript.sh restart apache
2.
メディアやインポートで書き込みに失敗する場合の権限整備(Bitnamiの基本形)。
sudo chown -R bitnami:daemon /opt/bitnami/wordpress/wp-content
sudo find /opt/bitnami/wordpress/wp-content -type d -exec chmod 775 {} \;
sudo find /opt/bitnami/wordpress/wp-content -type f -exec chmod 664 {} \;
既存サイトのデータを移す
1.
旧サイトでエクスポート、EC2側で移行プラグイン(例:All-in-One WP Migration)を使ってインポートします。2.
サイズが大きい場合は、前述のPHP設定を上げるか、プラグインの分割機能を使います。
DNSを切り替えて独自ドメインで動かす
1.
XserverのDNSでAレコードをElastic IPに変更します(@/www/* を同じIPへ)。2.
反映確認はローカルPCで次を実行します(Elastic IPが返ればOKです)。
nslookup <独自ドメイン>
3.
WordPressのURLを独自ドメインに固定します(管理画面の一般設定が固定されるため、wp-config.phpで上書きします)。
sudo nano /opt/bitnami/wordpress/wp-config.php
define('WP_HOME', 'https://<独自ドメイン>');
define('WP_SITEURL', 'https://<独自ドメイン>');
sudo /opt/bitnami/ctlscript.sh restart apache
無料SSL(Let’s Encrypt)を入れて常時HTTPS
1.
まずは対話ツールで一気に設定します(成功すれば最短です)。
sudo /opt/bitnami/bncert-tool
# ドメイン: <独自ドメイン> <www.独自ドメイン>
# HTTP→HTTPS: Y
# non-www→www: n
# www→non-www: y (wwwなしに統一する例)
2.
もしエラーが出たら(ALPNやTimeoutなど)、http-01のwebroot方式で確実に通します。Apacheが80番で外部公開され、VirtualHostが *:80、ServerName/ServerAliasが独自ドメインになっている前提です。
sudo /opt/bitnami/letsencrypt/lego \
--email="<通知を受け取るメール>" \
--domains="<独自ドメイン>" \
--domains="www.<独自ドメイン>" \
--http \
--http.webroot="/opt/bitnami/wordpress" \
run
3.
証明書が発行されたら、ApacheのSSL設定で .crt / .key を指し、Apacheを再起動します(bncertが成功していれば自動設定済みです)。
sudo /opt/bitnami/ctlscript.sh restart apache
トラブルシューティング(実際に詰まった所)
DNSを切り替えたのに新サーバーが見えない
1.
Aレコードが古いIPのままになっていることが多いです。Elastic IPにそろえます。2.
反映には時間がかかる場合があります。定期的に次で確認します。
nslookup <独自ドメイン>
HTTP接続がタイムアウトする(証明書発行時に失敗する)
1.
ApacheのVirtualHostが 127.0.0.1:80 になっていると外部から到達できません。*:80に直し、ServerName/ServerAliasを独自ドメインに設定します。2.
サーバー内部の疎通は次で確認できます(200 OKならApacheは動いています)。
curl -I http://127.0.0.1
3.
外からの疎通は次で確認します(Windowsの例)。
Test-NetConnection <独自ドメイン> -Port 80
Test-NetConnection <独自ドメイン> -Port 443
Mixed Contentで画像や動画が表示されない
1.
記事やテーマ内に http のURLが残っていることが原因です。2.
wp-config.phpで https 固定にした上で、置換プラグイン(例:Better Search Replace)で http → https に置き換えます。
メディアのアップロードで「移動できません」になる
1.
wp-content配下の所有者と権限を整えます(bitnami:daemon、ディレクトリ775、ファイル664)。2.
WinSCPでアップロードした直後は所有者が崩れやすいので、移行後にまとめて修正します。
公開前チェックリスト1.
DNS:nslookupでAレコードがElastic IPを返します。2.
ポート:Windowsなら Test-NetConnection <独自ドメイン> -Port 80/443 が成功します。3.
サーバー:sudo ss -tlnp | grep :80 と :443 に httpd がLISTENしています。4.
Apacheログ:sudo tail -n 50 /opt/bitnami/apache2/logs/error_log に致命的エラーがありません。5.
表示:HTTPアクセスがHTTPSへ、wwwありがwwwなしへ自動で統一され、画像・動画が正常表示されます。
まとめ1.
まずはElastic IPでIPを固定し、XserverのAレコードを確実に向けるのが第一歩です。2.
WordPressのURLはwp-config.phpで独自ドメイン+httpsに固定すると迷いません。3.
SSLはbncert-toolが簡単ですが、失敗時はwebroot方式で確実に取れます。4.
メディア周りは権限(bitnami:daemon/775・664)とPHPの上限調整で解決します。5.
最後にチェックリストでDNS→ポート→Apache→ログ→表示崩れの順に確認すると安心です。