🐘

【PHP】AWS EC2(Debian 12)でsuryを使い8.2から8.3へのアップデート手順書

に公開

はじめに

AWS EC2上のDebian 12 (Bookworm) 環境において、稼働中のサービスを止めることなくPHPのバージョンを上げる、ということがありました。

Debianの標準リポジトリは安定性を重視するため、最新のPHPバージョンが提供されるまでタイムラグがあります。そこで、DebianおよびUbuntuのPHPをメンテナンスしているOndřej Surý氏が提供する deb.sury.org リポジトリを利用しました。

本記事では、sury を用いたPHPアップデート手順をご紹介します。

対象者

  • AWS EC2でDebian 12 (Bookworm) を運用している方
  • 現在PHP 8.2以前を使用しており、8.3へアップデートしたい方
  • サーバー構築の自動化(Ansible等)の前に、手動での挙動を確認したい方

1. 事前準備と安全確保

作業を開始する前に、必ずバックアップを取得します。AWS EC2の場合、もっとも確実なのはAMI(Amazon Machine Image)を作成することです。

マネジメントコンソールから対象のインスタンスを選択し、「イメージとテンプレート」から「イメージを作成」を実行してください。これにより、作業中にシステムが破損しても、数分前の状態へ確実に復元できます。

2. 現状の環境確認

まず、現在インストールされているPHPの拡張モジュール(Extensions)をリストアップします。バージョンアップ後に「必要なモジュールが足りない」という事態を防ぐためです。

以下のコマンドで、現在のモジュール一覧をテキストファイルに保存しておきます。

php -m > current_extensions.txt
# dpkgコマンドを使ってインストール済みパッケージ名として取得する場合
dpkg -l | grep php | awk '{print $2}' > current_packages.txt

3. suryリポジトリのセットアップ

Debian 12における推奨手順に従い、GPGキーの設定とリポジトリの追加を行います。apt-key コマンドは非推奨となっているため、signed-by オプションを使用する方法を採用します。

必要なパッケージをインストールします。

sudo apt update
sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2 curl

続いて、GPGキーをダウンロードし、所定の場所に保存します。

curl -fsSL https://packages.sury.org/php/apt.gpg | sudo gpg --dearmor -o /etc/apt/keyrings/sury-php.gpg

リポジトリリストを作成します。

echo "deb [signed-by=/etc/apt/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/sury-php.list

設定を反映させるためにパッケージリストを更新します。

sudo apt update

4. PHP 8.3のインストール

PHP 8.3本体と、一般的な拡張モジュールをインストールします。ここでは例として、Web開発で頻出のモジュールを含めていますが、手順2で確認したリストを元に必要なものを調整してください。

sudo apt install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-mbstring php8.3-xml php8.3-curl php8.3-zip php8.3-gd php8.3-intl

5. バージョンの切り替え

Debian系OSには update-alternatives という便利な仕組みがあり、複数のバージョンのPHPを共存させ、システム全体で使用するデフォルトバージョンを容易に切り替えることができます。

CLI(コマンドライン)版のPHPバージョンを確認し、切り替えます。

# 現在のバージョン確認
php -v

# 8.3へ切り替え設定
sudo update-alternatives --set php /usr/bin/php8.3

もし対話形式で選びたい場合は、以下のコマンドを使用します。

sudo update-alternatives --config php

6. Webサーバー設定の更新

CLIのPHPだけでなく、Webサーバーが使用するPHPも切り替える必要があります。

Nginx (PHP-FPM) の場合

PHP-FPMを使用している場合、ソケットのパスが変更になる場合があります。
デフォルトでは /run/php/php8.3-fpm.sock となります。Nginxの設定ファイル(fastcgi_pass ディレクティブ)を確認してください。

# /etc/nginx/sites-available/default などの設定ファイル
location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}

設定変更後はNginxとPHP-FPMを再起動します。

sudo systemctl restart php8.3-fpm
sudo systemctl restart nginx

Apache (mod_php) の場合

Apacheモジュール版を使用している場合は、古いバージョンを無効化し、新しいバージョンを有効化します。

sudo a2dismod php8.2
sudo a2enmod php8.3
sudo systemctl restart apache2

7. 動作確認と後片付け

最後に、Webサーバー上のアプリケーションが正常に動作するか確認します。phpinfo() 関数を表示させるスクリプトを一時的に設置し、バージョンが8.3になっているか、必要な拡張モジュールが読み込まれているかを確認するのが確実です。

問題がなければ、AMIバックアップの保存期間などを検討し、不要になったPHP 8.2を削除することも可能です(ディスク容量節約のため)。ただし、数週間は旧バージョンを残しておくことを推奨します。

# 必要であれば削除(慎重に)
# sudo apt purge php8.2*

おわりに

サーバーのミドルウェアアップデートは、とても緊張感がある作業だと思います。特にクライアント管理のサーバーの場合はなおさらです。
ただ、サーバーを管理するうえではセキュアな状態となるようなこういったメンテナンス作業は欠かせません。
本記事がミドルウェアのアップデート対応の参考になれば幸いです。


株式会社ONE WEDGE

【Serverlessで世の中をもっと楽しく】
ONE WEDGEはServerlessシステム開発を中核技術としてWeb系システム開発、AWS/GCPを利用した業務システム・サービス開発、PWAを用いたモバイル開発、Alexaスキル開発など、元気と技術力を武器にお客様に真摯に向き合う価値創造企業です。
https://onewedge.co.jp/

GitHubで編集を提案

Discussion