Linux WordPress 自宅サーバ

WordPressでPHPをアップグレード(7.4.30 -> 8.5.3)した時のメモ(Debian11)

きっかけ

久々にWordPressのダッシュボードを開いたところ、次の警告が表示されていました。

PHPの更新を推奨
このサイトは古いバージョンのPHP(7.4.30)を実行しており、セキュリティアップデートを受け取れません。更新する必要があります。

管理画面上でここまで明確に出ているので、後回しにせずアップグレード対応を進めました。

設定内容やプログラムの内容は、用途・環境に応じて適切なものが変わります。
各種設定値や環境情報についてよく理解を深め、壊れても良い環境でくまなく検証してください。
なるべく正確に書くように心掛けていますが、本投稿内容を実施される際には自己責任の下でお願い致します。

作業環境

  • 仮想基盤: Proxmox上の仮想マシン
  • 仮想マシン上のOS: Debian 11.1

実施前にやったこと

アップグレード前は、以下を先に実施しました。

  1. Proxmoxで対象VMのスナップショットを取得
    • 今回の環境はProxmox上のVMでWordPressを動かしているため、PHP変更前にスナップショットを作成しました。
    • こういう時に、仮想化していると便利ですね。
  2. ファイルとDBのバックアップ
  3. テーマ・プラグイン・WordPress本体を最新化
  4. 重要ページ(トップ、投稿、問い合わせ)の動作確認

PHPアップグレードの流れ

今回はDebian VM上での更新として、次の流れで実施しました。

  1. まず Httpサーバがnginx と apache2 のどちらで動いているうろ覚えなのでどっちかを確定
  2. 現在のPHPのバージョンを確認(php -v
  3. PHPパッケージを更新
    • 当初は8.2を目指しましたが、最終的にコマンドライン版は8.5まで上がりました。まあホビー環境だし、新しい分にはヨシッ!ということで進めます。
    • プロダクト環境ではな当然こんな事しないです。絶対。ダメ🙅
  4. 確定したWebサーバー方式に合わせて設定更新
    • php-fpm または libapache2-mod-php。Web側は8.2で動けばOK!
  5. Webサーバーを再起動/再読込
  6. WordPress管理画面へ再ログインして警告解消を確認

具体的なアップデート手順(Debian 11.1 / 実結果ベース)

ここでは PHP 7.4.30 から更新し、最終的にコマンドライン側が PHP 8.5.3 になった実行内容を残しておきます。
今回は、root で実行しますが、状況により各コマンドの先頭に sudo を付けて実行します。

1. Webサーバー種別を確定

久しぶりにこのVM触るので、NginxだったかApacheだったか忘れていたためプロセスとsystemdの状況で確定。

root@wordpress:/home/localadm# ps -ef | grep nginx
root         444       1  0  2月08 ?      00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data     445     444  0  2月08 ?      00:00:04 nginx: worker process
root      127243  127217  0 12:45 pts/0    00:00:00 grep nginx

root@wordpress:/home/localadm# ps -ef | grep apache
root      127245  127217  0 12:45 pts/0    00:00:00 grep apache

root@wordpress:/home/localadm# systemctl status apache2 --no-pager -l || true
● apache2.service - The Apache HTTP Server
     Loaded: loaded (/lib/systemd/system/apache2.service; disabled; vendor preset: enabled)
     Active: inactive (dead)
       Docs: https://httpd.apache.org/docs/2.4/

root@wordpress:/home/localadm# systemctl status nginx --no-pager -l || true
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Sun 2026-02-08 17:19:45 JST; 6 days ago
       Docs: man:nginx(8)
    Process: 409 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
    Process: 443 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 444 (nginx)
      Tasks: 2 (limit: 522)
     Memory: 32.6M
        CPU: 4.741s
     CGroup: /system.slice/nginx.service
             ├─444 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─445 nginx: worker process

nginx が active (running) で apache2 が inactive (dead)かつ、プロセスもnginxが現状動いているっぽいので、今回はNginx 構成と確定。
 ※余談ですがapache2 が active (running) なら Apache 構成。

2. 事前確認事項

root@wordpress:/home/localadm# php -v
PHP 7.4.30 (cli) (built: Jul  7 2022 15:51:43) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
root@wordpress:/home/localadm# nginx -V 2>&1 | head -n 1 || true
nginx version: nginx/1.18.0
root@wordpress:/home/localadm# 

一応、PHPとnginxのバージョンも確認。

3.PHP8系のPHPパッケージを使えるようにする

Debian 11標準だけだとPHP 7.4系が中心のため、8系のPHPを使う場合はリポジトリ追加が必要っぽいので追加。

root@wordpress:/home/localadm# apt update
取得:1 http://security.debian.org/debian-security bullseye-security InRelease [27.2 kB]
...
24.1 MB を 4秒 で取得しました (6,674 kB/s)
パッケージリストを読み込んでいます... 完了
...
N: Repository 'http://security.debian.org/debian-security bullseye-security InRelease' changed its 'Suite' value from 'stable-security' to 'oldoldstable-security'
N: Repository 'http://deb.debian.org/debian bullseye InRelease' changed its 'Suite' value from 'stable' to 'oldoldstable'

root@wordpress:/home/localadm# apt install -y ca-certificates apt-transport-https lsb-release wget gnupg2
パッケージリストを読み込んでいます... 完了
...
アップグレード: 2 個、新規インストール: 16 個、削除: 0 個、保留: 222 個。
...
gnupg2 (2.2.27-2+deb11u3) を設定しています ...
man-db (2.9.4-2) のトリガを処理しています ...
libc-bin (2.31-13+deb11u2) のトリガを処理しています ...

root@wordpress:/home/localadm# wget -qO /etc/apt/trusted.gpg.d/sury-php.gpg https://packages.sury.org/php/apt.gpg
root@wordpress:/home/localadm# echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
root@wordpress:/home/localadm# apt update
...
取得:4 https://packages.sury.org/php bullseye InRelease [6,136 B]
取得:5 https://packages.sury.org/php bullseye/main amd64 Packages [288 kB]
...
パッケージリストを読み込んでいます... 完了

Suryリポジトリ追加後の apt update で packages.sury.org/php が取得され、新しいPHP系パッケージを引ける状態になった。
こちらも余談ですが、bullseye の Suite が oldoldstable に変わった旨の通知が出ており、OS自体もそろそろアップグレードの頃合いかなと。。。(別途検討)

4. PHP本体と拡張を導入(開始時は8.2)

WordPressで一般的に使う拡張をまとめて入れます。

root@wordpress:/home/localadm# apt install -y php8.2 php8.2-cli php8.2-common php8.2-mysql php8.2-xml php8.2-curl php8.2-gd php8.2-mbstring php8.2-zip php8.2-intl php8.2-opcache
パッケージリストを読み込んでいます... 完了
...
アップグレード: 2 個、新規インストール: 18 個、削除: 0 個、保留: 233 個。
...
php8.2-cli (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
update-alternatives: /usr/bin/php (php) を提供するために自動モードで /usr/bin/php8.2 を使います
...
php8.2 (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
libc-bin (2.31-13+deb11u2) のトリガを処理しています ...
root@wordpress:/home/localadm#

とりあえず、php8.2 と主要拡張がインストールされ、作業開始時点で /usr/bin/php の代替先が php8.2 に切り替えれたっぽい。
libapache2-mod-php8.2 も同時に入っており、php7.4 module already enabled のメッセージが出ている。
今回の実行環境はNginx運用なので、 php-fpm 側を有効化して使う(次の手順)

5. Nginx + PHP-FPMの場合

root@wordpress:/home/localadm# apt install -y php8.2-fpm
パッケージリストを読み込んでいます... 完了
...
php8.2-fpm (8.2.30-3+0~20260213.84+debian11~1.gbp445d4a) を設定しています ...
...
Created symlink /etc/systemd/system/multi-user.target.wants/php8.2-fpm.service → /lib/systemd/system/php8.2-fpm.service.
root@wordpress:/home/localadm# systemctl enable --now php8.2-fpm
root@wordpress:/home/localadm# 

Nginx設定(例: /etc/nginx/sites-available/default)を編集し、 fastcgi_pass を新バージョン(今回は php8.2-fpm)のソケットに書き換えます。

# 修正前: fastcgi_pass unix:/run/php/php7.4-fpm.sock;
# 修正後:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;

[!TIP] 後の手順で apt purge を行った際、依存関係でPHP 8.5が導入されました。 そのため「CLIは8.5、Web(FPM)は8.2」というねじれが発生しますが、個人の趣味ブログなら動けば問題なし! もし気になる人は、ここのパスも php8.5-fpm.sock に合わせればスッキリします。本番環境ではやっちゃダメ。絶対。

設定反映:

root@wordpress:/home/localadm# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
root@wordpress:/home/localadm# systemctl restart nginx
root@wordpress:/home/localadm#

php8.2-fpm がインストールされ、systemctl enable --now php8.2-fpm で起動・自動起動設定するところまで完了。
Nginxの fastcgi_pass を unix:/run/php/php8.2-fpm.sock に変更し、nginx -t で構文に問題ないことまで確認。
最後に systemctl restart nginx で反映!

6. 旧PHP 7.4を停止・削除(動作確認後)

問題がないことを確認してから実施します。

root@wordpress:/home/localadm# systemctl disable --now php7.4-fpm || true
Removed /etc/systemd/system/multi-user.target.wants/php7.4-fpm.service.

root@wordpress:/home/localadm# apt purge -y 'php7.4*'
パッケージリストを読み込んでいます... 完了
...
以下のパッケージが新たにインストールされます:
  php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-fpm php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache
  php8.4-readline php8.4-xml php8.4-zip php8.5-cli php8.5-common php8.5-imagick php8.5-phpdbg php8.5-readline
...
update-alternatives: /usr/bin/php (php) を提供するために自動モードで /usr/bin/php8.5 を使います
...
root@wordpress:/home/localadm# apt autoremove -y

apt purge -y 'php7.4*' はグロブ展開の影響で関連メタパッケージの再解決が走り、php8.4 と php8.5 系まで同時導入されたてしまった(´・ω・`)
update-alternatives が最終的に /usr/bin/php8.5 を向いたため、最終CLIバージョンは 8.5.3 になった。
CLIとWebでバージョンがズレましたが、個人のブログだし検証要素も強めなだし、むしろ最新版を先取りできたのでヨシッ!とします。

7. 最終確認(CLIバージョンの確認)

CLI(コマンドライン)で使われるPHPバージョンを確認します。

また、WordPressの動作に必須な拡張モジュールが読み込まれているか確認します。 もしここで何も表示されない場合は、そのバージョンの拡張パッケージ(例: php8.5-mysql)が不足している可能性があります。

WordPress管理画面の「サイトヘルス」で、実際に使われているPHPバージョンとエラー有無を確認して完了です。

root@wordpress:/home/localadm# php -v
PHP 8.5.3 (cli) (built: Feb 13 2026 15:51:35) (NTS)
Copyright (c) The PHP Group
...
    with Zend OPcache v8.5.3, Copyright (c), by Zend Technologies
root@wordpress:/home/localadm# php -m | grep -E 'mysqli|curl|mbstring|xml|zip|gd|intl'
libxml

最終的なCLI実行バージョンは PHP 8.5.3(お、早いね!)
Web側(8.2)でWordPressが元気に動いているなら、CLIは適宜使うときに考えればOK。ヨシッ!

反映後に確認したこと

アップグレード後は、次をチェックしました。

  • ダッシュボードの警告が消えているか
  • サイト表示の崩れがないか
  • プラグインのエラー(管理画面・フロント)
  • フォーム送信やログインなど主要機能

まとめ

今回のようにWordPressの管理画面で「PHP更新推奨」が出たら、対応タイミングです。

今回の作業では、最終的にCLIが 8.5.3、Web側が 8.2 という構成になりました。
「バージョンが揃ってない!」と本番運用する場合は、事故りそうなので合わせる気にもなりますが、個人のホビー環境のWordPressなので、快適に動いてセキュリティ警告が消えれば、それでヨシッ!(←しばらくしたらVMごと再構成予定)

(参考)PHPバージョンを8.5に揃える場合

もし「やっぱり揃えたいな」と思ったら、以下の手順でサクッと統一するので、その時用のメモ(実行してないのであっているかは不明)

# PHP 8.5 FPMと拡張のインストール
apt install -y php8.5-fpm php8.5-mysql php8.5-xml php8.5-curl php8.5-gd php8.5-mbstring php8.5-zip php8.5-intl

# Nginx設定の書き換え
# fastcgi_pass unix:/run/php/php8.2-fpm.sock; -> unix:/run/php/php8.5-fpm.sock;

# 反映
systemctl enable --now php8.5-fpm
systemctl restart nginx

-Linux, WordPress, 自宅サーバ
-, , , ,