PHP7.3 -> PHP8.1 バージョンアップ

久しぶりにWordpressの管理画面に入ったらPHPのバージョンアップをしてくださいみたいな警告が出ていて、バージョンアップをしなくても動くには動くんですが、今回PHP8.1にバージョンアップしてみました。

動作環境

Raspberry pi で動かしていてBusterです。

cat /etc/os-release
PRETTY_NAME=”Raspbian GNU/Linux 10 (buster)”
NAME=”Raspbian GNU/Linux”
VERSION_ID=”10″
VERSION=”10 (buster)”
VERSION_CODENAME=buster

phpは7.3でした。
Apache MPM+php fpm構成です。

php8.1の導入

以下のサイトを参照しました。

Install PHP 8.5 on Raspberry Pi

リポジトリを追加

sudo wget -qO /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo “deb https://packages.sury.org/php/ buster main” | sudo tee /etc/apt/sources.list.d/php.list

busterと書いた部分はリンク先では$(lsb_release -sc)となっていますが、私のBusterではlsb_releseが導入できず、エラーになるので”buster”を明示

sudo apt update
sudo apt install -y php8.1

php7.3で導入済みモジュールを見ると以下のような感じだったのでとりあえず同じのを入れる。php8.1のjsonは他のモジュールと統合された感じのメッセージが出て無かったな。

phpモジュール確認
dpkg -l | grep php7.3
libapache2-mod-php7.3
php7.3
php7.3-bcmath
php7.3-cli
php7.3-common
php7.3-curl
php7.3-dev
php7.3-fpm
php7.3-gd
php7.3-json
php7.3-ldap
php7.3-mbstring
php7.3-mysql
php7.3-opcache
php7.3-readline
php7.3-xml
php7.3-zip

php8.1をWordpressが使うように設定

Apacheとphpの連携(MPM Event+php-fpmの場合)

Apacheをpre-forkとかMPM Moduleで使っている時は確か”a2enmod”でApacheにphpのモジュールを読み込ませて使っていると思いますが、MPM Event+php-fpmの構成では以下のように動作する。(私の場合はApacheとphp-fpmをunix socketで連携している)

  1. ユーザーリクエスト
  2. Apacheで受信
  3. phpを動作させる場合、Site Enabledで設定した設定を参照
  4. unix socketでphp-fpmへ連携

なので、Apacheのsite設定変更が必要。

Apacheの設定

私の場合、ssl通信が来た時の設定に記述していました。php-fpmのバージョンを書き換え

Apache設定
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerAdmin xxx@xxx
DocumentRoot /xxxx/xxxx
ServerName xxxx.xxxx.xxxx:443
<Directory /xxxx/xxxx/>
Options Includes ExecCGI FollowSymlinks
Allowoverride All
<RequireAll>
Require all granted
Require not ip xxx.xxx.xxx.xxx
</RequireAll>
<FilesMatch \.php$>
SetHandler “proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost”
</FilesMatch>
</Directory>
:
:

基本的にはこれだけでOKですが、fpmの設定がデフォルトになっているので7.3の時の設定に変更しました。

php-fpmの設定

デフォルトであれば以下のファイルを変更する。
/etc/php/8.1/fpm/pool.d/www.conf

  • fpm の代表的なパラメーター
    • pm.max_children 最大プロセス数
    • pm.start_servers 初期起動プロセス数
    • pm.min_spare_servers 最低限稼働させるアイドルプロセス数
    • pm.max_spare_servers アイドルプロセス数の最大数
    • pm.process_idle_timeout アイドル時セッションタイムアウト時間
    • pm.max_requests 1プロセスの最大処理数(越えたらプロセス停止)
APCu , OPC の導入

私はパフォーマンス向上のためにAPCu,OPCを導入していたので、今回も導入する。
こちらが過去の記事

おそるべき威力 APCu+OPcache
継続してパフォーマンス向上に取り組んでいます。 過去の対応は以下のリンクから辿れます。 OPcacheは元々入れていた気がしましたが、APCuは入れてなく、PHPでパフォーマンス対応というとこの二つは大体出てくるので...

OPCに関しては”php8.1-opcache”を入れれば何もしなくてもOKでした。
APCは以前peclで導入したんですが、今回は”php8.1-apcu”を入れる必要がありました。
apt-getなどで入れてください。
/etc/php/8.1/mods-available に apcu.ini ができると思います。
できなければ手動で作成。私は以下のような設定を入れています。

extension=apcu.so
apc.enabled=1
apc.enable_cli=1
apc.shm_size=32M
apc.ttl=86400
apc.gc_ttl=86400

/etc/php/8.1/fpm/conf.d に 20-apcu.ini があれば大丈夫です。
なければ以下のようにシンボリックリンクを作成

ln -s /etc/php/8.1/mods-available/apcu.ini /etc/php/8.1/fpm/conf.d/20-apcu.ini
php7.3-fpmの自動起動の無効化

php7.3-fpmがsystemd経由での自動起動になっていたので自動起動を無効化

systemctl list-unit-files
:
php7.3-fpm.service enabled
:

なので無効化にする

systemctl disable php7.3-fpm.service
Removed /etc/systemd/system/multi-user.target.wants/php7.3-fpm.service.systemctl list-unit-files
:
php7.3-fpm.service disabled
:

再起動してpsコマンドなどで自動起動しないことを確認してください

終わりに

今回、php.iniの設定については記載省略するので必要に応じて設定してください。
忘れている事があるかもしれないのでうまくいかなかったらごめんなさい。

タイトルとURLをコピーしました