- 対象環境:Amazon Linux 2023、PHP は AL2023 標準パッケージ(`php8.4*` → `php8.5*`)、Web サーバは Apache(`httpd`)+ PHP-FPM
- 8.4 と 8.5 は同時にインストールできないため、**8.4 をアンインストールし、8.5 をインストールする**(`dnf install --allowerasing` で同時に行う)
---
## 1. 事前確認
### 1-1. OS 全体を最新のリリースに更新しておく
更新の前に、EC2 コンソールから AMI またはスナップショットを取得する。
```bash
# 更新前の状態
rpm -q system-release # 現在のリリースのバージョン
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null # 既存の設定ファイルの競合
systemctl --failed # 起動に失敗しているサービスがないか
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
# 新しいリリースがあるか(何も出なければ最新なので、1-2 へ進む)
sudo dnf check-release-update
# OS 全体を最新リリースに更新(一覧を確認してから y)
sudo dnf upgrade --releasever=latest
# 再起動が必要か確認して、必要なら再起動
sudo dnf needs-restarting -r
sudo reboot
# 再起動後の確認
rpm -q system-release # 新しい日付になっているか
sudo dnf check-release-update # 何も出なければ最新
sudo find /etc \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null # 設定ファイルの競合(更新前から増えていないか)
systemctl --failed # 起動に失敗しているサービスがないか
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
```
### 1-2. 8.5 のパッケージが提供されているか
```bash
sudo dnf clean metadata
sudo dnf list --available --repo=amazonlinux --releasever=latest 'php8.5*'
```
- `--repo=amazonlinux`:AL2023 標準のリポジトリのみ表示
- `php8.5-opcache` はない(8.5 から OPcache は PHP 本体に組み込み)
### 1-3. アプリケーションの互換性
- PHP 8.5 の移行ガイド(非互換の変更、非推奨になった機能):https://www.php.net/manual/en/migration85.php
- 使用しているフレームワーク・ライブラリが 8.5 に対応しているかを確認する
- Composer を使っている場合は、8.5 の環境で次を実行する
```bash
# composer.json / composer.lock の PHP バージョン・拡張モジュールの要件を満たしているか
composer check-platform-reqs
```
### 1-4. 自分でビルドした拡張モジュールがないか
```bash
# 拡張モジュールのディレクトリ
d=$(php -r 'echo ini_get("extension_dir");'); echo "$d"
# パッケージに含まれない拡張モジュール(pecl install などでインストールしたもの)。何も出なければなし
for f in "$d"/*.so; do rpm -qf "$f" >/dev/null 2>&1 || echo "パッケージ外: $f"; done
```
- 表示されたものは 8.5 用に再ビルドする
---
## 2. 現状の記録とバックアップ
```bash
# PHP のバージョン(CLI / FPM)
php -v
php-fpm -v
# インストール済みの PHP パッケージ(バージョン付き)
rpm -qa 'php8.4*' | sort
# インストール済みの PHP パッケージ名(バージョンなし。3. と 8. で使う)
rpm -qa --qf '%{NAME}\n' 'php8.4*' | sort | tee ~/php84-packages.txt
# 有効な拡張モジュールと設定値(アップグレード後の比較用)
php -m > ~/php84-modules.txt
php -i > ~/php84-info.txt
# エラーログの現在の行数(7. で、作業開始後に追加された行だけを表示するため)
sudo cat /var/log/php-fpm/error.log | wc -l | tee ~/php-fpm-error-lines.txt
sudo cat /var/log/httpd/error_log | wc -l | tee ~/httpd-error-lines.txt
# 設定ファイルのバックアップ
sudo tar czf /root/php84-config.tar.gz \
/etc/php.ini /etc/php.d /etc/php-fpm.conf /etc/php-fpm.d /etc/httpd/conf.d/php.conf
```
- EC2 コンソールから **AMI またはスナップショットを取得**(切り戻し用)
---
## 3. インストールするパッケージの確認
```bash
# パッケージ名の php8.4 を php8.5 に置換した一覧
sed 's/^php8\.4/php8.5/' ~/php84-packages.txt | tee ~/php85-packages.txt
# 8.5 で提供されていないパッケージを表示(何も出なければすべて提供あり)
for p in $(cat ~/php85-packages.txt); do
[ -z "$(sudo dnf repoquery -q --repo=amazonlinux --releasever=latest "$p")" ] && echo "提供なし: $p"
done
```
- 「提供なし」のパッケージは `~/php85-packages.txt` から行を削除する
- `php8.5-opcache`:削除するだけでよい
- それ以外:その拡張モジュールが必要か、別の入手方法があるかを確認する
---
## 4. 8.4 のアンインストールと 8.5 のインストール
```bash
# 8.5 をインストールし、競合する 8.4 をアンインストール(一覧を確認してから y)
sudo dnf install --releasever=latest --allowerasing $(cat ~/php85-packages.txt)
```
y を押す前に、表示される一覧で次を確認する。
| dnf の表示 | 確認すること |
|---|---|
| インストール(Installing) | `php8.5-xxx` が `~/php85-packages.txt` のとおり並んでいるか |
| 削除(Removing) | `php8.4-xxx` だけになっているか(**PHP 以外のパッケージがアンインストール対象に入っていたら中止する**) |
---
## 5. 設定ファイルの確認
```bash
# 退避・競合した設定ファイル(.rpmsave:元の設定が退避されたもの / .rpmnew:新しい標準設定)
sudo find /etc/php* /etc/httpd \( -name '*.rpmnew' -o -name '*.rpmsave' \) 2>/dev/null
# バックアップを展開して、アップグレード前との差分を確認
mkdir -p ~/php84-config
sudo tar xzf /root/php84-config.tar.gz -C ~/php84-config
sudo diff ~/php84-config/etc/php.ini /etc/php.ini
sudo diff -r ~/php84-config/etc/php.d /etc/php.d
sudo diff ~/php84-config/etc/php-fpm.conf /etc/php-fpm.conf
sudo diff -r ~/php84-config/etc/php-fpm.d /etc/php-fpm.d
sudo diff ~/php84-config/etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.conf
```
- `.rpmnew` が出た場合(例:`/etc/php.ini.rpmnew`):現在のファイルは変更済みのためそのまま残り、8.5 の標準が `.rpmnew` として置かれている。`.rpmnew` に自分で変更した設定を反映して、現在のファイルと置き換える
```bash
# 有効な設定だけの差分(コメントと空行を除く。< が現在の設定、> が 8.5 の標準)
diff <(sudo grep -Ev '^\s*(;|$)' /etc/php.ini) <(sudo grep -Ev '^\s*(;|$)' /etc/php.ini.rpmnew)
```
- 変更した設定が消えていたら、8.5 の新しいファイルに変更点だけを反映する(8.4 のファイルで上書きしない)
- `/etc/php.d/10-opcache.ini` は 8.5 のファイルになり、`zend_extension=opcache` の行がなくなる(8.5 から OPcache は PHP 本体に組み込み)。それ以外の差分は 8.5 の標準ファイルのコメントの違い
- OPcache の設定値に変わりがないかを確認する
```bash
# OPcache の設定値の差分(何も出なければ同じ)
php -i | grep '^opcache\.' | diff <(grep '^opcache\.' ~/php84-info.txt) -
```
- `opcache.file_cache_read_only` の追加と `opcache.jit_hot_loop` の 64 → 61 は 8.5 の初期値によるもの(`jit_hot_loop` は JIT を使う場合のみ関係する)
---
## 6. サービスの再起動
```bash
# 自動起動が有効か(8.4 のアンインストール時に無効化される場合がある)
systemctl is-enabled php-fpm
sudo systemctl enable php-fpm # disabled と出た場合
sudo systemctl restart php-fpm # 必須:8.5 の php-fpm を起動
sudo apachectl configtest # Syntax OK を確認
sudo systemctl reload httpd
```
---
## 7. アップグレード後の確認
```bash
# バージョン
php -v ; php-fpm -v # 8.5 になっているか
rpm -qa 'php8.5*' | sort # インストール済みの PHP パッケージ(バージョン付き)
rpm -qa | grep php8.4 # 何も出なければ OK
# 拡張モジュールの差分(< が 8.4 にだけあったもの)
php -m | diff ~/php84-modules.txt -
# サービスの状態
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
# 作業開始後に追加されたエラーログ(Deprecated / Warning / Fatal / error が出ていないか)
sudo tail -n +$(( $(cat ~/php-fpm-error-lines.txt) + 1 )) /var/log/php-fpm/error.log
sudo tail -n +$(( $(cat ~/httpd-error-lines.txt) + 1 )) /var/log/httpd/error_log
```
- 拡張モジュールの差分に出たものは、3. で一覧から削除したもの以外なら原因を確認する
- ブラウザで各サイトの主な画面を確認する(ログイン、DB 参照、画像やファイルのアップロード、メール送信、PDF・Excel 出力など)
---
## 8. 切り戻し
問題が出た場合は、AMI から復元するか、8.5 をアンインストールして 8.4 を再インストールする。
```bash
# 8.4 を再インストールし、競合する 8.5 をアンインストール(一覧を確認してから y)
sudo dnf install --releasever=latest --allowerasing $(cat ~/php84-packages.txt)
# 設定ファイルをアップグレード前の状態に戻す
sudo tar xzf /root/php84-config.tar.gz -C /
sudo systemctl enable php-fpm
sudo systemctl restart php-fpm
sudo apachectl configtest
sudo systemctl reload httpd
# 切り戻し後の確認
php -v ; php-fpm -v # 8.4 に戻っているか
rpm -qa | grep php8.5 # 何も出なければ OK
systemctl status php-fpm --no-pager
systemctl status httpd --no-pager
```
2026/10/30
PHP 8.4 → 8.5 アップグレード手順(Amazon Linux 2023 / Apache + PHP-FPM)
登録:
コメントの投稿 (Atom)
人気の投稿
-
[AWS CloudFormation とは何ですか?](https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html) ## CloudFormationの動作概要 ポイン...
-
## News [新サービス – AWS Transfer for SFTP – Amazon S3向けフルマネージドSFTPサービス](https://aws.amazon.com/jp/blogs/aws/new-aws-transfer-for-sftp-fully-ma...
-
## 1. QCD(プロジェクトマネジメントの三角形) 品質(Quality)、コスト(Cost)、納期(Delivery)は相互に制約し合う。 - プロジェクト開始時に優先順位を明確化する - 品質・コスト・納期の変更時は影響分析を行う - ステークホルダーと優先順位を合...
-
## CVPグラフ ## 損益構造の恒等式 | 区分 | 式 | |---|---| | 売上 | 変動費 + 固定費 + 利益 = 費用 + 利益 = 変動費 + 限界利益 | | 費用 | 変動費 + 固定費 = 売上 − 利益 | | 変動費 | 売上 × 変動費...
-
## 作業前確認 [Amazon Linux 2023 リリースノート](https://docs.aws.amazon.com/ja_jp/linux/al2023/release-notes/relnotes.html) ### インスタンスのネットワーク設定 ``` ...
0 件のコメント:
コメントを投稿