以前からAWS EC2のインスタンスに設置したWordPressで動かしていた本ブログですが、メンテナンスを先延ばしにしまくっていたら色々とアップデートが積み重なって身動きが取りにくくなってしまったので、これを機にEC2からLightsailに移行しつつWordPressも一気に最新までアップデートすることにしたので、その作業メモ。
アップデートの方向性を検討
インスタンスのアップデート or 移行?
まず、稼働中の環境は2018年に起動したEC2インスタンス(t2.small)です。その構成はなんと、
- PHPバージョン 7.0.25
- MySQLバージョン 5.6.38
- WordPressバージョン 5.8.8
です。さすがに更新しなさすぎですが、この環境でVirtualHost設定してWordPressで6つのサイトが動いてます。
今回のゴールは全てのWordPressを最新バージョン(6.4.1)にすること。で、そのWordPressの推奨のホスティング環境はというと、
- PHP バージョン 7.4 以上。
- MySQL バージョン 5.7 以上、または MariaDB バージョン 10.3 以上。
- HTTPS 対応
です。なので、まずはPHPのバージョンを7.0から7.4に上げればよさそうですが、PHPの7.4系も既に公式のサポート期間を終了しているので、諸々考慮するとPHPは8.1以上にまで上げる必要があります。
ただ、サイトを公開中のインスタンスでそのままPHPをメジャーバージョン更新する勇気はない(色々動かなくなって原因を調べたりバージョンダウンなどの対応をする可能性もありそうな)ので、稼働中の環境を直にアップデートするのはやめて新しい環境に移行することにしました。
AWS EC2 or LightSail?
EC2の料金と同等程度のLightSailをざっと比べてみると、
EC2(t2.small)は、オンデマンドで17.1USD、3年間のリザーブドで6.7USD。
同程度(2GBメモリ)のインスタンスがLightsailだと10USDほど。
料金的にはあまり変わらないけど、WordPressを置いておくだけならLightsailの方がインスタンスの設定や取り扱いがシンプルそうだなーという印象です。
ということで、今回はLightsailに新しいインスタンス(移行先)を作成し、そこに稼働中環境(移行元)の全WordPressサイトをひとつずつ移行することにしました。
WordPress マルチサイト?
ちなみに、WordPress にはマルチサイトという仕組みもあり、それを使えばひとつのWordPressで複数のサイトを管理できるようになります。この移行を機に、バラバラに管理していたWordPressを一つにまとめてしまったほうが管理が楽かな?と検討もしましたが、結論としては、以下の点が気になったので従来どおりサイトごとに個々のWordPressで動かすこととしました。
- マルチサイトを利用するためのサーバー要件が、利用しない場合に比べて厳しい
- マルチサイトに対応してないプラグインがある
- サーバーに何かあると、全サイトに影響がでる
- バーチャルホストやSSL周りの設定でつまづきそうな予感
- 事例に関するエントリーがそこまで多くない
移行の手順
1. 移行先インスタンス作成
Lightsailのチュートリアルを参考に、移行先インスタンスを起動して諸々設定します。今回はWordPressを新規ではなく既存サイトから移行したいので、WordPressインスタンスではなくLAMPインスタンスを選んでみました。
↑の手順でざっと進めて、移行先インスタンスを準備しました。
$ php -v
PHP 8.1.24 (cli) (built: Oct 6 2023 09:46:32) (NTS)
ちなみに設定時によく使うコマンドやファイルメモ。
- ドキュメントルート:
/opt/bitnami/apache2/htdocs
- php.ini:
/opt/bitnami/php/etc/php.ini
- エラーログ:
/opt/bitnami/apache2/logs/error_log
- アクセスログ:
/opt/bitnami/apache2/logs/access_log
- apache再起動:
$ sudo /opt/bitnami/ctlscript.sh restart apache
それと、bitnamiでは.htaccess
が使えないので(WordPressではよく使う)、`AllowOverride All
`設定でそれを有効化しときます。
/opt/bitnami/apache/conf/vhosts/https-vhost.conf<Directory "/opt/bitnami/apache2/htdocs">
Options -Indexes +FollowSymLinks -MultiViews
AllowOverride All
Require all granted
</Directory>
Apacheを再起動。
$ sudo /opt/bitnami/ctlscript.sh restart apache
例えば、記事のURLをカスタマイズするにはmod_rewriteを有効にします。
/opt/bitnami/apache/htdocs/.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
2. 移行元WordPressのアップデート
移行のためにWordPressのファイルやデータベースをバックアップする前に、WordPressの本体だけでなくテーマやプラグインのバージョンを上げられるところまでアップデートしておきます。また、使っていないテーマやプラグインは無効化もしくは削除しておきます。これは、移行先の環境で「バージョンが古くて動かない」という状態がおきるのを極力避けるためです。実際、今回の移行作業中にプラグインやテーマの中で使われているPHPのコードの一部が`deprecated`のエラーを吐いて動かないものがいくつかありました。
また、古い環境で動作しているテーマやプラグインは、PHPのバージョンが古いために更新でき無くなっている場合も多く、どうしてもテーマやプラグインをそのまま新しいPHP環境に移行するとエラーを起こす場合が多々あります。その場合は、プラグインのディレクトリをリネームして存在しないことにすることで暫定的にエラーを回避することができます。
例)
- エラー回避前) /wp-content/plugins/pluginname/
- エラー回避後) /wp-content/plugins/_pluginname/
3. 移行元WordPressデータエクスポート
WordPressには色々なバックアップ用プラグインがありますが、自分は BackWPup を使っていたので、これでデータベースのバックアップを取りました。ちなみに、今回の移行作業はうまく移行できずにエラーが起きても影響の少ないものから順にひとつずつ行ったので、データベースのバックアップもサイト(テーブル接頭辞)単位で行いました。
https://ja.wordpress.org/plugins/backwpup/
4. 移行元インスタンスのWordPressファイルダウンロード
WordPress本体やテーマ、プラグインやアップロードファイルなどをまとめて一旦ローカルPCにSCPでダウンロードします。(ここはローカルPCではなく、移行先インスタンスでSCPすればひと手間減るかも。)
$ scp -r old_instance:/var/www/vhosts/
.wordpress_folder
的な感じで、ダウンロード実行。途中で
scp: /var/www/vhosts/
/{ファイル名}: Permission deniedwordpress_folder
という表示が出てダウンロードできないファイルがある場合もあったので、そのときは個別にchmod
してダウンロードしました。
5. 移行先インスタンスのWordPressデータインポート
移行先インスタンスに、phpMyAdminをインストールして、データベースを操作できるようにしておきます。が、確かLightsailのインスタンスには元々インストールされていたような気がします。直接アクセスするのではなく、パソコン側でトンネル設定をしてからssh経由でアクセスする作法なようなので、それに従います。
https://docs.bitnami.com/virtual-machine/faq/get-started/access-phpmyadmin/
$ ssh -N -L 8888:127.0.0.1:80 new_instance
↑こんな感じでトンネルをはってから、ブラウザで↓にアクセスします。
http://127.0.0.1:8888/phpmyadmin
phpMyAdminのログイン画面が表示されたら、ユーザー名はroot、パスワードは
$ cat ~/bitnami_application_password
で取得した値を入力します。
phpMyAdminにログイン後、目的のDBを選択して「インポート」からバックアップファイルを指定して、インポートします。
6. 移行先WordPressファイルアップロード
SCPでローカルにダウンロードしたWordPressのファイル一式を移行先インスタンスにアップロードします。
$ scp -r wordpress_folder
new_instance
:/opt/bitnami/apache2
アップロード後に、ディレクトリとファイルにユーザー設定をします。
$ cd /opt/bitnami/apache
$ sudo chown -R daemon:daemon wordpress_folder
新しいインスタンスに合わせて wp-config.php
を設定する。
7. Virtualhostの設定(http)
/opt/bitnami/apache/conf/vhosts/vhost-examplecom.conf
<VirtualHost *:80>
ServerName example.com
DocumentRoot "/opt/bitnami/apache2/wordpress_folder"
<Directory "/opt/bitnami/apache2/wordpress_folder">
Options +MultiViews +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
apacheを再起動する。$ sudo /opt/bitnami/ctlscript.sh restart apache
8. DNSを向ける
DNS レコードのドメインに 移行先 Lightsail インスタンスの IP アドレスを設定する。
9. HTTPS 設定
Bitnami https設定ツールを実行。
https://repost.aws/ja/knowledge-center/linux-lightsail-ssl-bitnami
$ sudo /opt/bitnami/bncert-tool
VirtualHost設定を追加。
<VirtualHost *:443>
ServerName example.com
DocumentRoot "/opt/bitnami/apache2/wordpress_folder"
SSLEngine on
SSLCertificateFile "/opt/bitnami/letsencrypt/certificates/example.com.crt"
SSLCertificateKeyFile "/opt/bitnami/letsencrypt/certificates/example.com.key"
<Directory "/opt/bitnami/apache2/example.com">
Options +MultiViews +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
apacheを再起動する。$ sudo /opt/bitnami/ctlscript.sh restart apache
10. 確認
- 移行先のWordPressサイトが表示されているか
- 移行先のWordPress管理画面にログインできるか
- 移行先のWordPress管理画面でプラグインやテーマの更新ができるか
- 移行先のWordPress管理画面でメディアから画像のアップロードができるか
11. 移行元サイト停止
アクセスが行ってないか確認する。
$ cd /var/www/logs
$ date
2023年 11月 29日 水曜日 01:13:04 UTC
$ ls -tl
nginxを停止する。$ sudo service nginx stop
$ ps aux | grep nginx
mysqlを停止する。$ sudo service mysqld stop
$ ps aux | grep my
全てのサイトが正常に動作していることを確認し、移行元インスタンスを停止する。
12. 完了
ということで、PHPもWordPressもテーマもプラグインも、全て最新になりました。
たまにはブログ書くぞ―!😆
コメントを残す