Skip to content

Release 5.1: PHP patches within the hour, signed images, PHP 8.6-rc, and more - #740

Open
jaydrogers wants to merge 26 commits into
mainfrom
release/improve-builds
Open

jaydrogers wants to merge 26 commits into
mainfrom
release/improve-builds

Conversation

@jaydrogers

@jaydrogers jaydrogers commented Oct 29, 2026 •

Copy link
Copy Markdown
Member

👨‍🔬 How to test

You can test this image using our serversideup/php-dev repository, which automatically builds on push to this PR.

serversideup/php-dev:740-*

View the available testing images →

🌎 Docs Preview


🤩 What's new

PHP security releases reach you within about an hour (#739, #742)

During the last critical PHP release (#721), we waited hours for Docker Hub's php images, then PECL went down. We now compile PHP ourselves with the same Dockerfiles as the official images, so neither one can hold up a release. A new hourly check starts a build as soon as php.net lists a patch, on any day of the week.

From php.net to your image
Before php.net → wait ~4 hours for Docker Hub's php images → PECL → wait for our next release or Tuesday rebuild
After php.net → about an hour later, we compile PHP and publish

Every build also starts from current Debian and Alpine packages, so OS security fixes reach your image on the weekly rebuild (Tuesday 08:00 UTC). PHP 8.1 benefits most: its official images haven't been rebuilt since it reached end of life.

Verify that an image came from us (#742)

Every image is now signed with cosign and ships with an SBOM (every package inside it) and build provenance (how and where it was built). Check an image before you run it:

cosign verify serversideup/php:8.5-cli \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com \
  --certificate-identity-regexp '^https://github\.com/serversideup/docker-php/\.github/workflows/service_publish-images\.yml@refs/(heads/main|tags/v.+)$'

Images published before 5.1 have provenance but no signature or SBOM. See Verifying images.

Every image is scanned for vulnerabilities (#742)

After every production build, Grype scans each published image. The results are on each run's summary page. You can see the known vulnerabilities in any image without running a scanner yourself. See Vulnerability scanning.

PHP 8.6 release candidates (#739)

Test your app on PHP 8.6 before it ships. Every rebuild uses the newest release candidate on php.net, so a new RC arrives with the next weekly rebuild. These tags are for testing only.

serversideup/php:8.6-rc-fpm-nginx

⬆️ Upgrading

Nothing to change. Every existing tag is still published and the images behave the same. Two things you may notice:

  • php -v now says Built by Server Side Up instead of Built by https://github.com/docker-library/php
  • install-php-extensions is upgraded from 2.12.0 to 2.12.6

🐛 Bug fixes

  • docker-php-serversideup-download printed every shell option to stdout before the file when you didn't give it an output file (Compile PHP from source, drop PECL, and monitor dependencies with Renovate #739)
  • FrankenPHP exited at start-up, logging no error, when CADDY_AUTO_HTTPS was disable_redirects, disable_certs, or ignore_loaded_certs and SSL_MODE was mixed or full.
  • Fixed docker-php-serversideup-set-id failing when the requested UID is taken. If another user in the image already had the UID you passed, the script moved the wrong user and the build failed with "UID already in use". It now moves the other user or group to 99<id> and gives yours the ID you asked for.

🏗️ For contributors

jaydrogers and others added 10 commits October 29, 2026 08:00
`set -oe` without an option name makes /bin/sh print every shell option to stdout. Anything reading a helper's output got that dump first, such as the watcher URL lookup and the php.net checksum lookup. Use `set -e` (and `set -eu` in the s6 installer).

Thanks to @tomschlick for spotting this in #726.

Co-authored-by: Tom Schlick <tom@schlick.email>
Move each version that ships in an image (s6-overlay, php-fpm-healthcheck, the extension installer, FrankenPHP, Go, watcher, phpredis) into a `dependencies` block in php-versions-base-config.yml. CI and dev.sh pass the block as build args of the same name, and the Dockerfiles declare them without defaults so a missing pin fails the build.

Build redis from its GitHub source, with its liblzf submodule fetched separately, so no default build step depends on PECL. Pin watcher instead of downloading the latest release.
Stop waiting for Docker Hub's php images. A new build-php-base phase runs prepare-php-base.sh, which takes docker-library/php at a pinned commit, sets the PHP version, URL, and php.net SHA256, and removes `pecl update-channels`. Everything else matches the official images. Each base compiles once without the build cache, so OS security fixes ship on the next run, and is saved to the Depot Registry. The variations build on it through BASE_IMAGE.

get-php-versions.sh no longer checks Docker Hub, and a pinned patch_versions now replaces php.net's. Release candidates such as 8.6-rc build from php.net's release-candidates feed, and php_base_overrides lets a minor version change a variation's upstream variant. PHP 8.1 builds from the last docker-library commit that had it.
The compiled PHP bases install current Debian and Alpine packages, so they already ship the patched libbrotli for CVE-2026-111497. FrankenPHP's Bookworm Brotli build stays, because cbrotli needs libbrotli 1.1 or newer.
Replace Dependabot and get-nginx-versions.sh with Renovate. It reads the `# renovate:` comments in the base config and the lint workflow, checks each OS's NGINX package on nginx.org, groups GitHub Actions monthly, and merges the weekly docker-library/php bump once every check passes. Every other pin waits for a manual merge.
A base job whose runner dropped reports cancelled, not failure, so builds still ran and failed on a base image that was never saved. Build only when the base phase succeeded or was skipped (fork PRs).
…lpine 3.23 and 3.24, Bookworm, and Trixie from the newest release candidate php.net lists. FrankenPHP uses the cli base, since docker-library builds every 8.6 image with ZTS. Upgrade install-php-extensions to 2.12.6 for its PHP 8.6 support.

phpredis 6.3.0 does not compile on PHP 8.6, so 8.6 builds phpredis at 810984b, the last develop commit before an added build option that install-php-extensions answers out of order."
…ION with FRANKENPHP_VERSION for synchronized updates
@cloudflare-workers-and-pages

cloudflare-workers-and-pages Bot commented Oct 29, 2026 •

Copy link
Copy Markdown

Deploying serversideup-php with  Cloudflare Pages  Cloudflare Pages

Latest commit: e1cfbf7
Status: ✅  Deploy successful!
Preview URL: https://e515b7ad.serversideup-php.pages.dev
Branch Preview URL: https://release-improve-builds.serversideup-php.pages.dev

View logs

@github-actions

github-actions Bot commented Oct 29, 2026 •

Copy link
Copy Markdown
Contributor

Images for PR #740

Build Test Publish
✅ 97 of 97 images built ✅ Every image passed on amd64 and arm64 ✅ Published to serversideup/php-dev

Try it:

docker run --rm -v "$PWD:/var/www/html" -p 8080:8080 serversideup/php-dev:740-8.5-fpm-nginx

Every image is on Docker Hub as serversideup/php-dev:740-<php>-<variation>-<os>. Browse all tags or view the run.

All images with sizes

Sizes are compressed, per architecture.

Variation PHP Base OS amd64 arm64 Image
cli 8.6-rc alpine3.23 53.9 MB 52.6 MB serversideup/php-dev:740-8.6-rc-cli-alpine3.23
cli 8.6-rc alpine3.24 53.9 MB 52.7 MB serversideup/php-dev:740-8.6-rc-cli-alpine3.24
cli 8.6-rc bookworm 197.2 MB 188.4 MB serversideup/php-dev:740-8.6-rc-cli-bookworm
cli 8.6-rc trixie 196.4 MB 186.9 MB serversideup/php-dev:740-8.6-rc-cli-trixie
cli 8.5.12 alpine3.23 48.7 MB 48.1 MB serversideup/php-dev:740-8.5.12-cli-alpine3.23
cli 8.5.12 alpine3.24 48.7 MB 48.2 MB serversideup/php-dev:740-8.5.12-cli-alpine3.24
cli 8.5.12 bookworm 198.2 MB 189.7 MB serversideup/php-dev:740-8.5.12-cli-bookworm
cli 8.5.12 trixie 197.5 MB 188.3 MB serversideup/php-dev:740-8.5.12-cli-trixie
cli 8.4.27 alpine3.23 45.4 MB 45.1 MB serversideup/php-dev:740-8.4.27-cli-alpine3.23
cli 8.4.27 alpine3.24 45.5 MB 45.2 MB serversideup/php-dev:740-8.4.27-cli-alpine3.24
cli 8.4.27 bookworm 194.1 MB 185.9 MB serversideup/php-dev:740-8.4.27-cli-bookworm
cli 8.4.27 trixie 193.5 MB 184.5 MB serversideup/php-dev:740-8.4.27-cli-trixie
cli 8.3.36 alpine3.23 41.4 MB 41.4 MB serversideup/php-dev:740-8.3.36-cli-alpine3.23
cli 8.3.36 alpine3.24 41.4 MB 41.4 MB serversideup/php-dev:740-8.3.36-cli-alpine3.24
cli 8.3.36 bookworm 189.1 MB 181.3 MB serversideup/php-dev:740-8.3.36-cli-bookworm
cli 8.3.36 trixie 188.4 MB 179.9 MB serversideup/php-dev:740-8.3.36-cli-trixie
cli 8.2.35 alpine3.23 40.5 MB 40.6 MB serversideup/php-dev:740-8.2.35-cli-alpine3.23
cli 8.2.35 alpine3.24 40.6 MB 40.6 MB serversideup/php-dev:740-8.2.35-cli-alpine3.24
cli 8.2.35 bookworm 188.2 MB 180.4 MB serversideup/php-dev:740-8.2.35-cli-bookworm
cli 8.2.35 trixie 187.5 MB 179.0 MB serversideup/php-dev:740-8.2.35-cli-trixie
cli 8.1.34 alpine3.22 39.5 MB 39.6 MB serversideup/php-dev:740-8.1.34-cli-alpine3.22
cli 8.1.34 bookworm 187.3 MB 179.5 MB serversideup/php-dev:740-8.1.34-cli-bookworm
cli 8.1.34 trixie 186.6 MB 178.0 MB serversideup/php-dev:740-8.1.34-cli-trixie
fpm 8.6-rc alpine3.23 42.3 MB 41.8 MB serversideup/php-dev:740-8.6-rc-fpm-alpine3.23
fpm 8.6-rc alpine3.24 42.3 MB 41.9 MB serversideup/php-dev:740-8.6-rc-fpm-alpine3.24
fpm 8.6-rc bookworm 185.7 MB 177.5 MB serversideup/php-dev:740-8.6-rc-fpm-bookworm
fpm 8.6-rc trixie 185.0 MB 176.1 MB serversideup/php-dev:740-8.6-rc-fpm-trixie
fpm 8.5.12 alpine3.23 42.5 MB 42.2 MB serversideup/php-dev:740-8.5.12-fpm-alpine3.23
fpm 8.5.12 alpine3.24 42.6 MB 42.3 MB serversideup/php-dev:740-8.5.12-fpm-alpine3.24
fpm 8.5.12 bookworm 186.0 MB 178.0 MB serversideup/php-dev:740-8.5.12-fpm-bookworm
fpm 8.5.12 trixie 185.4 MB 176.5 MB serversideup/php-dev:740-8.5.12-fpm-trixie
fpm 8.4.27 alpine3.23 40.3 MB 40.1 MB serversideup/php-dev:740-8.4.27-fpm-alpine3.23
fpm 8.4.27 alpine3.24 40.3 MB 40.1 MB serversideup/php-dev:740-8.4.27-fpm-alpine3.24
fpm 8.4.27 bookworm 183.8 MB 175.8 MB serversideup/php-dev:740-8.4.27-fpm-bookworm
fpm 8.4.27 trixie 183.1 MB 174.4 MB serversideup/php-dev:740-8.4.27-fpm-trixie
fpm 8.3.36 alpine3.23 37.1 MB 37.2 MB serversideup/php-dev:740-8.3.36-fpm-alpine3.23
fpm 8.3.36 alpine3.24 37.1 MB 37.3 MB serversideup/php-dev:740-8.3.36-fpm-alpine3.24
fpm 8.3.36 bookworm 180.5 MB 173.0 MB serversideup/php-dev:740-8.3.36-fpm-bookworm
fpm 8.3.36 trixie 179.9 MB 171.6 MB serversideup/php-dev:740-8.3.36-fpm-trixie
fpm 8.2.35 alpine3.23 36.3 MB 36.5 MB serversideup/php-dev:740-8.2.35-fpm-alpine3.23
fpm 8.2.35 alpine3.24 36.4 MB 36.6 MB serversideup/php-dev:740-8.2.35-fpm-alpine3.24
fpm 8.2.35 bookworm 179.8 MB 172.3 MB serversideup/php-dev:740-8.2.35-fpm-bookworm
fpm 8.2.35 trixie 179.2 MB 170.9 MB serversideup/php-dev:740-8.2.35-fpm-trixie
fpm 8.1.34 alpine3.22 35.4 MB 35.7 MB serversideup/php-dev:740-8.1.34-fpm-alpine3.22
fpm 8.1.34 bookworm 179.2 MB 171.7 MB serversideup/php-dev:740-8.1.34-fpm-bookworm
fpm 8.1.34 trixie 178.5 MB 170.2 MB serversideup/php-dev:740-8.1.34-fpm-trixie
fpm-apache 8.6-rc bookworm 192.0 MB 184.3 MB serversideup/php-dev:740-8.6-rc-fpm-apache-bookworm
fpm-apache 8.6-rc trixie 191.4 MB 183.0 MB serversideup/php-dev:740-8.6-rc-fpm-apache-trixie
fpm-apache 8.5.12 bookworm 192.3 MB 184.8 MB serversideup/php-dev:740-8.5.12-fpm-apache-bookworm
fpm-apache 8.5.12 trixie 191.8 MB 183.4 MB serversideup/php-dev:740-8.5.12-fpm-apache-trixie
fpm-apache 8.4.27 bookworm 190.1 MB 182.7 MB serversideup/php-dev:740-8.4.27-fpm-apache-bookworm
fpm-apache 8.4.27 trixie 189.5 MB 181.3 MB serversideup/php-dev:740-8.4.27-fpm-apache-trixie
fpm-apache 8.3.36 bookworm 186.8 MB 179.8 MB serversideup/php-dev:740-8.3.36-fpm-apache-bookworm
fpm-apache 8.3.36 trixie 186.3 MB 178.5 MB serversideup/php-dev:740-8.3.36-fpm-apache-trixie
fpm-apache 8.2.35 bookworm 186.1 MB 179.1 MB serversideup/php-dev:740-8.2.35-fpm-apache-bookworm
fpm-apache 8.2.35 trixie 185.6 MB 177.8 MB serversideup/php-dev:740-8.2.35-fpm-apache-trixie
fpm-apache 8.1.34 bookworm 185.5 MB 178.5 MB serversideup/php-dev:740-8.1.34-fpm-apache-bookworm
fpm-apache 8.1.34 trixie 184.9 MB 177.1 MB serversideup/php-dev:740-8.1.34-fpm-apache-trixie
fpm-nginx 8.6-rc alpine3.23 48.3 MB 48.4 MB serversideup/php-dev:740-8.6-rc-fpm-nginx-alpine3.23
fpm-nginx 8.6-rc alpine3.24 49.8 MB 49.8 MB serversideup/php-dev:740-8.6-rc-fpm-nginx-alpine3.24
fpm-nginx 8.6-rc bookworm 193.4 MB 185.7 MB serversideup/php-dev:740-8.6-rc-fpm-nginx-bookworm
fpm-nginx 8.6-rc trixie 199.8 MB 191.1 MB serversideup/php-dev:740-8.6-rc-fpm-nginx-trixie
fpm-nginx 8.5.12 alpine3.23 48.6 MB 48.7 MB serversideup/php-dev:740-8.5.12-fpm-nginx-alpine3.23
fpm-nginx 8.5.12 alpine3.24 50.1 MB 50.2 MB serversideup/php-dev:740-8.5.12-fpm-nginx-alpine3.24
fpm-nginx 8.5.12 bookworm 193.8 MB 186.2 MB serversideup/php-dev:740-8.5.12-fpm-nginx-bookworm
fpm-nginx 8.5.12 trixie 200.2 MB 191.5 MB serversideup/php-dev:740-8.5.12-fpm-nginx-trixie
fpm-nginx 8.4.27 alpine3.23 46.4 MB 46.6 MB serversideup/php-dev:740-8.4.27-fpm-nginx-alpine3.23
fpm-nginx 8.4.27 alpine3.24 47.8 MB 48.0 MB serversideup/php-dev:740-8.4.27-fpm-nginx-alpine3.24
fpm-nginx 8.4.27 bookworm 191.5 MB 184.0 MB serversideup/php-dev:740-8.4.27-fpm-nginx-bookworm
fpm-nginx 8.4.27 trixie 197.9 MB 189.4 MB serversideup/php-dev:740-8.4.27-fpm-nginx-trixie
fpm-nginx 8.3.36 alpine3.23 43.1 MB 43.8 MB serversideup/php-dev:740-8.3.36-fpm-nginx-alpine3.23
fpm-nginx 8.3.36 alpine3.24 44.6 MB 45.2 MB serversideup/php-dev:740-8.3.36-fpm-nginx-alpine3.24
fpm-nginx 8.3.36 bookworm 188.3 MB 181.2 MB serversideup/php-dev:740-8.3.36-fpm-nginx-bookworm
fpm-nginx 8.3.36 trixie 194.7 MB 186.6 MB serversideup/php-dev:740-8.3.36-fpm-nginx-trixie
fpm-nginx 8.2.35 alpine3.23 42.4 MB 43.1 MB serversideup/php-dev:740-8.2.35-fpm-nginx-alpine3.23
fpm-nginx 8.2.35 alpine3.24 43.9 MB 44.5 MB serversideup/php-dev:740-8.2.35-fpm-nginx-alpine3.24
fpm-nginx 8.2.35 bookworm 187.6 MB 180.5 MB serversideup/php-dev:740-8.2.35-fpm-nginx-bookworm
fpm-nginx 8.2.35 trixie 194.0 MB 185.9 MB serversideup/php-dev:740-8.2.35-fpm-nginx-trixie
fpm-nginx 8.1.34 alpine3.22 41.5 MB 42.2 MB serversideup/php-dev:740-8.1.34-fpm-nginx-alpine3.22
fpm-nginx 8.1.34 bookworm 187.0 MB 179.9 MB serversideup/php-dev:740-8.1.34-fpm-nginx-bookworm
fpm-nginx 8.1.34 trixie 193.3 MB 185.2 MB serversideup/php-dev:740-8.1.34-fpm-nginx-trixie
frankenphp 8.6-rc alpine3.23 76.6 MB 73.3 MB serversideup/php-dev:740-8.6-rc-frankenphp-alpine3.23
frankenphp 8.6-rc alpine3.24 76.6 MB 73.3 MB serversideup/php-dev:740-8.6-rc-frankenphp-alpine3.24
frankenphp 8.6-rc bookworm 220.2 MB 209.3 MB serversideup/php-dev:740-8.6-rc-frankenphp-bookworm
frankenphp 8.6-rc trixie 218.1 MB 206.5 MB serversideup/php-dev:740-8.6-rc-frankenphp-trixie
frankenphp 8.5.12 alpine3.23 77.9 MB 74.9 MB serversideup/php-dev:740-8.5.12-frankenphp-alpine3.23
frankenphp 8.5.12 alpine3.24 77.9 MB 74.9 MB serversideup/php-dev:740-8.5.12-frankenphp-alpine3.24
frankenphp 8.5.12 bookworm 221.5 MB 211.0 MB serversideup/php-dev:740-8.5.12-frankenphp-bookworm
frankenphp 8.5.12 trixie 219.4 MB 208.2 MB serversideup/php-dev:740-8.5.12-frankenphp-trixie
frankenphp 8.4.27 alpine3.23 73.6 MB 71.0 MB serversideup/php-dev:740-8.4.27-frankenphp-alpine3.23
frankenphp 8.4.27 alpine3.24 73.6 MB 71.1 MB serversideup/php-dev:740-8.4.27-frankenphp-alpine3.24
frankenphp 8.4.27 bookworm 217.3 MB 207.2 MB serversideup/php-dev:740-8.4.27-frankenphp-bookworm
frankenphp 8.4.27 trixie 215.2 MB 204.4 MB serversideup/php-dev:740-8.4.27-frankenphp-trixie
frankenphp 8.3.36 alpine3.23 68.6 MB 66.4 MB serversideup/php-dev:740-8.3.36-frankenphp-alpine3.23
frankenphp 8.3.36 alpine3.24 68.6 MB 66.5 MB serversideup/php-dev:740-8.3.36-frankenphp-alpine3.24
frankenphp 8.3.36 bookworm 212.3 MB 202.5 MB serversideup/php-dev:740-8.3.36-frankenphp-bookworm
frankenphp 8.3.36 trixie 210.3 MB 199.7 MB serversideup/php-dev:740-8.3.36-frankenphp-trixie

Updated on every push to this PR.

…es (#741)

* Split image tests into one file per feature area

Move the checks in scripts/test-image.sh into scripts/tests/image/ with shared
helpers in lib.sh and PHP fixtures as real files. Every test runs even after
one fails, and TEST_ONLY runs a single area. No checks were added or changed.

* Test Laravel automations, startup scripts, set-id, and SSL modes

Add laravel-automations.sh (a stand-in artisan records each command),
entrypoint.sh, permissions.sh, and SSL mixed mode and HTTPS redirect tests.
requires now also skips a single test, and build_image builds a test image
from the one under test.

* Test trusted proxies, PHP-FPM pool variables, and shutdown

Add trusted-proxy.sh, fpm.sh, and lifecycle.sh (replacing healthcheck.sh),
which also checks that docker stop finishes before Docker kills the
container. The s6 images skip that check, since they wait to be killed on
purpose for zero-downtime deployments (#647). Add a skip helper.
…#742)

* Split image tests into one file per feature area

Move the checks in scripts/test-image.sh into scripts/tests/image/ with shared
helpers in lib.sh and PHP fixtures as real files. Every test runs even after
one fails, and TEST_ONLY runs a single area. No checks were added or changed.

* Test Laravel automations, startup scripts, set-id, and SSL modes

Add laravel-automations.sh (a stand-in artisan records each command),
entrypoint.sh, permissions.sh, and SSL mixed mode and HTTPS redirect tests.
requires now also skips a single test, and build_image builds a test image
from the one under test.

* Test trusted proxies, PHP-FPM pool variables, and shutdown

Add trusted-proxy.sh, fpm.sh, and lifecycle.sh (replacing healthcheck.sh),
which also checks that docker stop finishes before Docker kills the
container. The s6 images skip that check, since they wait to be killed on
purpose for zero-downtime deployments (#647). Add a skip helper.

* Add release watcher, image signing, and public vulnerability scanning

* Simplifed scanning
@jaydrogers jaydrogers changed the title Release 5.1: Build from source, PHP 8.6-rc, and more Release 5.1: PHP patches within the hour, signed images, PHP 8.6-rc, and more Oct 30, 2026
@jaydrogers
jaydrogers marked this pull request as ready for review October 30, 2026 22:01
…edirects, disable_certs, or ignore_loaded_certs with SSL_MODE mixed or full
…has the requested UID

The script moved the target user to 99<uid> instead of the user that held
the UID, so the final usermod failed with "UID already in use". It now
moves the conflicting user and group, and skips the move when the ID
already belongs to the target.
…orers

Env vars and helper commands now live in docs/content/data/*.yml and render
through EnvVarExplorer and CommandExplorer. The raw markdown and llms.txt
output expand them, so agents get the same reference.
check-env-var-docs.sh and check-command-docs.sh fail when env-vars.yml or
commands.yml drift from src/. scripts/lint.sh runs every check CI runs, so
contributors can run them locally, and service_lint.yml calls it per job.
action_lint-docs.yml runs the doc checks on pull requests that only change
docs, which the image workflow skips.

AGENTS.md and docs/AGENTS.md are rewritten around the rules that are easy
to break, and AGENTS.md gains a section on PHP versions and releases.
Shorter pages that lead with what the reader needs, with facts checked
against src/. Corrects several old claims: where NGINX comes from, fpm
having S6 Overlay, .ini load order, a custom NGINX example that stopped
the server, and the FrankenPHP SERVER_NAME variable.

Migrating from the official images moves into getting started and covers
the real steps. The upgrade guide moves to its own section, the changelog
points to GitHub releases, and About folds into Getting help.
Adds a Running workers page that every worker guide builds on: the stop
signal, the health check, and running automations on one service only.
The Laravel health-check guide moves here from the advanced guides.

Fixes examples that didn't work: Nightwatch across containers, the
Traefik Host() rule in Reverb, and the claim that failing containers
restart. WordPress gets a working Compose file with MariaDB.
Trusted proxies and performance tuning move here from the advanced guides,
and a new Health checks page covers the built-in check in each variation.
Development to production folds into Packaging your app, which now shows a
multi-stage build, .dockerignore, and Vite build args.

Fixes the FrankenPHP SSL Compose example, stops recommending trusting
X-Forwarded-For in Laravel, and adds PHP-FPM worker sizing that matches
the image defaults.
The advanced guides section is gone. S6 Overlay and file permissions move
under Customizing the image. The upgrade guide gets its own section with
one page per major version. Verifying images, vulnerability scanning, and
a new How images are built page form a Security section.

Common issues grows from two entries to eight, and the start-up scripts
page now covers run order, set -e, and SERVERSIDEUP_DEFAULT_COMMAND.
Adds Upgrading and Security to the navigation and drops Advanced Guides.
Every removed or moved URL redirects to its new page, and SECURITY.md
links point to the new paths. A Release Notes link replaces the changelog
page.
Sentence-case headings, a shorter contributing section, and the Unit
variation marked as removed. The Laravel example drops PHP_OPCACHE_ENABLE,
since it mounts code for development.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant