結局、私の環境におけるPHPの最適バージョンはどれなのかという問題に全力で対処した顛末記

2023年11月14日

ここのところlightsail上のAML2にてnginx+php-fpmでnextcloudとwordpressを運用する上で、自分にとって最適なPHPのバージョンは何なのかという検討が続いていましたが、無事決着したので顛末を記す。

1.PHPのバージョンは8.1が最適、8.2も動くには動くが・・・

kagoyaのVPSに検証環境を作成し、Almalinux上で現在Lightsailで運用しているWordpressとnextcloudを複製しPHPのバージョンを入れ替えてみたところ、多少設定を調整する必要はあるが8.0から8.2までのすべてのバージョンで動作確認できた。ただ、WordpressのデバッグモードをONにすることによりPHP8.2ではWordpressのプラグインであるC3 Cloudfront Cache Controllerで動作に支障が無い程度のエラーが発生することを確認した。
また、wordpressのサイトヘルスで低影響度の問題としてREST APIにエラーが出ることを確認した。
nextcloudについてはいずれのバージョンについても正常に動作することを確認した。

次に、Lightsailの環境で一旦すべてのPHPモジュールを削除してamazon linux extrasのPHP8.1および必要なモジュールのインストールを実施。yumでは追加できなかったapcu mcrypt memcache memcached redis igbinary imagick msgpackについてはpeclでインストールした。
その後、kagoyaの検証で確認した調整項目を反映することで、以前なぜか発生していた不具合も無く動作することを確認。
これを持って自分の環境ではamazon linux extrasのphp8.1が最適であることを確認。

2.RHEL系バージョン9のOSではredisの設定に注意

kagoyaのvpsで検証していたときにredisにエラーが発生してnextcloudがまともに動かないという現象が発生した。
設定を確認したところ、nextcloudのコンフィグファイルではredisへのアクセスをunixソケットで行う設定であったが、redisのコンフィグではそもそもunixソケットが有効で無くまたソケット名が一致していなかった。
そこで、nextcloudのコンフィグにあるとおりのソケット名に変更した上でunixソケットでの待ち受けを有効化し、redisを再起動したがそれでも動かない。
ネット上の情報をあさった結果、redisのコンフィグで指定されているアクセス権をデフォルトの0700から0770に変更するとの記載があったのでその通りにしてみたが、それでもだめだった。
ただ、気になったのはアクセス権を700から770に変更して許可されるのはredisグループに属するユーザのみ。つまり、現状のredisグループにどのユーザが所属するべきかという話では無いかと思われる。
そしてnextcloudにてredisが一体どのユーザ権限でアクセスされるかというと、nginxとなる(occコマンドを叩くときもnginx権限でphpを実行しないと動かない)。
そこで、usermod -aG redis nginxを実行してredisグループにnginxを追加しredisを再起動することにより無事にnextcloudが動作するようになった。

なお、余談であるがこの”グループに実際に実行するプロセスのユーザの追加が必要”という状況、almalinux9のopendmarcおよびopendkimでも確認している。これらについても以前はinetソケットを使用していたが、unixソケットでの動作に変更され、その影響でpostfixのユーザ権限でアクセスしないと動作しない模様。

3.CPUコア数が1つだからと言ってphp-fpmの動作プロセス数を1に固定するとループバックエラーやらREST APIエラーやらが発生する

php-fpmのチューニングを行っていた際、サーバのCPUコア数が1つなのでpm = staticとした上でクライアントの最大数を1とするように設定した結果、wordpressのサイトヘルスにてREST APIエラーおよびループバックエラーが発生した。こちらの現象についてはクライアントの最小数を2以上にすることが改善した。

4.今後について

lightsailではまだamazon linux 2023が使用できないが、aml2のEOLが迫っていることから近々対応されると思われるので次はaml2023での環境構築となる予定。