Déployer une application Laravel en production est un moment stressant — surtout si c'est la première fois. La plupart des incidents de mise en ligne ne viennent pas de bugs dans le code, mais d'une configuration serveur incomplète, de permissions incorrectes, d'un .env mal configuré ou de services qui ne démarrent pas automatiquement au redémarrage du serveur. Cette checklist est basée sur l'expérience ObiDevTech accumulée sur des dizaines de déploiements clients au Bénin et en Afrique de l'Ouest.
Phase 1 — Préparation du serveur
- Ubuntu 22.04 LTS (stable, support long terme) — mise à jour complète
apt update && apt upgrade - Nginx dernière version stable — configuration par vhost dans
/etc/nginx/sites-available/ - PHP 8.2+ avec FPM — extensions requises :
mbstring, xml, curl, zip, bcmath, gd, intl, redis, pdo_mysql - MySQL 8.0 ou PostgreSQL 15 — base de données dédiée avec utilisateur aux droits limités (pas root)
- Redis — pour les sessions, les queues et le cache applicatif
- Composer 2 installé globalement
- Node.js + npm (si build des assets sur le serveur) — ou utiliser les assets pré-buildés en CI
Phase 2 — Déploiement du code
- Cloner le dépôt dans
/var/www/votreapp/(jamais dans le home de root) - Créer le fichier
.envde production — jamais committer en Git - Permissions :
storage/etbootstrap/cache/doivent être en écriture pour www-data composer install --no-dev --optimize-autoloaderphp artisan key:generate(si première installation)php artisan migrate --forcephp artisan config:cache && route:cache && view:cache
Phase 3 — SSL et sécurité
- Certificat SSL Let's Encrypt via Certbot — renouvellement automatique
- Nginx configuré pour forcer le HTTPS et rejeter le HTTP
- Headers sécurité dans la config Nginx : HSTS, X-Frame-Options, X-Content-Type-Options
- Désactiver les pages d'erreur Nginx par défaut (elles révèlent la version de Nginx)
- Firewall UFW : autoriser uniquement 22 (SSH), 80 et 443 — bloquer tout le reste
- SSH configuré pour authentification par clé uniquement (désactiver l'authentification par mot de passe)
Phase 4 — Queues et scheduler
- Installer Supervisor :
apt install supervisor - Configurer un worker Laravel dans
/etc/supervisor/conf.d/laravel-worker.conf - Configurer le cron pour le scheduler Laravel :
* * * * * php /var/www/votreapp/artisan schedule:run - Vérifier que les queues traitent bien les jobs avec
php artisan queue:work --verbose
Phase 5 — Monitoring et sauvegardes
- UptimeRobot ou BetterUptime : alerte si le site répond autre chose qu'un 200
- Sentry ou Bugsnag : capture des erreurs Laravel en production (configurer
SENTRY_LARAVEL_DSN) - Sauvegardes automatiques quotidiennes avec
spatie/laravel-backupvers S3 ou rclone - Tester la restauration d'une sauvegarde avant de considérer le déploiement terminé
Conclusion
Chez ObiDevTech, nous partageons cette checklist avec chaque client lors d'un go-live — et nous la complétons ensemble avant de pointer le DNS. Un déploiement sérieux prend du temps, mais il évite les nuits sans sommeil à cause d'une panne post-lancement qui aurait pu être prévenue.