FrankenPHP : déploiement avec Docker Compose !
Introduction
Bienvenue dans ce cours complet dédié à FrankenPHP, le serveur Web tout‑en‑un qui bouscule les pratiques de déploiement PHP. Vous apprendrez :
- Ce qu’est FrankenPHP et comment il se différencie d’un stack Nginx/Apache + PHP‑FPM classique.
- Pourquoi il est bien : performances, simplicité, sécurité.
- Comment l’utiliser localement avec un fichier compose.yml pour exécuter et développer un projet PHP en quelques commandes.
Pré‑requis : bases de Docker, compétences PHP 8+, un terminal et un Docker Desktop.
Qu’est‑ce que FrankenPHP ?
FrankenPHP est un binaire statique qui embarque :
- Le serveur Web Caddy et son fameux gestionnaire TLS automatique.
- PHP (8.3 au moment de l’écriture) compilé directement dans le binaire ; plus besoin de PHP‑FPM.
- Des extensions intégrées (Opcache, GD, intl, pdo, etc.) et la possibilité d’en ajouter.
- Le support HTTP/1.1, HTTP/2, HTTP/3/QUIC, TLS et même un proxy natif pour gérer plusieurs hôtes. 🤩
Concrètement, FrankenPHP contient "Caddy + PHP" dans un seul exécutable. Vous lancez le binaire, il trouve votre index.php
ou votre routeur, et sert immédiatement votre application. 🤗
Pourquoi utiliser FrankenPHP ?
La réponse est très simple. Il faut utiliser FrankenPHP, parce qu'il est rapide, simple, sûr et moderne. 😎
- Rapide : moins de processus, latence réduite.
- Simple : une commande suffit pour le lancer idéal pour Dev → Prod. Avec Docker Compose, c'est simple aussi.
- Sûr : Caddy applique de bonnes pratiques TLS par défaut, headers de sécurité, HTTP/3.
- Moderne : support natif de Symfony Runtime, Laravel Octane, API Platform, etc. 😮
Comment utiliser un compose.yml
en local pour exécuter un projet PHP ?
Préparer le projet
Nous allons utiliser un fichier compose.yml
pour déployer un projet simple dans notre machine locale. Il sera ensuite possible d'adapter ce fichier dans un serveur ou VPS.
monProjet/
|-- public/
|-- index.php
|-- compose.yml
Créer le fichier compose.yml
Dans le fichier compose.yml
, insérer les instructions suivantes :
services:
web:
image: dunglas/frankenphp
container_name: frankenPHP
ports:
- "443:443"
volumes:
- ./:/app
Dans index.php
, insérez du code simple par exemple :
<p>Bonjour !</p>
Lancer le projet
Maintenant, vous pouvez lancer le projet grâce à la commande :
docker compose up
Tapez dans la barre d'adresse localhost:443
.
Le site apparaîtra ! 😎
HTTPS (SSL) en local
FrankenPHP sert votre site sur "https://" en écoutant le port 443.
Pour les domaines internes comme localhost
, la première visite déclenche souvent un avertissement de sécurité. Vous pouvez ignorer l’avertissement.
⚠️ Par contre, n'ignorez pas cet avertissement dans d'autres sites.
