Skip to content

Upgrade FrankenPHP to v1.13.1 and skip compression for the Mercure hub - #718

Merged
jaydrogers merged 2 commits into
mainfrom
release/frankenphp-1.13.1
Oct 21, 2026
Merged

jaydrogers merged 2 commits into
mainfrom
release/frankenphp-1.13.1

Conversation

@jaydrogers

@jaydrogers jaydrogers commented Oct 20, 2026 •

Copy link
Copy Markdown
Member

Upgrades the FrankenPHP variation to v1.13.1, which fixes the regressions reported against 1.13.0 (#715). It also stops the Caddyfile from compressing the Mercure hub, matching the fix upstream made in their sample Caddyfile in the same release.

Why

1.13.0 broke several things that our users can run into:

  • Laravel and Symfony apps that use fastcgi_finish_request() over HTTP/2 could crash the process. PHP's shutdown read the request body after the handler had returned (#2694). This is the same path as v5.0.0-beta3 FrankenPHP crashes on HTTP/2 when PHP keeps running after fastcgi_finish_request() #712.
  • Workers declared in the Caddyfile gave up on the first failed boot instead of retrying 6 times as documented (#2704).
  • php-cli passed the wrong $argv, which broke Symfony Console and other tools that read it (#2690).
  • Requests served during a graceful shutdown returned HTTP 500 (#2644).
  • The whole process segfaulted when FrankenPHP restarted an unhealthy thread (#2688).
  • Processes that double-fork lost their grandchildren, which broke the gnupg extension (#2689).

Mercure is no longer compressed

Caddy 2.11.7, which shipped with FrankenPHP 1.13.0, now compresses server-sent events. Our php-app-common block runs encode zstd br gzip on every path. With MERCURE_ENABLED=true, each subscriber held its own compression encoder (a few MiB each with zstd). Compressing private updates next to data an attacker can influence also opens the door to BREACH-style attacks. This PR uses the same matcher as upstream's fix in #2692:

@compressible not path /.well-known/mercure
encode @compressible zstd br gzip

Everything other than the hub is still compressed.

A failed extension install now fails the build

The first CI run on this PR published FrankenPHP images without redis and zip. pecl.php.net returned 504 Gateway Timeout while the build was downloading redis. The last RUN step of the FrankenPHP Dockerfile joined its commands with ;, so the build ignored the failed install and saved the image anyway. The cli, fpm, fpm-apache, and fpm-nginx Dockerfiles already fail on this.

That step now chains its commands with && like the other variations. This bug dates back to 64ed90d (August 2025). The new scripts/test-image.sh extension check is what caught it.

Changes

  • src/variations/frankenphp/Dockerfile: FRANKENPHP_VERSION goes from 1.13.0 to 1.13.1. GOLANG_VERSION stays at 1.27, which matches GO_VERSION in upstream's docker-bake.hcl at the v1.13.1 tag. The final RUN step uses && instead of ;.
  • src/variations/frankenphp/etc/frankenphp/Caddyfile: skip encode for /.well-known/mercure.

How to test

  1. Build the image: scripts/dev.sh --variation frankenphp --version 8.4 --os bookworm
  2. Run scripts/test-image.sh against it.
  3. Confirm docker run --rm serversideup/php:8.4-frankenphp-bookworm frankenphp version reports FrankenPHP v1.13.1.
  4. With MERCURE_ENABLED=true, request /.well-known/mercure with Accept-Encoding: zstd, br, gzip and confirm the response has no Content-Encoding header, while / is still compressed.

Notes for reviewers

CI is the first full build and test of this change. The local build stalled on package downloads and didn't finish.

@github-actions

github-actions Bot commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Images for PR #718

Build Test Publish
✅ 79 of 79 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:718-8.5-fpm-nginx

Every image is on Docker Hub as serversideup/php-dev:718-<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.5.11 alpine3.23 50.6 MB 50.4 MB serversideup/php-dev:718-8.5.11-cli-alpine3.23
cli 8.5.11 alpine3.24 50.6 MB 50.5 MB serversideup/php-dev:718-8.5.11-cli-alpine3.24
cli 8.5.11 bookworm 195.1 MB 187.9 MB serversideup/php-dev:718-8.5.11-cli-bookworm
cli 8.5.11 trixie 192.2 MB 184.1 MB serversideup/php-dev:718-8.5.11-cli-trixie
cli 8.4.26 alpine3.23 47.5 MB 47.6 MB serversideup/php-dev:718-8.4.26-cli-alpine3.23
cli 8.4.26 alpine3.24 47.6 MB 47.6 MB serversideup/php-dev:718-8.4.26-cli-alpine3.24
cli 8.4.26 bookworm 191.2 MB 184.3 MB serversideup/php-dev:718-8.4.26-cli-bookworm
cli 8.4.26 trixie 188.3 MB 180.4 MB serversideup/php-dev:718-8.4.26-cli-trixie
cli 8.3.35 alpine3.23 43.5 MB 44.0 MB serversideup/php-dev:718-8.3.35-cli-alpine3.23
cli 8.3.35 alpine3.24 43.5 MB 44.0 MB serversideup/php-dev:718-8.3.35-cli-alpine3.24
cli 8.3.35 bookworm 186.4 MB 179.8 MB serversideup/php-dev:718-8.3.35-cli-bookworm
cli 8.3.35 trixie 183.5 MB 176.0 MB serversideup/php-dev:718-8.3.35-cli-trixie
cli 8.2.34 alpine3.23 42.7 MB 43.2 MB serversideup/php-dev:718-8.2.34-cli-alpine3.23
cli 8.2.34 alpine3.24 42.7 MB 43.2 MB serversideup/php-dev:718-8.2.34-cli-alpine3.24
cli 8.2.34 bookworm 185.4 MB 178.9 MB serversideup/php-dev:718-8.2.34-cli-bookworm
cli 8.2.34 trixie 182.5 MB 175.1 MB serversideup/php-dev:718-8.2.34-cli-trixie
cli 8.1.34 alpine3.22 42.4 MB 43.0 MB serversideup/php-dev:718-8.1.34-cli-alpine3.22
cli 8.1.34 bookworm 185.4 MB 178.7 MB serversideup/php-dev:718-8.1.34-cli-bookworm
cli 8.1.34 trixie 185.2 MB 178.1 MB serversideup/php-dev:718-8.1.34-cli-trixie
fpm 8.5.11 alpine3.23 44.6 MB 44.8 MB serversideup/php-dev:718-8.5.11-fpm-alpine3.23
fpm 8.5.11 alpine3.24 44.7 MB 44.8 MB serversideup/php-dev:718-8.5.11-fpm-alpine3.24
fpm 8.5.11 bookworm 183.3 MB 176.5 MB serversideup/php-dev:718-8.5.11-fpm-bookworm
fpm 8.5.11 trixie 180.4 MB 172.7 MB serversideup/php-dev:718-8.5.11-fpm-trixie
fpm 8.4.26 alpine3.23 42.5 MB 42.7 MB serversideup/php-dev:718-8.4.26-fpm-alpine3.23
fpm 8.4.26 alpine3.24 42.6 MB 42.8 MB serversideup/php-dev:718-8.4.26-fpm-alpine3.24
fpm 8.4.26 bookworm 181.2 MB 174.5 MB serversideup/php-dev:718-8.4.26-fpm-bookworm
fpm 8.4.26 trixie 178.3 MB 170.7 MB serversideup/php-dev:718-8.4.26-fpm-trixie
fpm 8.3.35 alpine3.23 39.4 MB 40.0 MB serversideup/php-dev:718-8.3.35-fpm-alpine3.23
fpm 8.3.35 alpine3.24 39.4 MB 40.0 MB serversideup/php-dev:718-8.3.35-fpm-alpine3.24
fpm 8.3.35 bookworm 178.1 MB 171.8 MB serversideup/php-dev:718-8.3.35-fpm-bookworm
fpm 8.3.35 trixie 175.2 MB 167.9 MB serversideup/php-dev:718-8.3.35-fpm-trixie
fpm 8.2.34 alpine3.23 38.7 MB 39.3 MB serversideup/php-dev:718-8.2.34-fpm-alpine3.23
fpm 8.2.34 alpine3.24 38.7 MB 39.3 MB serversideup/php-dev:718-8.2.34-fpm-alpine3.24
fpm 8.2.34 bookworm 177.4 MB 171.1 MB serversideup/php-dev:718-8.2.34-fpm-bookworm
fpm 8.2.34 trixie 174.5 MB 167.2 MB serversideup/php-dev:718-8.2.34-fpm-trixie
fpm 8.1.34 alpine3.22 38.5 MB 39.2 MB serversideup/php-dev:718-8.1.34-fpm-alpine3.22
fpm 8.1.34 bookworm 177.6 MB 171.1 MB serversideup/php-dev:718-8.1.34-fpm-bookworm
fpm 8.1.34 trixie 177.4 MB 170.4 MB serversideup/php-dev:718-8.1.34-fpm-trixie
fpm-apache 8.5.11 bookworm 189.7 MB 183.3 MB serversideup/php-dev:718-8.5.11-fpm-apache-bookworm
fpm-apache 8.5.11 trixie 186.9 MB 179.6 MB serversideup/php-dev:718-8.5.11-fpm-apache-trixie
fpm-apache 8.4.26 bookworm 187.5 MB 181.3 MB serversideup/php-dev:718-8.4.26-fpm-apache-bookworm
fpm-apache 8.4.26 trixie 184.7 MB 177.6 MB serversideup/php-dev:718-8.4.26-fpm-apache-trixie
fpm-apache 8.3.35 bookworm 184.4 MB 178.6 MB serversideup/php-dev:718-8.3.35-fpm-apache-bookworm
fpm-apache 8.3.35 trixie 181.6 MB 174.8 MB serversideup/php-dev:718-8.3.35-fpm-apache-trixie
fpm-apache 8.2.34 bookworm 183.7 MB 177.9 MB serversideup/php-dev:718-8.2.34-fpm-apache-bookworm
fpm-apache 8.2.34 trixie 180.9 MB 174.1 MB serversideup/php-dev:718-8.2.34-fpm-apache-trixie
fpm-apache 8.1.34 bookworm 183.9 MB 177.9 MB serversideup/php-dev:718-8.1.34-fpm-apache-bookworm
fpm-apache 8.1.34 trixie 183.8 MB 177.3 MB serversideup/php-dev:718-8.1.34-fpm-apache-trixie
fpm-nginx 8.5.11 alpine3.23 50.7 MB 51.3 MB serversideup/php-dev:718-8.5.11-fpm-nginx-alpine3.23
fpm-nginx 8.5.11 alpine3.24 52.1 MB 52.7 MB serversideup/php-dev:718-8.5.11-fpm-nginx-alpine3.24
fpm-nginx 8.5.11 bookworm 191.1 MB 184.7 MB serversideup/php-dev:718-8.5.11-fpm-nginx-bookworm
fpm-nginx 8.5.11 trixie 195.2 MB 187.7 MB serversideup/php-dev:718-8.5.11-fpm-nginx-trixie
fpm-nginx 8.4.26 alpine3.23 48.6 MB 49.2 MB serversideup/php-dev:718-8.4.26-fpm-nginx-alpine3.23
fpm-nginx 8.4.26 alpine3.24 50.0 MB 50.7 MB serversideup/php-dev:718-8.4.26-fpm-nginx-alpine3.24
fpm-nginx 8.4.26 bookworm 189.0 MB 182.7 MB serversideup/php-dev:718-8.4.26-fpm-nginx-bookworm
fpm-nginx 8.4.26 trixie 193.1 MB 185.6 MB serversideup/php-dev:718-8.4.26-fpm-nginx-trixie
fpm-nginx 8.3.35 alpine3.23 45.4 MB 46.5 MB serversideup/php-dev:718-8.3.35-fpm-nginx-alpine3.23
fpm-nginx 8.3.35 alpine3.24 46.8 MB 47.9 MB serversideup/php-dev:718-8.3.35-fpm-nginx-alpine3.24
fpm-nginx 8.3.35 bookworm 185.9 MB 179.9 MB serversideup/php-dev:718-8.3.35-fpm-nginx-bookworm
fpm-nginx 8.3.35 trixie 190.0 MB 182.9 MB serversideup/php-dev:718-8.3.35-fpm-nginx-trixie
fpm-nginx 8.2.34 alpine3.23 44.7 MB 45.8 MB serversideup/php-dev:718-8.2.34-fpm-nginx-alpine3.23
fpm-nginx 8.2.34 alpine3.24 46.1 MB 47.2 MB serversideup/php-dev:718-8.2.34-fpm-nginx-alpine3.24
fpm-nginx 8.2.34 bookworm 185.2 MB 179.2 MB serversideup/php-dev:718-8.2.34-fpm-nginx-bookworm
fpm-nginx 8.2.34 trixie 189.3 MB 182.2 MB serversideup/php-dev:718-8.2.34-fpm-nginx-trixie
fpm-nginx 8.1.34 alpine3.22 44.6 MB 45.8 MB serversideup/php-dev:718-8.1.34-fpm-nginx-alpine3.22
fpm-nginx 8.1.34 bookworm 186.5 MB 180.3 MB serversideup/php-dev:718-8.1.34-fpm-nginx-bookworm
fpm-nginx 8.1.34 trixie 194.0 MB 187.2 MB serversideup/php-dev:718-8.1.34-fpm-nginx-trixie
frankenphp 8.5.11 alpine3.23 79.5 MB 77.1 MB serversideup/php-dev:718-8.5.11-frankenphp-alpine3.23
frankenphp 8.5.11 alpine3.24 79.5 MB 77.1 MB serversideup/php-dev:718-8.5.11-frankenphp-alpine3.24
frankenphp 8.5.11 bookworm 216.9 MB 207.8 MB serversideup/php-dev:718-8.5.11-frankenphp-bookworm
frankenphp 8.5.11 trixie 214.1 MB 204.1 MB serversideup/php-dev:718-8.5.11-frankenphp-trixie
frankenphp 8.4.26 alpine3.23 75.5 MB 73.4 MB serversideup/php-dev:718-8.4.26-frankenphp-alpine3.23
frankenphp 8.4.26 alpine3.24 75.5 MB 73.4 MB serversideup/php-dev:718-8.4.26-frankenphp-alpine3.24
frankenphp 8.4.26 bookworm 213.0 MB 204.2 MB serversideup/php-dev:718-8.4.26-frankenphp-bookworm
frankenphp 8.4.26 trixie 210.1 MB 200.3 MB serversideup/php-dev:718-8.4.26-frankenphp-trixie
frankenphp 8.3.35 alpine3.23 70.6 MB 68.9 MB serversideup/php-dev:718-8.3.35-frankenphp-alpine3.23
frankenphp 8.3.35 alpine3.24 70.6 MB 69.0 MB serversideup/php-dev:718-8.3.35-frankenphp-alpine3.24
frankenphp 8.3.35 bookworm 208.2 MB 199.7 MB serversideup/php-dev:718-8.3.35-frankenphp-bookworm
frankenphp 8.3.35 trixie 205.3 MB 195.8 MB serversideup/php-dev:718-8.3.35-frankenphp-trixie

Updated on every push to this PR.

@jaydrogers
jaydrogers merged commit 31651b0 into main Oct 21, 2026
131 checks passed
@jaydrogers
jaydrogers deleted the release/frankenphp-1.13.1 branch October 21, 2026 12:04
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