Déploiement
Déploiement • Chapitre 6 : Déploiement d'une API REST

Déploiement d'une API PHP

Déployez une API PHP moderne (Laravel, Symfony ou PHP natif) avec PHP-FPM et Nginx : autoloader Composer optimisé, mise en cache des routes et exposition sécurisée du dossier public.

🐘
PHP-FPM

FastCGI Process Manager assurant le traitement haute performance des scripts PHP.

📦
Composer Optimisé

Génération de l'autoloader de classe optimisé via --optimize-autoloader.

💾
Mise en Cache

Mise en cache des routes et des configurations pour supprimer le temps de parsing.

📁
Dossier /public

Seul le répertoire public/ doit être accessible par la directive root de Nginx.

laravel-production-deploy.sh
# 1. Récupération et installation des dépendances sans les paquets de dev
$ cd /var/www/mon-api-laravel
$ git pull origin main
$ composer install --no-dev --optimize-autoloader

# 2. Mettre en cache la configuration et les routes pour accélérer l'API
$ php artisan config:cache
$ php artisan route:cache
$ php artisan view:cache

# 3. Exécuter les migrations de base de données en mode forcé pour la production
$ php artisan migrate --force

# 4. Ajuster les permissions pour que PHP-FPM puisse écrire dans storage/
$ sudo chown -R www-data:www-data storage bootstrap/cache
$ sudo chmod -R 775 storage bootstrap/cache

Guide Approfondi & Architecture Système

1. Comment Nginx et PHP-FPM collaborent

Contrairement à Node.js qui intègre son propre serveur HTTP, PHP nécessite un tandem :

Nginx reçoit la requête HTTP. Voyant qu'il s'agit d'un script .php, il ne l'exécute pas lui-même : il la transmet via un socket Unix rapide (ex. /run/php/php8.2-fpm.sock) au processus PHP-FPM. PHP-FPM compile, exécute le script, et renvoie le HTML ou JSON à Nginx, qui l'expédie au visiteur.

2. Le Piège de Sécurité : La Racine Web (DocumentRoot)

Dans un projet PHP ou Laravel, la racine du projet contient le fichier .env et tout votre code métier.
Règle absolue : La directive root de votre serveur Nginx doit TOUJOURS pointer vers /var/www/mon-projet/public et JAMAIS vers la racine /var/www/mon-projet ! Si vous pointez vers la racine, les internautes pourront télécharger votre fichier .env en tapant simplement https://mon-api.com/.env !

Tableau Comparatif : Déploiement API Node.js vs API PHP (Laravel)

CritèreAPI Node.js (Express)API PHP (Laravel / PHP-FPM)
Serveur HTTPIntégré dans le code applicatif (app.listen)Délégué à un serveur externe (Nginx + PHP-FPM)
Cycle de vie mémoirePersistant : le serveur garde l'état en RAMÉphémère : le script s'exécute et libère la RAM à chaque requête
Gestionnaire de processusPM2 ou conteneur Docker obligatoireGéré nativement par les pools de workers PHP-FPM
Gestion des dépendancesnpm ci (package-lock.json)composer install --no-dev (composer.lock)