php7.4のセキュリティサポートが2022年11月28日に終了したので、phpのバージョンを8.1にアップグレードしました
バージョンの選定
候補として、8.0、8.1、8.2の3通りありました
8.0は、2023年11月26日にセキュリティサポートが終了してしまうため、すぐにアップグレードが必要になってしまうので除外しました
8.2はリリースされたばかりで、Wordpressが対応していない可能性や安定性を考慮し、やめたほうがよいという判断で8.1にアップグレードすることを決めました
WordPressとの互換性を事前に確認
WordPress自体は8.1に対応していますが、使用しているテーマやプラグインがphp8.1に対応しているか事前に調べておいたほうが良いです
私はテーマにLION BLOGを使用していたのですが、対応しておらずアップグレード後にブログが見れなくなってしまったので一度元のバージョンにダウングレードする羽目になりました
その際LION BLOGからCocoonにテーマを変更してますので、良ければそちらもご参照ください
php7.4をアンインストール
①php関連パッケージを確認する
yum list installed php*
後でphpインストールする際に使用するので、表示された結果はメモ帳などにメモしておきます
②php.inのバックアップを取得する
find / -name "php.ini" -ls 912976 64 -rw-r--r-- 1 root root 63250 11月 1 16:23 /etc/php.ini
cp -a /etc/php.ini{,.bk}
③phpをアンインストールする
yum remove php*
④remi-php74リポジトリが有効になっている場合は、disableにする
vi /etc/yum.repos.d/remi-php74.repo [remi-php74] name=Remi's PHP 7.4 RPM repository for Enterprise Linux 7 - $basearch #baseurl=http://rpms.remirepo.net/enterprise/7/php74/$basearch/ #mirrorlist=https://rpms.remirepo.net/enterprise/7/php74/httpsmirror mirrorlist=http://cdn.remirepo.net/enterprise/7/php74/mirror enabled=1 ↓ enabled=0
php8.1をインストール
①epelリポジトリのアップデートを確認する
yum update epel-release
②remiのリポジトリにphp8.1があることを確認する
ll /etc/yum.repos.d/ | grep remi- -rw-r--r-- 1 root root 1314 12月 12 14:45 remi-php81.repo
③php関連パッケージは自動でバージョン8.1が入るように、remi-php81リポジトリを有効にする
vi /etc/yum.repos.d/remi-php81.repo [remi-php81] name=Remi's PHP 8.1 RPM repository for Enterprise Linux 7 - $basearch #baseurl=http://rpms.remirepo.net/enterprise/7/php81/$basearch/ #mirrorlist=https://rpms.remirepo.net/enterprise/7/php81/httpsmirror mirrorlist=http://cdn.remirepo.net/enterprise/7/php81/mirror enabled=0 ↓ enabled=1
④事前に取得しておいたphp関連パッケージのリストを参考に、php8.1をインストールする
yum install --enablerepo=epel php php-fpm phpMyAdmin
この機会に不要なパッケージは減らしておきたかったので、インストール対象を最低限にしました
webサーバーがnginxなのでphp-fpmが必要なのと、phpMyAdminを使用するのでphpMyAdminをインストールしてます
④phpのバージョンが8.1になっていることを確認します
php -v PHP 8.1.13 (cli) (built: Nov 22 2022 14:42:07) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.1.13, Copyright (c) Zend Technologies
⑤以下のファイルをdiffツールなどで比較する
/etc/php.ini
/etc/php.ini.bk
bk側との差異があり、それを反映させたい場合はphp.iniを編集します
編集後は、webサーバー(apacheやnginx)の再起動をしてください
nginxで使用する場合の設定
webサーバーをnginxで構築しているのでphp-fpm関連の設定が必要になります
①以下のファイルをdiffツールなどで比較する
/etc/php-fpm.d/www.conf
/etc/php-fpm.d/www.conf.rpmsave
rpmsaveはphp7.4をアンインストールした時に作成されたファイルです
アップグレードすると、設定項目が変わってたりすることもありますが、今回は自分が設定変更した箇所以外に差異がなかったので、設定項目の変更はなさそうです
差異があった部分をもとに、www.confを編集していきます
④www.confを編集する
vi /etc/php-fpm.d/www.conf ;user = apache ↓ user = nginx ;group = apache ↓ group = nginx ;listen = 127.0.0.1:9000 ↓ listen = /var/run/php-fpm/php-fpm.sock ;listen.owner = nobody ↓ listen.owner = nginx ;listen.group = nobody ↓ listen.group = nginx ;php_value[session.save_path] = /var/lib/php/session ↓ php_value[session.save_path] = /var/lib/php/nginx_session
php_value[session.save_path]はデフォルトで運用している場合は変更なしで大丈夫です
phpアップデートの度にパーミッション設定が必要になるのが面倒で、私の環境では意図的に変更しています
詳細は下記に記載しています
④sessionのパーミッションを変更
ll /var/lib/php drwxrwx--- 2 nginx nginx 4096 12月 13 14:02 nginx_session drwxrwx--- 2 root apache 4096 11月 23 01:21 opcache drwxrwx--- 2 root apache 4096 11月 23 01:21 session drwxrwx--- 2 root apache 4096 11月 23 01:21 wsdlcache
sessionのパスが、デフォルトの/var/lib/php/sessionの場合は所有者の変更が必要です
chown -R nginx. /var/lib/php/session
ll /var/lib/php drwxrwx--- 2 nginx nginx 4096 12月 13 14:02 nginx_session drwxrwx--- 2 root apache 4096 11月 23 01:21 opcache drwxrwx--- 2 nginx nginx 4096 11月 23 01:21 session drwxrwx--- 2 root apache 4096 11月 23 01:21 wsdlcache
④nginxおよびphp-fpmの再起動と自動有効化
systemctl restart php-fpm systemctl enable php-fpm systemctl restart nginx
④WordPressに接続できるか試す
参考
https://onoredekaiketsu.com/upgrade-to-php-8-0/
https://takkaaaaa.com/php-update-7-4to8-1/
コメント