こんにちは、FITSのブログ担当です。本日はWordPressのために実施した、PHPのバージョンアップ作業について紹介しますね。なお今回のWordPressはLightsail上で運用されています。
まず、PHPのバージョンアップを行う必要性についてですが、PHPのバージョンを更新せずにWordPress を運用していると、ダッシュボードに「PHPの更新を推奨」というメッセージが表示されることがあります。PHPにもバージョンごとにサポート期間が設定されていますので、それが切れるとWordPress側で親切にも警告を表示してくれる、ということですね。
この「PHPの更新についてさらに詳しく」を見るとわかるのですが、WordPress自体にはPHPのバージョンアップをサポートする機能はなく、単純にバックアップを取った後に自身でPHPをバージョンアップさせることとなります。
ただ、過去の経験からLightsailにおけるPHPのアップデート作業は依存関係などで作業が複雑化することが多く、単純にLightsailに別なWordPressインスタンスを構築し、そこに対してバックアップデータを復帰するのが最も確実な対応方法となります。まずはLightsailのダッシュボードから新しいインスタンスを立ち上げていきます。その際に、WordPress用インスタンスイメージを選びましょう。また、立ち上げたら静的IPアドレスをアタッチしておくと良いです。
立ち上げインスタンスを確認すると、PHPのバージョンが新しくなっていることが分かります。※PHPのバージョンはbitnamiのWordPressイメージ次第のため、新しくはあるものの、最新のPHPバージョンではないことに注意してください。
bitnami@ip-xxx-xxx-xxx-xxx:~$ php -v
PHP 8.2.19 (cli) (built: May 7 2024 15:22:14) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.19, Copyright (c) Zend Technologies
with Zend OPcache v8.2.19, Copyright (c), by Zend Technologies
bitnami@ip-xxx-xxx-xxx-xxx:~$
さらに、WordPressの認証情報を確認し、管理画面にもログイン可能であることを確認します。
今回の環境ではWordPressのファイル群は /opt/bitnami/apps/wordpressにまとまっていました。wp-content の中に以降に必要となる uploads、themes、pluginsなども存在しています
root@ip-xx-xx-xx-xx:/opt/bitnami/apps/wordpress/htdocs# ls
activate.html wp-activate.php wp-content wp-mail.php
index.php wp-admin wp-cron.php wp-settings.php
license.txt wp-blog-header.php wp-includes wp-signup.php
pairing.html wp-comments-post.php wp-links-opml.php wp-trackback.php
readme.html wp-config.php wp-load.php xmlrpc.php
robots.txt wp-config-sample.php wp-login.php
root@ip-xx-xx-xx-xx:/opt/bitnami/apps/wordpress/htdocs# ls wp-content/
cache languages themes upgrade-temp-backup w3tc-config
index.php plugins upgrade uploads
さらに、データベースのダンプデータ(バックアップデータ)も取得しておきます。
#mysqldump -u bn_wordpress -p bitnami_wordpress > bitnami_wordpress.sql
この後はバックアップデータを移行先の Lightsail インスタンスに格納する必要があります。SSHでCLIから接続しても良いのですが、今回Advanced File ManagerプラグインのFTP機能を使ってアップロードすることにします。
後は必要なファイルと、データベースの取り込みをすれば作業完了ですが「このサイトに重大なエラーがありました」が発生しました。
wp-config.php のデバッグ設定をONにしてデバッグします
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true);
define( 'WP_DEBUG_LOG', true );
結果、今回は下記のエラーが発生していました
Fatal error: Uncaught Error: Call to undefined function create_function()
Fatal error: Array and string offset access syntax with curly braces is no longer supported
これらは、PHPのバージョンが上がって廃止になったものなので、create_functionを無名関数に置き換え、配列への波括弧によるアクセスを、角括弧に置き換えれば問題なく動きます(今回はテーマのファイルで発生していたため、少し発見が遅れました)
後はLet ‘s Encrypt を使ってSSL対応を行います。今回はbitnamiのイメージを使っているので、certbotではなくてbncertを使うことで恒久的なSSL対応が可能となります。
参考:AWS公式ドキュメント「Lightsail WordPress のインスタンスで HTTPS を有効にする」
https://docs.aws.amazon.com/ja_jp/lightsail/latest/userguide/amazon-lightsail-enabling-https-on-wordpress.html