コンテンツにスキップ

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 = 1opcache.huge_code_pages = 1 より高速なPHPのための設定
display_errors = Offdisplay_startup_errors = Off 実用的なproduction設定 (PHP_DISPLAY_ERRORS および PHP_DISPLAY_STARTUP_ERRORS で変更可能)。
upload_max_filesize = 2048M 大容量ファイルのアップロードのための設定
apc.shm_size = 32mapc.enabled = 1 PHP_APC_SHM_SIZE および PHP_APC_ENABLED で変更可能

また、php-fpmのエラーログは stderrに記録されます。

💡 これらの設定のいずれも気に入らない場合は、次の3つの方法があります:

  1. 設定値が環境変数で変更できる場合は、環境変数を使ってください(これが推奨される方法です。環境変数の表 の詳細は以下の表にまとめてありますので、参照ください。)
  2. 以下のドキュメントにある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_ENABLEDtrueに設定する必要があります。
NEWRELIC_BROWSER_MONITORING_ENABLED true NewRelicブラウザ監視用のJavaScriptフラグメントの自動挿入を有効にします。重要:NewRelicを有効にするにはNEWRELIC_ENABLEDtrueに設定する必要があります。
NEWRELIC_DISTRIBUTED_TRACING_ENABLED false 分散トレースを有効にします。重要:NewRelicを有効にするには、NEWRELIC_ENABLEDtrueに設定する必要があります。
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_ENABLEDtrueに設定する必要があります。
BLACKFIRE_SERVER_TOKEN (設定なし) Blackfire.ioが提供するBlackfireサーバートークン。BLACKFIRE_ENABLEDtrueに設定する必要があります。
BLACKFIRE_LOG_LEVEL 3 blackfireエージェントのログレベルを変更します。利用可能な値:ログの冗長性レベル (4: デバッグ, 3: 情報, 2: 警告, 1: エラー) 詳細は、blackfire.ioを参照して下さい。