WordPress #1 | PHP8.1にアップデートしてNginxで動作させる手順
WordPressをインストールしたが、サーバーにインストールされているPHPのバージョンが古いのでアップデートしろと出ていた。
インストールさせていたPHPのバージョンは7.2で既にサポートも修了しているので、とりあえずバージョン8.1をターゲットにアップデートしてみると、意外と手こずってしまったので、ポイントをメモしておくことにする。
古いバージョンのPHPを削除
まず、現在のPHPのインストール状況としてどのモジュールをインストールしたか確認する。
# yum list installed | grep php
出力されたパッケージの一覧をキャプチャして、後で新しいバージョンのPHPをインストールする際にインストール内容に漏れが無いかをチェックするため、現在のインストール状態をメモしておくことが重要だ。また、PHPとphp-fpmの設定内容も忘れないようにバックアップを取る。こちらも後で参照して、設定内容の違いでエラーが出た時に対応できるようにしておく。
# cp /etc/php.ini /etc/php.ini.7.2.bk
# cp /etc/php-fpm.d/www.conf /etc/php-fpm.d/www.conf.prev
設定のバックアップが完了したので、現バージョンのPHPを削除する。
# yumremove -y php*
新しいバージョンのPHPをインストールする
yumレポジトリの更新とPHPのインストール方法は探せばいくらでもやり方が出てくる。今回のインストールで利用したコマンドはこちら。
# yum -y install --enablerepo=remi,remi-php81 php php-fpm php-devel php-cli php-common php-mbstring php-mysqlnd php-process php-pdo php-bcmath php-xml php-xmlrpc php-gd php-recode php-pecl-msgpack php-pecl-memcached php-pecl-mcrypt php-pecl-mysql php-pecl-xmlrpc php-pecl-zip php-tidy
ここでインストールするパッケージに漏れがあると、サイトの動作に問題がいろいろ発覚するので、非常に重要。これを怠ったがために相当な時間がかかってしまった。
php.iniの変更
設定ファイルは引き継がないため、PHPをバージョンアップしたら、改めて設定する必要がある。前バージョンのバックアップを参照しながら設定を加えていく。WordPressに合った設定内容は探せばいくらでも出てくるのでここでは省略。
php-fpmの設定と起動
php-fpmはモジュールでありながら、実は起動が必要だった。また設定内容に動作ユーザーとグループの設定が必要で、この2つを忘れていたのでしばらく困ってしまった。
ユーザーはデフォルトでは以下のような設定になっている。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache
なんとデフォルトで「apache」なのだ。これを実際にサイトをオペレーションしているユーザー名に書き換える。よく「nginx」にしろとあるが、実際はサイトを扱っているユーザーはFTPなどでサイトデータを扱っているユーザーなので、nginxとは限らない。自分の場合は「keita」だった。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = keita
; RPM: Keep a group allowed to write in log dir.
group = keita
また、php-fpmはサービスとして起動が必要なので、設定ファイルを書き換え終わったら起動する。
# systemctl start php-fpm
自動起動設定も改めてしておく必要がある。
# systemctl enable php-fpm
# systemctl is-enabled php-fpm
最後にnginxを再起動。
# systemctl restart nginx
WordPressはエラーの原因がよくわからない
PHPをバージョンアップしてWordPressへアクセスしてみると、まず502エラーが出たが、ただ502が出力されているだけで、どのモジュール段階でエラーが発生したのかが分からないので特定に時間がかかる。
やっとこさphp-fpmを起動させてみるとアクセス出来た。
だが、次にテストで記事を作ってみると、今度は画像のアップ時点でエラーが出てアップロード出来ない。こちらもやはりエラーが出力されず、原因が分からないので時間がかかる。結局はphp-fpmの権限ユーザーがnginxになっており、phpを動かす事は出来るのだが、ファイルアクセス時に権限エラーが発生したという事のようだ。
このようにWordPressはエラーの出力が非常に不十分だという特性があるので、動作環境は無闇に切り替えないよう、出来るだけ新しいPHPを予め用意しておくという対策が必要になりそうだ。