Fedora ServerでPHP 8.xを使いこなす:PHP-FPMの最適化とSELinuxの「攻略」

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

なぜFedoraはPHP開発者にとって強力な選択肢なのか?

UbuntuやAlmaLinuxはLTS(長期サポート)による安定性から本番環境によく選ばれますが、Fedoraは最新技術を好む人々にとっての「モンスター」マシンと言えます。Fedoraの最大の強みは、リポジトリが常に非常に速く更新される点にあります。CentOSでのRemiやUbuntuでのOndrejのようなサードパーティのリポジトリを追加しなくても、安定版のリリースからわずか数日後には公式のPHP 8.3をインストールできます。

半年間の実運用を経て、Fedora上でのPHP-FPMとOPcacheの組み合わせは非常に印象的なレスポンス速度を見せています。しかし、最大の障壁となるのがSELinuxです。設定を誤ると、ディレクトリをchmod 777にしても500エラーが頻発することになります。この記事では、正確なインストール方法と、これらのセキュリティ問題を根本的に解決する方法を解説します。

PHP 8.xと必須拡張機能のデプロイ

まずはシステムのアップデートから始めましょう。Fedoraは、依存関係の解決に優れたパッケージマネージャーdnfを使用します。

sudo dnf update -y
# 利用可能なPHPバージョンを確認
sudo dnf module list php

Fedoraは通常、最新のPHPバージョンをデフォルトで提供しています。LaravelやSymfonyのようなモダンなフレームワークを快適に動作させるには、以下の拡張機能セットが必要です。

sudo dnf install php-fpm php-cli php-opcache php-gd php-curl php-mysqlnd php-zip php-mbstring php-xml php-intl php-json -y

インストール後、php -vコマンドで確認してください。バージョン8.2または8.3が表示されれば、正しく進んでいます。

高速化のためのUnixドメインソケット経由のPHP-FPM設定

PHP-FPMはスクリプト処理の心臓部です。メインの設定ファイルは/etc/php-fpm.d/www.confにあります。低速なTCPポート(127.0.0.1:9000)の代わりに、Unixドメインソケットに切り替えましょう。これにより、内部ネットワークスタックを経由しないため、レイテンシを約10〜15%削減できます。

設定ファイルを開きます:

sudo nano /etc/php-fpm.d/www.conf

最適化のために以下のパラメータを調整します:

; より高速なデータ転送のためにソケットを使用
listen = /run/php-fpm/www.sock

; ソケットの権限(Apacheを使用しない場合はnginxに変更)
listen.owner = nginx
listen.group = nginx
listen.mode = 0660

; 2GB RAMサーバー向けの設定
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35

注意:Fedoraのデフォルトユーザーはapacheです。Nginxを使用している場合は、パーミッションエラーを避けるために、このファイル内のusergroupnginxに変更してください。

OPcacheの有効化:このステップを忘れずに

OPcacheはバイトコードをRAMにキャッシュするため、リクエストごとにコードを再コンパイルする必要がなくなります。大規模なアプリケーションでは、OPcacheによって実行速度が3倍になることもあります。/etc/php.d/10-opcache.iniファイルを編集してください:

opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
; Laravelのように数千のクラスがあるプロジェクトの場合はファイル数を増やす
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2

Composerのグローバルインストール

必要なときに手動でダウンロードするのではなく、Composerをシステムに直接インストールして、どこからでもコマンドを呼び出せるようにしましょう。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

SELinuxを無効化せず、正しく制御する

FedoraのSELinuxは通常Enforcingモードになっています。これは非常に強力なセキュリティ層ですが、慣れていないと悪夢にもなり得ます。無効化する(セキュリティが非常に低下します)代わりに、以下の3つの「魔法の」コマンドを使用してください。

1. ソースコードへのラベル付与

システムがこれを正当なWebコンテンツとして認識できるように、コンテキストを割り当てます:

sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/my-app(/.*)?"
sudo restorecon -Rv /var/www/my-app

2. Storage/Cacheディレクトリへの書き込み権限の付与

アプリケーションがログを記録したり、画像をアップロードしたりする必要がある場合は、個別に権限を付与する必要があります:

sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/my-app/storage(/.*)?"
sudo restorecon -Rv /var/www/my-app/storage

3. PHPの外部接続を許可

デフォルトでは、SELinuxはPHPが外部APIを呼び出したりメールを送信したりすることをブロックします。これを有効にします:

sudo setsebool -P httpd_can_network_connect 1

起動と確認

サーバーの再起動時にPHP-FPMが自動的に実行されるように、サービスを有効にします:

sudo systemctl enable --now php-fpm

OPcacheを確認するには、/var/www/html/info.php

Share: