Repository navigation
Release Notes
This release tightens the sample Docker stack, and none of it reaches a project through composer update. Every change arrives when a project reconciles its docker/ files, .dockerignore and env templates from the sample and deploys the rebuilt image. The nginx image and the compose file change together, and neither starts with the other's previous version. A reconciled stack can come up cleanly and still behave differently: with no proxy configured, nginx trusts none.
Breaking changes — see
system/docs/upgrading/2.4.2.mdfor the full detail and the commands to run:
- nginx trusts no proxy by default. Behind a proxy, set
NGINX_TRUSTED_PROXIESto the proxy addresses before deploying, or every client appears as the proxy in logs, login lockout and IP lists, and a TLS-terminating proxy looks like plain HTTP to the app (force_httpsthen refuses every request).- Every compose file a server runs needs the
nginx-initservice, thenginx-runtimevolume and nginx's non-rootuser:and tmpfs settings; the new image refuses to start without the render, and the old image fails on the new compose file.- FPM's
/statusand/pingno longer pass through nginx, and each server needskernel.yama.ptrace_scopeat 1 or higher to silence nginx's start-up warning.
Docker & Sample Stack
- nginx no longer trusts
X-Forwarded-Forfrom every private range: the real-IP trust is rendered at start fromNGINX_TRUSTED_PROXIES(empty trusts no proxy) andNGINX_REAL_IP_HEADER(defaultX-Forwarded-For), so one image serves any proxy topology without a rebuild and a client inside a private range can no longer choose the IP the app logs, locks out and rate-checks; the FPM/statusand/pinglocation is removed so a substituted client IP can never open it :: commit - nginx honors
X-Forwarded-Protoonly from a peer onNGINX_TRUSTED_PROXIES, through a block rendered beside the real-IP trust, so a client that reaches nginx past the edge can no longer makeis_https()return true; neither raw header reaches PHP or the WebSocket server :: commit - Render nginx's runtime config in a one-shot
nginx-initinto a volume that nginx mounts read-only, and have nginx refuse to start on a missing or stale render instead of serving it; nginx also warns at start when the hostkernel.yama.ptrace_scopeis 0 :: commit - Run nginx entirely as uid 101 with the
APP_GROUPgroup from compose, so a group-readable media tree (0750directories,0640files) is served instead of returning 403, and no nginx process runs as root :: commit - Put nginx on a new
frontnetnetwork shared only withphpandws, so it can no longer open connections to Valkey or the database;phpandwsjoin both networks, andcron,cli, Valkey and the databases stay onappnet:: commit - Narrow the
.dockerignoreallowlist from all ofdocker/todocker/php/anddocker/nginx/, dropprivate/and excludepublic/media/, so a build no longer sends instance secrets, env files and uploads to the builder or bakes uploads into the image;cronnow mountsMEDIA_PATHandwsno longer mountsPRIVATE_PATH:: commit - Move nginx's dotfile deny above the
/assets/and/media/locations, where it never matched, so a dotfile under either path is no longer served :: commit - Read the FPM pool and
memory_limitfrom the environment through${VAR:-default}placeholders instead of a build-time render, soPHP_PM_MAX_CHILDREN,PHP_PM_MODEand the newPHP_MEMORY_LIMITandPHP_CLI_MEMORY_LIMITapply on recreate without a rebuild, and the entrypoint refuses to start on an invalid value :: commit - Copy the PHP
conf.d/and FPMfpm.d/files with--chmod=644, so an image built from a checkout made under umask 077 no longer ships an unreadable10-app.inithat PHP skips without a warning, which left upload size,memory_limitandsession.use_strict_modeat PHP defaults :: commit
Code Quality & Tooling
- Widen the line-ending rule in
.gitattributesfrom a list of extensions to every text file (* text=auto eol=lf), so files the list missed, such as Markdown, no longer produce end-of-line changes, and apply it toextras/backend/application/libraries/MY_Image_lib_README.md, which is converted from CRLF to LF :: commit