Hostinger

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 na­tif 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.

Frankenphp ssl