PHP-FPM#
Lagoonの php-fpm Dockerイメージです。公式のPHP Alpineイメージをベースに作成されています。
PHP-FPM(FastCGI Process Manager)は、FastCGI プロトコルを利用した PHP の実装のひとつで、様々な規模のサイト、特にトラフィックが多いサイト向けに便利な追加機能を備えています。
FastCGIは、サーバースクリプトが時間のかかるコードをスクリプトがロードされる毎度ではなく、一度だけ実行できるようにする仕組みです。これにより、オーバーヘッドを削減します。
情報
Dockerfileは、Lagoon内でPHPを利用するためのベースとして使用する想定です。このイメージ自体がウェブサーバーを作成するのではなく、php-fpmによるFastCGIリスナーを作成します。php-fpmプールの設定を調整する必要が生じるかもしれません。
サポートされているバージョン#
- 7.3 (互換性のためのみ利用可能、公式サポートは終了しています) -
uselagoon/php-7.3-fpm - 7.4 (互換性のためのみ利用可能、公式サポートは終了しています) -
uselagoon/php-7.4-fpm - 8.0 (互換性のためのみ利用可能、公式サポートは終了しています) -
uselagoon/php-8.0-fpm - 8.1 Dockerfile (2024年11月までのセキュリティサポート) -
uselagoon/php-8.1-fpm - 8.2 Dockerfile (2025年12月までのセキュリティサポート) -
uselagoon/php-8.2-fpm - 8.3 Dockerfile (2026年12月までのセキュリティサポート) -
uselagoon/php-8.3-fpm
すべてのPHPバージョンはそれぞれのDockerfilesを使用します。
ヒント
Lagoonは、公式にアナウンスされた終了日(EOL)の後にリリースされるバージョンで、EOLに達したPHPイメージの更新を停止します。詳細はhttps://www.php.net/supported-versions.phpを参照して下さい。
Lagoonの適応#
このイメージはLagoonで使用されることを想定して準備されています。そのため、すでにいくつかのことが行われています:
- フォルダの権限は、
fix-permissionsで自動的に適応されるため、このイメージはランダムなユーザーで動作します。 /usr/local/etc/php/php.iniおよび/usr/local/etc/php-fpm.confファイル、/usr/local/etc/php-f pm.d/ディレクトリ内の全てのファイルは、コンテナエントリーポイントを通してenvplateで処理されます。- インストールされている
PHP拡張機能については、Dockerfileを参照してください。 - さらなる拡張機能をインストールするには、このイメージをもとにDockerfileを拡張してください。拡張機能のインストール方法は、ドキュメントHow to install more PHP extensions.を参照してください。
PHP設定#
PHP 設定には、PHPプール設定の作成を容易にするための適切な値が設定されています。以下はその一部のリストです。詳細は/usr/local/etc/php.ini、/usr/local/etc/php-fpm.conf を確認してください:
| 値 | 詳細 |
|---|---|
max_execution_time = 900 |
PHP_MAX_EXECUTION_TIME で変更可能 |
realpath_cache_size = 256k |
大規模なPHPプロジェクトを扱うための設定 |
memory_limit = 400M |
大規模なPHPプロジェクトを扱うための設定(PHP_MEMORY_LIMIT で変更可能) |
opcache.memory_consumption = 265 |
大規模なPHPプロジェクトを扱うための設定 |
opcache.enable_file_override = 1 と opcache.huge_code_pages = 1 |
より高速なPHPのための設定 |
display_errors = Off と display_startup_errors = Off |
実用的なproduction設定 (PHP_DISPLAY_ERRORS および PHP_DISPLAY_STARTUP_ERRORS で変更可能)。 |
upload_max_filesize = 2048M |
大容量ファイルのアップロードのための設定 |
apc.shm_size = 32m と apc.enabled = 1 |
PHP_APC_SHM_SIZE および PHP_APC_ENABLED で変更可能 |
また、php-fpmのエラーログは stderrに記録されます。
💡 これらの設定のいずれも気に入らない場合は、次の3つの方法があります:
- 設定値が環境変数で変更できる場合は、環境変数を使ってください(これが推奨される方法です。環境変数の表 の詳細は以下の表にまとめてありますので、参照ください。)
- 以下のドキュメントにある
php_admin_valueおよびphp_admin_flagを使って、独自のカスタムfpm-pool設定を作成し、それを適用することができます。- 詳細については、
PHP を Apache モジュールとして実行するためのこのドキュメントを参照してください。このドキュメントはApacheモジュールとしてのPHP実行について説明していますが、php-fpmにも当てはまります。
重要:- 独自の
php-fpmプールを適用したい場合は、/usr/local/etc/php-fpm.d/www.confファイルを自分の設定で上書きするか、別の名前を付けたい場合はこのファイル名を変更してください。この操作を行わないと、最初から用意されているプールが起動します。 PHP_INI_SYSTEM変更可能モードのPHPの設定値は、fpm-pool設定では変更できません。こういった設定値は、用意されている環境変数を使うか、または:- 独自の
php.iniまたはphp-fpm.confファイルを用意する必要があります(この方法は推奨されません)
- 独自の
- 詳細については、
デフォルトのfpm-pool#
このイメージは、fpm-pool設定ファイル(php-fpm.d/www.conf)が含まれており、このファイルはfpm-poolを作成し、ポート9000でリッスンします。これは、ほとんどのPHPアプリケーションのニーズを最初からカバーできるようにするためです。もちろん、必要に応じて独自の設定を作成することもできます。
このファイルの内容の説明:
- IPv4とIPv6でポート9000でリッスンします。
- pm
dynamicを使用し、2から50までの子プロセスを作成します。 - メモリリークを防ぐために、500のリクエスト後に
php-fpmプールの子プロセスを再生成します。 /pingへのfastcgiリクエストに対してpongで応答します(プールが起動しているかどうかの自動テストに便利)。catch_workers_output = yesにより、PHPのエラーを確認できるようにする。clear_env = noにより、通常の Docker 環境変数を使って PHP 環境変数を注入できるようにする
環境変数#
一部のオプションは環境変数で設定可能です。
| 環境変数 | デフォルト | 説明 |
|---|---|---|
| NEWRELIC_ENABLED | false | NewRelicのパフォーマンスモニタリングを有効にします。有効にするにはNEWRELIC_LICENSEを設定する必要がありますす。 |
| NEWRELIC_LICENSE | (設定なし) | 使用するNewRelicのライセンス。重要:NewRelicを有効にするにはNEWRELIC_ENABLEDをtrueに設定する必要があります。 |
| NEWRELIC_BROWSER_MONITORING_ENABLED | true | NewRelicブラウザ監視用のJavaScriptフラグメントの自動挿入を有効にします。重要:NewRelicを有効にするにはNEWRELIC_ENABLEDをtrueに設定する必要があります。 |
| NEWRELIC_DISTRIBUTED_TRACING_ENABLED | false | 分散トレースを有効にします。重要:NewRelicを有効にするには、NEWRELIC_ENABLEDをtrueに設定する必要があります。 |
| PHP_APC_ENABLED | 1 | APCを無効にするには0を設定します。 |
| PHP_APC_SHM_SIZE | 32m | 各共有メモリセグメントのサイズ。 |
| PHP_DISPLAY_ERRORS | Off | エラーを表示されるか非表示にするかを設定します。詳細は、php.netを参照してください。 |
| PHP_DISPLAY_STARTUP_ERRORS | Off | 起動時のエラーを表示するか非表示するかを設定します。詳細は、php.netを参照してください。 |
| PHP_ERROR_REPORTING | Production E_ALL & ~E _DEPRECATED & ~E_STRICT Development: E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE |
PHPに使用されるdesired loggingレベルを設定します。詳細は、php.netを参照してください。 |
| PHP_FPM_PM_MAX_CHILDREN | 50 | 子プロセスの最大数。詳細は、php.netを参照。 |
| PHP_FPM_PM_MAX_REQUESTS | 500 | 各子プロセスが再生成される前に実行するべきリクエストの数。詳細は、php.netを参照してください。 |
| PHP_FPM_PM_MAX_SPARE_SERVERS | 2 | アイドル状態のサーバープロセスの最大許容数を設定します。詳細は、php.netを参照してください。 |
| PHP_FPM_PM_MIN_SPARE_SERVERS | 2 | アイドル状態のサーバープロセスの最小許容数を設定します。詳細は、php.netを参照してください。 |
| PHP_FPM_PM_PROCESS_IDLE_TIMEOUT | 60s | アイドル状態のプロセスが終了されるまでの秒数。詳細は、php.netを参照してください。 |
| PHP_FPM_PM_START_SERVERS | 2 | 起動時に作成される子プロセスの数。詳細は、php.netを参照してください。 |
| PHP_MAX_EXECUTION_TIME | 900 | 各スクリプトの最大実行時間(秒)。詳細は、php.netを参照してください。 |
| PHP_MAX_FILE_UPLOADS | 20 | 同時にアップロードできるファイルの最大数。詳細は、php.netを参照してください。 |
| PHP_MAX_INPUT_VARS | 2000 | 受け入れ可能な入力変数の数。詳細は、php.netを参照してください。 |
| PHP_MEMORY_LIMIT | 400M | スクリプトが消費できるメモリの最大量。詳細は、php.netを参照してください。 |
| XDEBUG_ENABLE | (設定なし) | xdebug 拡張機能を有効にするには、trueに設定します。 |
| BLACKFIRE_ENABLED | (設定なし) | blackfire 拡張機能を有効にするには true に設定します。 |
| BLACKFIRE_SERVER_ID | (設定なし) | Blackfire.ioが提供するBlackfireサーバーID。BLACKFIRE_ENABLEDをtrueに設定する必要があります。 |
| BLACKFIRE_SERVER_TOKEN | (設定なし) | Blackfire.ioが提供するBlackfireサーバートークン。BLACKFIRE_ENABLEDをtrueに設定する必要があります。 |
| BLACKFIRE_LOG_LEVEL | 3 | blackfireエージェントのログレベルを変更します。利用可能な値:ログの冗長性レベル (4: デバッグ, 3: 情報, 2: 警告, 1: エラー) 詳細は、blackfire.ioを参照して下さい。 |