Ubuntu 18.04 サーバー: PHP を安全にアップグレードする方法

Ubuntu 18.04 サーバーで PHP を最新バージョンに変更するには、まず OS とアプリケーションのサポートおよび互換性を確認し、サポートされている Ubuntu サーバーで新しい PHP をテストしてから切り替えます。以前のように外部リポジトリを追加してフルパッケージアップグレードを実行するだけでは、希望する PHP バージョンやウェブサーバーへの適用が保証されるわけではありません。

Ubuntu 18.04で最初に確認すべきポイント

Ubuntu 18.04 LTSの一般的なセキュリティメンテナンスは2023年5月に終了しました。Ubuntu Proの拡張セキュリティメンテナンス(ESM)は、該当するパッケージに追加のセキュリティパッチを提供しますが、すべての外部リポジトリやすべてのPHPバージョンに対するサポートを意味するわけではありません。Ubuntu 18.04のサポート期間および現在のサブスクリプションとパッケージの適用範囲を確認してください。

PHPプロジェクトがサポートするバージョンと、ディストリビューションがセキュリティパッチを提供するパッケージを区別する必要があります。Ubuntuパッケージのバージョン番号が同じままであっても、セキュリティ修正が適用される場合がありますが、外部パッケージは自動的にUbuntu Proの保証を受けるわけではありません。公式にサポートされているPHPのバージョンとパッケージ提供者のポリシーの両方を確認してください。

長期的には、新しいサーバーにサポートされているUbuntu LTSをインストールし、サービスを移行することが推奨されます。既存のサーバーをそのままアップグレードする場合、LTSバージョンをスキップすることはできないため、まず18.04から20.04に移行し、その後順次進める必要があります。詳細な手順についてはUbuntu Server アップグレードガイドを参照してください。

現在のPHPおよびウェブサーバーの設定を確認する

本番サーバーを変更する前に、コマンドラインインターフェイス(CLI)のバージョン、読み込まれている拡張機能、およびインストール済みパッケージを記録してください。以下のコマンドで情報を取得できますが、PHPがインストールされていない場合は一部のコマンドが失敗することがあります。

lsb_release -a
php -v
php --ini
php -m
dpkg -l 'php*' | grep '^ii'
apt-cache policy php

php -vはCLIのバージョンです。ウェブリクエストで使用されるApacheモジュールやPHP-FPM(FastCGIプロセスマネージャー)のバージョンおよび設定は異なる場合があります。Apacheでは、apache2ctl -Mでアクティブモジュールを確認し、NginxまたはApacheのサイト設定では、FastCGIが指すソケットやアドレスを確認してください。PHP-FPMの使用有無は、サービス一覧およびウェブサーバーの設定と合わせて確認する必要があります。

systemctl list-units --type=service --all 'php*-fpm.service'
sudo apache2ctl -M

Apacheを使用していないサーバーでは、2番目のコマンドを実行する必要はありません。設定ファイル、サイトファイル、データベース、アップロードされたファイルをバックアップし、復元手順を確認してください。パスワードや個人情報を含む設定は安全に保管してください。

新しいバージョンの選択とテスト環境の準備

  1. アプリケーション、プラグイン、および依存関係がサポートするPHPバージョンを確認してください。PHPのメジャーバージョンの変更は互換性のない動作を引き起こす可能性があるため、現在のバージョンから対象バージョンへのPHP移行ガイドを確認してください。
  2. サポートされているUbuntuとPHPの組み合わせを選択し、本番環境とは別のテストサーバーを準備してください。復元可能なバックアップを使用し、実際のユーザーデータの保護に注意してください。
  3. 必要なPHP拡張機能を記録し、新しい環境に適したパッケージを探してください。データベースドライバー、画像処理、XML、ZIPなどの必要性は、アプリケーションによって異なります。
  4. テストサーバーで、ログイン、データベース接続、ファイルアップロード、定期実行タスク、主要画面を確認し、エラーログをレビューしてください。問題があれば、アプリケーションと拡張機能を修正し、再度テストしてください。

例:Ubuntu 24.04のテストサーバーにPHP 8.3をインストールすること

以下は、Ubuntu 18.04 ではなく新しい Ubuntu 24.04 LTS テストサーバーに PHP 8.3 CLI と PHP-FPM をインストールする例です。PHP 8.3 が必ずしも最新バージョンを意味するわけではありません。選択した Ubuntu バージョンのサポート期間と、Ubuntu 24.04 用 PHP 8.3 パッケージリストを確認し、アプリで必要な拡張機能のみを追加してください。

まず、パッケージ候補と変更計画を確認します。候補がない場合や削除/変更リストが予想と異なる場合は、インストールせず、リポジトリと依存関係を確認してください。

sudo apt update
apt-cache policy php8.3-cli php8.3-fpm
apt-get -s install php8.3-cli php8.3-fpm

テストサーバーでの結果が適切であれば、インストールしてステータスを確認します。以下のコマンドでは、Web サーバーが自動的に PHP-FPM を使用するように構成されません。

sudo apt install php8.3-cli php8.3-fpm
php8.3 -v
php8.3 -m
systemctl status php8.3-fpm --no-pager

例えば、アプリが MySQL や MariaDB への接続を必要とする場合、その環境で php8.3-mysql を別途確認してください。CLI と FPM では設定ファイルや拡張機能が異なる可能性があるため、新しい FPM の設定とサービスを確認してください。パッケージをインストールした後は、テストサーバーの FPM ソケットに合わせてウェブサーバーの FastCGI 設定を調整し、ウェブサーバーの設定チェックを通過した後にリロードします。Apache モジュール方式は別途設定されるものであり、FPM と混同しないでください。

ウェブ設定を確認し、問題から回復してください

CLIバージョンだけを使用してウェブサイトのPHPバージョンを確認することはできません。FPMサービスとログとともにウェブサーバーのアクティブな設定を確認し、制限されたテスト環境で、アプリケーションのステータスページや管理ツールを通じてウェブリクエストが新しいPHPを使用しているかを確認してください。詳細なサーバー設定を公開可能な場所に公開するphpinfo()ページを置かないでください。

実際の移行前に、メンテナンス時間の計画、データ同期、および復旧ポイントを設定してください。サービスを切り替えた後は、主要機能やウェブサーバーおよびPHPのエラーログを確認してください。問題が発生した場合は、以前に保存したウェブサーバーの接続設定に戻す、設定を確認して再読み込みする、または通信を移行前のサーバーに戻すなどの対応を行ってください。データベース構造が変更されている場合、PHPのバージョンを単に戻すだけでは機能が復元されない可能性があるため、バックアップとデータ復元の計画を併用する必要があります。

外部リポジトリや完全なアップグレードには注意してください

この記事の前の方法ではppa:ondrej/phpを追加し、apt-get upgradeを実行しました。外部リポジトリが現在Ubuntu 18.04および希望するPHPバージョンをサポートしているかどうかはプロバイダーによって決まり、単にリポジトリを追加するだけではセキュリティメンテナンスが保証されるわけではありません。apt-get upgradeはPHPだけでなく、アップグレード可能な他のパッケージにも影響します。

本番サーバーでリポジトリを追加または削除する前に、パッケージソース、変更される可能性のある依存関係、および復旧方法を確認してください。また、ウェブサーバーがPHPをどのように扱うかを別途確認する必要があります。古いPHPモジュールをそのままにして、異なるバージョンのApacheモジュールのみを有効にすると、設定の競合が発生する可能性があります。