PHP avec Nginx
PHP-FPM + Nginx (2 conteneurs)
Objectif
Ce TP vous fait manipuler une stack PHP professionnelle dans Docker, avec :
- PHP 8.4 + PHP-FPM (traitement des scripts PHP)
- Nginx (serveur web statique + reverse proxy)
- Volume partagé pour le code source
- Hot-reload en développement
- Configuration sécurisée (pas de
root, permissions correctes) - Nettoyage propre
Architecture réaliste utilisable en production.
Prérequis
- Docker installé
- Accès à Internet (pull d’images officielles)
Étape 1 — Créer un projet PHP structuré
Créer une arborescence propre avec un fichier PHP de test.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 — Lancer PHP-FPM avec volume partagé
Lancer un conteneur PHP 8.4 FPM, avec le code monté.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 — Lancer Nginx connecté à PHP-FPM
Lancer Nginx dans un autre conteneur, connecté au premier via un réseau Docker.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 4 — Vérifier que tout fonctionne
Accéder à http://localhost:3000/hello.php.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 5 — Modifier le code → changement instantané
PHP-FPM recharge les fichiers à chaque requête → hot reload natif.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 6 — Nettoyer l’environnement proprement
Arrêter et supprimer les deux conteneurs.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 7 — Pour aller plus loin (production réelle)
| Amélioration | Commande / Config |
|---|---|
| Activer OPcache | Ajouter dans docker run : -v $(pwd)/config/php.ini:/usr/local/etc/php/conf.d/custom.ini |
| Gestion des erreurs 404 | Ajouter error_page 404 /404.html; dans Nginx |
| HTTPS avec cert auto | Utiliser nginx:alpine + certbot (hors scope) |
| Docker Compose | Passer à docker-compose.yml pour orchestrer les deux services |
Exemple de php.ini avec OPcache
Vous devez être connecté pour voir le contenu.
Architecture
Hôte (localhost:3000)
↓
Nginx (port 3000)
↓ (FastCGI)
PHP-FPM (port 9000)
↓
/var/www/html/public/*.php