XserverドメインをAWS(EC2)へ移行:Bitnami WordPressで詰まった所と解決メモ

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→ログ→表示崩れの順に確認すると安心です。

コメントする

上部へスクロール