C'est quoi FrankenPHP ?
Créé en 2022 par Kévin Dunglas (créateur d'API Platform), FrankenPHP est un serveur d'application moderne pour PHP, écrit en Go et bâti sur Caddy. Il intègre PHP en mode worker, HTTP/3, support natif de Mercure (SSE) et Vulcain (cache), TLS automatique et early hints. Adopté par Symfony (comme runtime par défaut depuis 7.2), Laravel Octane, WordPress et Sylius, il redéfinit ce qu'on peut attendre d'un PHP en production.
FrankenPHP rend à PHP ce que Node et Go avaient pris : la performance d'un serveur résident, sans renoncer à la simplicité du langage.
Pourquoi utiliser FrankenPHP ?
FrankenPHP ne remplace pas votre code, il remplace votre stack runtime (PHP-FPM + Nginx). Voici six bénéfices concrets.
- Worker mode performant. L'application reste chargée en mémoire entre les requêtes, plus de boot Symfony/Laravel à chaque hit. Gain de 3x à 10x sur les benchmarks.
- HTTP/3 et HTTP/2 natifs. Pas de Nginx à configurer, pas de tuning compliqué. Caddy fait le boulot proprement.
- TLS automatique. Let's Encrypt intégré, renouvellement transparent, OCSP stapling. Production ready en deux lignes de Caddyfile.
- Mercure et Vulcain intégrés. Server-sent events et cache hypermedia hors d'usine, sans dépendances externes.
- Image Docker officielle.
frankenphp:php8.4oufrankenphp:latest. Une seule image pour le web et les workers. - Embeddable. FrankenPHP peut être compilé en binaire statique, distribuable sans dépendances. Idéal pour les outils CLI ou les apps desktop avec PHP embarqué.
FrankenPHP face aux autres approches
FrankenPHP n'est pas le seul à proposer un runtime moderne pour PHP. Voici les arbitrages.
| Critère | FrankenPHP | PHP-FPM + Nginx | RoadRunner |
|---|---|---|---|
| Mode worker | Natif | Non | Natif |
| HTTP/3 | Oui | Via Nginx config | Non |
| TLS automatique | Oui (Caddy) | Manuel | Manuel |
| Mercure / SSE | Intégré | Externe | Externe |
| Configuration | Caddyfile (10 lignes) | Nginx + FPM | Plus dense |
FrankenPHP en pratique
Voici un Dockerfile minimal pour faire tourner Symfony en worker mode avec FrankenPHP.
# Dockerfile
FROM dunglas/frankenphp:1-php8.4 AS base
ENV SERVER_NAME=:80
ENV APP_RUNTIME=Runtime\\FrankenPhpSymfony\\Runtime
ENV FRANKENPHP_CONFIG="worker ./public/index.php"
RUN install-php-extensions \\
intl \\
pdo_pgsql \\
opcache \\
zip
WORKDIR /app
COPY composer.* ./
RUN composer install --no-dev --no-scripts --prefer-dist --optimize-autoloader
COPY . .
RUN composer run-script post-install-cmd
# Pré-chauffage du cache Symfony
RUN php bin/console cache:warmup --env=prod
EXPOSE 80 443 443/udp
CMD ["frankenphp", "run", "--config", "/etc/caddy/Caddyfile"]Pour quels projets ?
FrankenPHP est un excellent choix sur trois familles de cas d'usage.
- API à fort trafic. Back-ends Symfony + API Platform, latence divisée par 5 à 10 vs PHP-FPM, RPS multiplié d'autant.
- E-commerce sous charge. Sylius, Magento 2 ou stack custom. Le worker mode encaisse les pics (soldes, Black Friday) avec moins de serveurs.
- Apps temps réel. Notifications, dashboards live, collaboration via Mercure SSE, le tout sans ajouter Redis Pub/Sub ou serveur Node à côté.
Notre approche chez Koul
Nous déployons FrankenPHP sur l'ensemble de nos projets PHP récents, en remplacement de l'ancien combo Nginx + FPM.
- Configuration standardisée. Caddyfile minimal, variables d'env pour les workers, healthchecks Kubernetes.
- Worker mode systématique. Avec Symfony Runtime ou Laravel Octane, validation perf en pré-prod.
- Monitoring. Métriques exposées en Prometheus, dashboards Grafana, logs centralisés Kibana.
- Migration progressive. Bascule itérative depuis FPM, rollback simple si besoin.
FrankenPHP, c'est PHP qui rattrape vingt ans de retard sur le terrain du serveur applicatif, sans renier sa simplicité.









