さくらのレンタルサーバからAmazon Lightsail WordPress Multisiteインスタンスへ引っ越すまでの道のり(Cloudflareもあるよ)

インスタンスのセットアップ

まずインスタンス管理ページで静的IPを作成しておく。
SSH接続したら次のコマンドでBitnamiアプリケーションのデフォルトパスワードを取得する。
このパスワードはWordPressダッシュボードのログインや、phpMyAdminのログインなどにも使用するので、メモしておく。

cat $HOME/bitnami_application_password

次のコマンドを実行すると、ブラウザからWordPressに静的IPでアクセスできるようにサイトURLを書き換えてくれる。

sudo /opt/bitnami/configure_app_domain --domain <静的IP>

マルチサイトの引越し

WordPress MultisiteインスタンスにはAll-in-One WP Migrationがプリインストールされているが、マルチサイト対応は有償らしいので、プラグインを使わずに手動で移動した。
(実を言うとgitでテーマファイルを入れようとしたら、色々やらかしてwp-content全部消えてしまったので、そうするしかなくなってしまった。)

データベースの移動

さくらのレンタルサーバでphpMyAdminを使って移行するデータベースをエクスポートする。
SQLファイルをVS Code等で開き、一括置換でドメインを静的IPに変更。必要に応じてテーブル接頭辞も変更しておく。

LightsailでphpMyAdminを使えるようにするのにも一手間必要だ。
/opt/bitnami/apache/conf/bitnami/phpmyadmin.confを開き、コメントアウトされている部分を編集。

AuthType Basic
AuthName phpMyAdmin
AuthUserFile "/opt/bitnami/apache/users/.htpasswd"
Require valid-user

/opt/bitnami/apache/usersディレクトリを作り、.htpasswdファイル生成ツール等を使って.htpasswdファイルを作る。

Apacheを再起動して適用。

sudo /opt/bitnami/ctlscript.sh restart apache

ブラウザからhttp://<静的IP>/phpmyadminにアクセス。
Basic認証を終えるとphpMyAdminのログイン画面が出てくる。
ユーザ名はroot。パスワードはBitnamiアプリケーションのデフォルトパスワードだ。

ログインしたら既存のWordPressのテーブルを削除し、準備したSQLファイルをインポートしたら完了。

wp-contentの移動

さくらのレンタルサーバからFTP等でwp-contentディレクトリをダウンロードし、SFTP等でLightsailの/opt/bitnami/wordpress/wp-contentにアップする。

これで無事完了かと思いきや、ブラウザでアクセスするとサイトが真っ白になっている。
どうやらBitnamiでは決められたパーミッションに設定する必要があるようだ。
ディレクトリのオーナーはbitnami。グループはdaemonに設定する。

sudo chown -R bitnami:daemon /opt/bitnami/wordpress/

パーミッションは全てのディレクトリを775。全てのファイルを664。ただしwp-config.phpのみ640にする。

sudo find /opt/bitnami/wordpress/ -type d -exec chmod 775 {} \;
sudo find /opt/bitnami/wordpress/ -type f -exec chmod 664 {} \;
sudo chmod 640 /opt/bitnami/wordpress/wp-config.php

サブディレクトリ型マルチサイトの場合

自分の場合はさくらのレンタルサーバでサブディレクトリ型のサイトネットワークを使っていた。
LightsailのWordPress Multisiteインスタンスではサブドメイン型で設定されているため、このままだと2つ目以降のサイトにアクセスできない。

wp-config.phpは、以下を編集。

define( 'SUBDOMAIN_INSTALL', false );

.htaccessについては、/opt/bitnami/apache2/conf/vhostsにあるwordpress-vhost.confwordpress-https-vhost.confを編集。

# BEGIN WordPress Multisite
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L]
RewriteRule . index.php [L]
# END WordPress Multisite

この後何かエラーが出た記憶があるのだが、インスタンスの再起動や先ほどのパーミッション設定などいじっているうちに直った。
(役立つ情報が提供できず申し訳ない)

ドメインの設定(Cloudflare)

今回ドメインの取得やDNSゾーン作成などは、Amazon Route 53ではなくCloudflareを使用している。

まずCloudflareのダッシュボードで、DNSレコードのAレコードをインスタンスのIPv4アドレスに、AAAAレコードをインスタンスのIPv6アドレスに書き換える。
Cloudflare WAFのIPアクセスルールツールを使用して、インスタンスのIPアドレスをこのWebサイトで許可しておく。

次のコマンドを実行し、今度はWordPressサイトURLをドメインに切り替える。

sudo /opt/bitnami/configure_app_domain --domain <ドメイン>

SSL(Cloudflare)

ブラウザ⇔Cloudflare間の暗号化はできているので、Cloudflare⇔Lightsail間も暗号化してしまおう。

最初に関連サービスを停止しておく。

sudo /opt/bitnami/ctlscript.sh stop

古い証明書は必要に応じて名前を変えて保管しておく。

sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.crt /opt/bitnami/apache2/conf/bitnami/certs/server.crt.old
sudo mv /opt/bitnami/apache2/conf/bitnami/certs/server.key /opt/bitnami/apache2/conf/bitnami/certs/server.key.old

Cloudflareダッシュボードでオリジン証明書をRSAで作成する。
PEM形式のオリジン証明書を/opt/bitnami/apache2/conf/bitnami/certs/server.crtに、プライベートキーを/opt/bitnami/apache2/conf/bitnami/certs/server.keyに保存する。

次のコマンドで停止したサービスを起動する。

sudo /opt/bitnami/ctlscript.sh start

WordPressのサイトURLの書き換えは普段だったらサイトヘルス等からできるのだが、今回はマルチサイトなのでできない。
phpMyAdminからデータベースを編集して対応できる。
URLの修正を行なったのは次の箇所。

<テーブル接頭辞>_<ブログID>_optionssiteurl
<テーブル接頭辞>_<ブログID>_optionshome
<テーブル接頭辞>_sitemetasiteurl

HTTPSへのリダイレクトが必要な場合は、vhost.confを編集するなり、Cloudflareの「常に HTTPS を使用」機能を使用するなりすればいい。

その他にやったこと

参考

関連記事

コメント

この記事へのコメントはありません。

TOP