Le déploiement
Lorsque vous êtes prêt à déployer votre application Laravel en production, plusieurs étapes importantes vous permettent d'assurer son bon fonctionnement. Cette page vous propose quelques points de départ essentiels pour un déploiement réussi.
Configuration serveur requise
Le cadre d'application Laravel requiert certaines configurations système. Votre serveur web doit disposer de la version minimale de PHP et des extensions suivantes :
- PHP >= 8.2
- Extension Ctype de PHP
- Extension cURL de PHP
- Extension DOM de PHP
- Extension Fileinfo de PHP
- Extension Filter de PHP
- Extension Hash de PHP
- Extension Mbstring de PHP
- Extension OpenSSL de PHP
- Extension PCRE de PHP
- Extension PDO de PHP
- Extension Session de PHP
- Extension Tokenizer de PHP
- Extension XML de PHP
Configuration du serveur
Nginx
Si vous déployez votre application sur un serveur Nginx, vous pouvez utiliser le fichier de configuration suivant comme point de départ. Ce fichier devra probablement être personnalisé en fonction de la configuration de votre serveur. Si vous souhaitez bénéficier d'une assistance pour la gestion de votre serveur, envisagez d'utiliser une plateforme Laravel entièrement gérée comme Laravel Cloud.
Veuillez vous assurer, comme dans la configuration ci-dessous, que votre serveur Web dirige toutes les requêtes vers le fichier `public/index.php` de votre application. Il est fortement déconseillé de déplacer le fichier `index.php` à la racine de votre projet, car cela exposerait de nombreux fichiers de configuration sensibles sur Internet :
- server {
- listen 80;
- listen [::]:80;
- server_name example.com;
- root /srv/example.com/public;
-
- add_header X-Frame-Options "SAMEORIGIN";
- add_header X-Content-Type-Options "nosniff";
-
- index index.php;
-
- charset utf-8;
-
- location / {
- try_files $uri $uri/ /index.php?$query_string;
- }
-
- location = /favicon.ico { access_log off; log_not_found off; }
- location = /robots.txt { access_log off; log_not_found off; }
-
- error_page 404 /index.php;
-
- location ~ ^/index\.php(/|$) {
- fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
- fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
- include fastcgi_params;
- fastcgi_hide_header X-Powered-By;
- }
-
- location ~ /\.(?!well-known).* {
- deny all;
- }
- }
FrankenPHP
FrankenPHP peut également être utilisé pour héberger vos applications Laravel. FrankenPHP est un serveur d'applications PHP moderne écrit en Go. Pour héberger une application Laravel PHP avec FrankenPHP, il vous suffit d'utiliser la commande php-server :
| frankenphp php-server -r public/ |
Pour exploiter pleinement les fonctionnalités avancées de FrankenPHP, telles que l'intégration avec Laravel Octane, HTTP/3, la compression moderne ou la possibilité de créer des applications Laravel sous forme de binaires autonomes, veuillez consulter la documentation Laravel de FrankenPHP.
Permissions des répertoires
Laravel aura besoin d'écrire dans les répertoires bootstrap/cache et storage; vous devez donc vous assurer que le propriétaire du processus du serveur Web dispose des autorisations nécessaires pour écrire dans ces répertoires.
Optimisation
Lors du déploiement de votre application en production, plusieurs fichiers doivent être mis en cache, notamment la configuration, les événements, les routes et les vues. Laravel propose une commande Artisan simple et efficace, `optimize`, qui permet de mettre en cache tous ces fichiers. Cette commande doit généralement être exécutée lors du processus de déploiement de votre application :
| php artisan optimize |
La méthode optimize:clear peut être utilisée pour supprimer tous les fichiers de cache générés par la commande optimize ainsi que toutes les clefs du pilote de cache par défaut :
| php artisan optimize:clear |
Dans la documentation suivante, nous aborderons chacune des commandes d'optimisation granulaires exécutées par la commande optimize.
Configuration du cache
Lors du déploiement de votre application en production, assurez-vous d'exécuter la commande Artisan `config:cache` pendant le processus de déploiement :
| php artisan config:cache |
Cette commande regroupe tous les fichiers de configuration de Laravel dans un seul fichier mis en cache, ce qui réduit considérablement le nombre d'accès au système de fichiers lors du chargement des valeurs de configuration.
Si vous exécutez la commande `config:cache` lors du déploiement, assurez-vous d'appeler la fonction `env` uniquement depuis vos fichiers de configuration. Une fois la configuration mise en cache, le fichier `.env` ne sera plus chargé et tous les appels à la fonction `env` pour les variables `.env` renverront `null`.
Mise en cache des événements
Il est recommandé de mettre en cache les correspondances entre les événements et les écouteurs détectés automatiquement par votre application lors du déploiement. Pour ce faire, exécutez la commande Artisan `event:cache` pendant le déploiement :
| php artisan event:cache |
Mise en cache des routes
Si vous développez une application importante avec de nombreuses routes, assurez-vous d'exécuter la commande Artisan `route:cache` lors du déploiement.
| php artisan route:cache |
Cette commande réduit tous vos enregistrements de routes à un seul appel de méthode dans un fichier mis en cache, améliorant ainsi les performances d'enregistrement des routes lors de l'enregistrement de centaines de routes.
Mise en cache des vues
Lors du déploiement de votre application en production, assurez-vous d'exécuter la commande Artisan `view:cache` pendant le processus de déploiement :
| php artisan view:cache |
Cette commande précompile toutes vos vues Blade afin qu'elles ne soient pas compilées à la demande, ce qui améliore les performances de chaque requête renvoyant une vue.
Rechargement des services
Lors du déploiement sur Laravel Cloud, il n'est pas nécessaire d'utiliser la commande `reload`, car le rechargement propre de tous les services est géré automatiquement.
Après le déploiement d'une nouvelle version de votre application, les services de longue durée, tels que les workers de file d'attente, Laravel Reverb ou Laravel Octane, doivent être rechargés/redémarrés pour prendre en compte le nouveau code. Laravel fournit une commande Artisan unique `reload` qui arrêtera ces services :
| php artisan reload |
Si vous n'utilisez pas Laravel Cloud, vous devez configurer manuellement un moniteur de processus capable de détecter l'arrêt de vos processus rechargeables et de les redémarrer automatiquement.
Mode débogage
L'option de débogage de votre fichier de configuration `config/app.php` détermine la quantité d'informations affichées à l'utilisateur en cas d'erreur. Par défaut, cette option est configurée pour respecter la valeur de la variable d'environnement `APP_DEBUG`, stockée dans le fichier `.env` de votre application.
En environnement de production, cette valeur doit toujours être `false`. Si la variable `APP_DEBUG` est définie sur `true` en production, vous risquez d'exposer des données de configuration sensibles aux utilisateurs finaux de votre application.
Route de vérification d'état
Laravel intègre une route de vérification d'état permettant de surveiller l'état de votre application. En production, cette route peut être utilisée pour signaler l'état de votre application à un système de surveillance de la disponibilité, un équilibreur de charge ou un système d'orchestration tel que Kubernetes.
Par défaut, la route de vérification d'état est accessible à l'adresse `/up` et renvoie une réponse HTTP 200 si l'application a démarré sans exception. Dans le cas contraire, une réponse HTTP 500 est renvoyée. Vous pouvez configurer l'URI de cette route dans le fichier `bootstrap/app` de votre application.
- ->withRouting(
- web: __DIR__.'/../routes/web.php',
- commands: __DIR__.'/../routes/console.php',
- health: '/up',
- health: '/status',
- )
Lorsqu'une requête HTTP est envoyée à cette route, Laravel déclenche également un événement Illuminate\Foundation\Events\DiagnosingHealth, vous permettant d'effectuer des vérifications d'état supplémentaires pour votre application. Dans un écouteur d'événement, vous pouvez vérifier l'état de la base de données ou du cache de votre application. Si vous détectez un problème, vous pouvez simplement lever une exception depuis l'écouteur.
Déploiement avec Laravel Cloud ou Forge
Laravel Cloud
Si vous recherchez une plateforme de déploiement entièrement gérée et à mise à l'échelle automatique optimisée pour Laravel, découvrez Laravel Cloud. Laravel Cloud est une plateforme de déploiement robuste pour Laravel, offrant des ressources de calcul, des bases de données, des caches et un entreposage d'objets gérés.
Lancez votre application Laravel sur le Cloud et appréciez sa simplicité et sa mise à l'échelle. Laravel Cloud a été optimisé par les créateurs de Laravel pour une intégration parfaite avec le cadre d'application, vous permettant ainsi de continuer à développer vos applications Laravel comme vous en avez l'habitude.
Laravel Forge
Si vous préférez gérer vos propres serveurs mais que la configuration des différents services nécessaires au bon fonctionnement d'une application Laravel robuste vous intimide, Laravel Forge est une plateforme de gestion de serveurs VPS dédiée aux applications Laravel.
Laravel Forge permet de créer des serveurs chez différents fournisseurs d'infrastructure tels que DigitalOcean, Linode, AWS, et bien d'autres. De plus, Forge installe et gère tous les outils nécessaires à la création d'applications Laravel robustes, comme Nginx, MySQL, Redis, Memcached, Beanstalk, et bien plus encore.