Skip to main content

PHP-FPM

The PHP-FPM container every PHP project runs in

The PHP-FPM container every PHP project runs in: Drupal, WordPress, Laravel, Symfony or anything else. One image, built by Vallic from wodby's PHP, published for PHP 8.2 to 8.5.

It carries PHP and its extensions, Composer, and the clients a shell needs (rsync, mariadb, psql). It carries no framework's tool: drush is the one in your project's vendor/bin, and a WordPress project fetches wp-cli into bin/ as a build step in its vallic.yaml — both are on PATH inside the container, and both are versioned with your code rather than with ours.

Inside the container the code is at /var/www/html/current (WEB_ROOT), read-only; the directory above it holds the releases kept for rollback. The user is vallic.

#Choosing the version

runtime.php in vallic.yaml picks it, for the site and for your build steps alike, so Composer resolves your dependencies against the PHP that will run them:

runtime:
  php: '8.4'
  memory_limit: 512M

Leave it out and you get the default, marked below. memory_limit is held to what your plan allows — see Configuration for the ladder.

#What is set for you

  • No errors on the page in production. Errors, startup errors and failed assertions go to the logs, not into the response. Other environments behave as the image does.
  • No checking your code for changes. A deploy switches to a new release and reloads PHP-FPM, so the check every request would otherwise make is off everywhere.
  • APCu is sized from your machine, rather than left at the image's default.
  • Debuggers and profilers are not in the image at all — no Xdebug, no XHProf — so no setting can switch one on in production.

The queue worker, your workers and your scheduled jobs run in this same image, with the same settings. See Service settings for what you can change.

#Versions

Version Status
8.5 Supported, and the default
8.4 Supported
8.3 Supported
8.2 Supported

Pin the version, not the build: name 8.5 and the platform matches it to the current build, so a security rebuild reaches you without anybody editing a repository.

#What you can change

In vallic.yaml — what each one does is on Service settings:

services:
  - php:
      version: '8.5'
      environment:
        PHP_MEMORY_LIMIT: …
        PHP_MAX_EXECUTION_TIME: …
        PHP_POST_MAX_SIZE: …
        PHP_UPLOAD_MAX_FILESIZE: …
        PHP_OPCACHE_MEMORY_CONSUMPTION: …
        PHP_APCU_SHM_SIZE: …
        PHP_FPM_PM_MAX_CHILDREN: …
        PHP_DISPLAY_ERRORS: …
        PHP_MAX_INPUT_VARS: …

Anything not on this list refuses the deploy, naming the variable — rather than being accepted and quietly ignored.