Comment installer, configurer et déployer une application Laravel avec Nginx sur Ubuntu 22.04 (LEMP)
Laravel est un framework PHP open source qui fournit un ensemble d'outils et de fonctionnalités pour créer des applications PHP modernes. Avec un écosystème complet tirant parti de ses fonctionnalités intégrées, la popularité de Laravel a augmenté rapidement au cours des dernières années, de nombreux développeurs l'adoptant comme leur framework de choix pour un processus de développement rationalisé. Dans ce guide, vous allez installer et configurer une nouvelle application Laravel sur un serveur Ubuntu 22.04, en utilisant Composer pour télécharger et gérer les dépendances et Nginx pour servir l'application. Lorsque vous aurez terminé, vous aurez une application de démonstration Laravel fonctionnelle qui puise le contenu d'une base de données MySQL 8.

Prérequis
Afin de réussier tout ce qui est décrit dans ce guide, vous devrez d'abord effectuer les tâches suivantes sur votre serveur Ubuntu 22.04:
- Créer un utilisateur ayant les privilèges sudo
ufw
. Ce qui est peut-etre déjà fait si vous avez un serveur fonctionnel - Installer la combinaison de logiciels LEMP (Linux, NGINX, MySQL, PHP) with MySQL 8.
- Installer Composer. Nous nous servirons de Composer pour installer Laravel et ses dépendences.
Commençons donc.
Etape 1 - Installer les modules PHP
Avant d'installer Laravel, vous devez installer quelques modules PHP requis par le framework. Nous utiliserons apt pour installer les modules php-mbstring, php-xml et php-bcmath. Ces extensions PHP fournissent un soutien supplémentaire pour faire face à l'encodage des caractères, XML aux mathématiques de précision.
Si c'est la première fois que vous utilisez apt dans cette session, vous devez d'abord exécuter la commande de mise à jour pour mettre à jour le cache du gestionnaire de packets:
Vous pouvez dès à présent installer les paquets nécessaires avec la commande suivante:
Votre système est maintenant prêt à exécuter l'installation de Laravel via Composer, mais avant de le faire, vous aurez besoin d'une base de données pour notre application.
Etape 2 - Créer une base de données pour notre application
Pour les besoins de ce guide et l'utilisation de base de Laravel, nous allons créer une application capable d'afficher une liste des endroits auxquels un utilisateur aimerait voyager et une liste des endroits qu'ils ont déjà visités. Cela peut être stocké dans une table places avec un champ pour des emplacements que nous appellerons le nom et un autre champ pour les marquer comme visité ou non visité, que nous appellerons visité. De plus, nous inclurons un champ ID pour identifier de manière unique chaque entrée.
Pour se connecter à la base de données à partir de l'application Laravel, nous créerons un utilisateur MySQL dédié et accorderons à cet utilisateur des privilèges complets sur la base de données travellist.(C'est ainsi que nous appellerons notre base de données)
Au moment d'écrire ces lignes, la bibliothèque MySQL PHP native MySQLND ne prend pas en charge Caching_Sha2_Authentication, la méthode d'authentification par défaut pour MySQL 8. Nous devrons configurer notre utilisateur de base de données avec la méthode d'authentification MySQL_NATIVE_PASSWORD pour pouvoir connecter notre application depuis PHP.
Pour commencer, connectez-vous à la console MySQL en tant qu'utilisateur de la base de données racine avec:
Pour créer une nouvelle base de données, exécutez la commande suivante à partir de votre console MySQL:
Vous pouvez maintenant créer un nouvel utilisateur et leur accorder des privilèges complets dans la base de données personnalisée que vous venez de créer. Dans cet exemple, nous créons un utilisateur nommé travellist_user avec le mot de passe password, bien que vous deviez le modifier en un mot de passe sécurisé de votre choix:
Nous devons maintenant donner à cet utilisateur la permission d'accéder à la base de données travellist :
Cela donnera à l'utilisateur travellist_user tous les privilèges sur la base de données travellist, tout en empêchant cet utilisateur de créer ou de modifier d'autres bases de données sur votre serveur.
Ensuite, quittez le shell MySQL :
Vous pouvez maintenant tester si le nouvel utilisateur dispose des autorisations appropriées en vous connectant à nouveau à la console MySQL, cette fois en utilisant les informations d'identification personnalisées :
Notez l'indicateur -p dans cette commande, qui vous demandera le mot de passe utilisé lors de la création de l'utilisateur travellist_user. Après vous être connecté à la console MySQL, confirmez que vous avez accès à la base de données travellist :
Cela donnera le résultat suivant:
Output
+--------------------+
| Database |
+--------------------+
| information_schema |
| travellist |
+--------------------+
2 rows in set (0.01 sec)
Ensuite, créez une table nommée places dans la base de données travellist. Depuis la console MySQL, exécutez l'instruction suivante :
Maintenant, remplissez la table places avec quelques données d'exemple:
Pour etre sur que les données ont bien été enregistrées dans votre table, exécutez :
Le résultat ressemble à ceci:
+----+-----------+---------+
| id | name | visited |
+----+-----------+---------+
| 1 | Tokyo | 0 |
| 2 | Budapest | 1 |
| 3 | Nairobi | 0 |
| 4 | Berlin | 1 |
| 5 | Lisbon | 1 |
| 6 | Denver | 0 |
| 7 | Moscow | 0 |
| 8 | Oslo | 0 |
| 9 | Rio | 1 |
| 10 | Cincinnati| 0 |
| 11 | Helsinki | 0 |
+----+-----------+---------+
11 rows in set (0.00 sec)
Après avoir confirmé que vous disposez de données valides dans votre table de test, vous pouvez quitter la console MySQL :
Vous êtes maintenant prêt à créer l'application et à la configurer pour vous connecter à la nouvelle base de données.
Étape 3 - Créer une nouvelle application Laravel
Vous allez maintenant créer une nouvelle application Laravel à l'aide de la commande composer create-project. Cette commande Composer est généralement utilisée pour démarrer de nouvelles applications basées sur des frameworks et des systèmes de gestion de contenu existants.
Tout au long de ce guide, nous utiliserons travellist comme exemple d'application, mais vous êtes libre de changer cela en autre chose. L'application travellist affichera une liste d'emplacements extraite d'un serveur MySQL local, destinée à démontrer la configuration de base de Laravel et à confirmer que vous êtes en mesure de vous connecter à la base de données.
Tout d'abord, accédez au répertoire personnel de votre utilisateur :
La commande suivante créera un nouveau répertoire travellist contenant une application Laravel de base avec les paramètres par défaut :
Le résultat sera le suivant:
Creating a "laravel/laravel" project at "./travellist"
Installing laravel/laravel (v9.1.5)
- Installing laravel/laravel (v9.1.5): Extracting archive
Created project in /home/sammy/travellist
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies
. . .
Package manifest generated successfully.
78 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
> @php artisan vendor:publish --tag=laravel-assets --ansi --force
No publishable resources for tag [laravel-assets].
Publishing complete.
> @php artisan key:generate --ansi
Application key set successfully.
. . .
Une fois l'installation terminée, accédez au répertoire de l'application et exécutez la commande artisan de Laravel pour vérifier que tous les composants ont été installés avec succès :
$ php artisan
Le résultat:
Laravel Framework 9.8.1Usage:
command [options] [arguments]
-h, --help Display help for the given command. When no command is given display help for the list command
-q, --quiet Do not output any message
-V, --version Display this application version
--ansi|--no-ansi Force (or disable --no-ansi) ANSI output
-n, --no-interaction Do not ask any interactive question
--env[=ENV] The environment the command should run under
-v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
Le résultat ci-dessus confirme que les fichiers d'application sont en place et que les outils de ligne de commande Laravel fonctionnent comme prévu. Cependant, nous devons encore configurer l'application et la base de données et quelques autres détails.
Étape 4 - Configurer Laravel
Les fichiers de configuration de Laravel sont situés dans un répertoire appelé config, à l'intérieur du répertoire racine de l'application. De plus, lorsque vous installez Laravel avec Composer, il crée un fichier d'environnement. Ce fichier contient des paramètres spécifiques à l'environnement actuel dans lequel l'application s'exécute et prévaut sur les valeurs définies dans les fichiers de configuration normaux situés dans le répertoire config. Chaque installation sur un nouvel environnement nécessite un fichier d'environnement personnalisé pour définir des éléments tels que les paramètres de connexion à la base de données, les options de débogage, l'URL de l'application, entre autres éléments qui peuvent varier en fonction de l'environnement dans lequel l'application s'exécute.
Avertissement : Le fichier de configuration de l'environnement contient des informations sensibles sur votre serveur, notamment les informations d'identification de la base de données et les clés de sécurité. Pour cette raison, vous ne devez jamais partager ce fichier publiquement.
Nous allons maintenant modifier le fichier .env pour personnaliser les options de configuration pour l'environnement d'application actuel.
Ouvrez le fichier .env à l'aide de l'éditeur en ligne de commande de votre choix. Ici, nous allons utiliser nano :
Même s'il existe de nombreuses variables de configuration dans ce fichier, vous n'avez pas besoin de toutes les configurer maintenant. La liste suivante contient un aperçu des variables qui nécessitent une attention immédiate :
- APP_NAME : nom de l'application, utilisé pour les notifications et les messages.
- APP_ENV : environnement d'application actuel.
- APP_KEY : utilisée pour générer des mots de passe et des hashs, cette clé unique est automatiquement créée lors de l'installation de Laravel via Composer, vous n'avez donc pas besoin de la modifier.
- APP_DEBUG : Afficher ou non les informations de débogage côté client.
- APP_URL : URL de base de l'application, utilisée pour générer des liens d'application.
- DB_DATABASE : nom de la base de données.
- DB_USERNAME : nom d'utilisateur pour se connecter à la base de données.
- DB_PASSWORD : mot de passe pour se connecter à la base de données.
Par défaut, ces valeurs sont configurées pour un environnement de développement local qui utilise Homestead, une boîte Vagrant préemballée fournie par Laravel. Nous allons modifier ces valeurs pour refléter les paramètres d'environnement actuels de notre exemple d'application.
Si vous installez Laravel dans un environnement de développement ou de test, vous pouvez laisser l'option APP_DEBUG activée, car cela vous donnera des informations de débogage importantes lors du test de l'application à partir d'un navigateur. La variable APP_ENV doit être définie sur development ou testing dans ce cas.
Si vous installez Laravel dans un environnement de production, vous devez désactiver l'option APP_DEBUG, car elle montre à l'utilisateur final des informations sensibles sur votre application. Dans ce cas, APP_ENV doit être défini sur production.
Le fichier .env suivant configure notre exemple d'application pour le développement :
Remarque : La variable APP_KEY contient une clé unique qui a été générée automatiquement lorsque vous avez installé Laravel via Composer. Vous n'avez pas besoin de modifier cette valeur. Si vous souhaitez générer une nouvelle clé sécurisée, vous pouvez utiliser la commande php artisan key:generate.
APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://domain_or_IP
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=travellist
DB_USERNAME=travellist_user
DB_PASSWORD=password
Ajustez vos variables en connaissance de cause. Une fois les modifications terminées, enregistrez et fermez le fichier pour conserver vos modifications. Si vous utilisez nano, vous pouvez le faire avec CTRL+X, puis Y et Entrée pour confirmer.
Votre application Laravel est maintenant configurée, mais nous devons encore configurer le serveur Web afin de pouvoir y accéder depuis un navigateur. Dans l'étape suivante, nous configurerons Nginx pour servir votre application Laravel.
Step 5 — Configurer le serveur Nginx
Nous avons installé Laravel sur un dossier local du répertoire personnel de votre utilisateur distant, et bien que cela fonctionne bien pour les environnements de développement locaux, ce n'est pas une pratique recommandée pour les serveurs Web ouverts à l'Internet public. Nous allons déplacer le dossier de l'application vers /var/www, qui est l'emplacement habituel des applications Web exécutées sur Nginx.
Tout d'abord, utilisez la commande mv pour déplacer le dossier de l'application avec tout son contenu vers /var/www/travellist :
Nous devons maintenant donner à l'utilisateur du serveur Web un accès en écriture aux dossiers de stockage et de cache, où Laravel stocke les fichiers générés par l'application :
$ sudo chown -R www-data.www-data /var/www/travellist/bootstrap/cache
Les fichiers de notre application sont maintenant en ordre, mais nous devons encore configurer Nginx pour servir le contenu. Pour ce faire, nous allons créer un nouveau fichier de configuration d'hôte virtuel dans /etc/nginx/sites-available :
Le fichier de configuration suivant contient les paramètres recommandés pour les applications Laravel sur Nginx :
server {
listen 80;
server_name server_domain_or_IP;
root /var/www/travellist/public;
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
try_files $uri $uri/ /index.php?$query_string;
}
location = /robots.txt { access_log off; log_not_found off; }
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
deny all;
}
}
Copiez ce contenu dans votre fichier /etc/nginx/sites-available/travellist et, si nécessaire, ajustez les valeurs en surbrillance pour les aligner sur votre propre configuration. Enregistrez et fermez le fichier lorsque vous avez terminé l'édition.
Pour activer le nouveau fichier de configuration de l'hôte virtuel, créez un lien symbolique vers travellist dans sites-enabled :
Remarque : Si vous disposez d'un autre fichier d'hôte virtuel précédemment configuré pour le même server_name utilisé dans l'hôte virtuel travellist, vous devrez peut-être désactiver l'ancienne configuration en supprimant le lien symbolique correspondant dans /etc/nginx/sites-enabled/.
Pour s'assurer que la configuration ne contient aucune erreur de syntaxe, vous pouvez utiliser :
Vous devriez avoir le résultat suivant dans votre console:
nginx: configuration file /etc/nginx/nginx.conf test is successful
Pour appliquer les changements, redémarrer NGINX avec la commande:
Allez maintenant dans votre navigateur et accédez à l'application en utilisant le nom de domaine ou l'adresse IP du serveur, tel que défini par la directive server_name dans votre fichier de configuration :
http://nom_de_domaine_ou_IP
Vous devriez voir la page suivante sous vos yeux:
Cela confirme que votre serveur Nginx est correctement configuré pour servir Laravel. À partir de ce moment, vous pouvez commencer à créer votre application au-dessus du squelette fourni par l'installation par défaut.
Dans l'étape suivante, nous modifierons la route principale de l'application pour rechercher des données dans la base de données à l'aide de la façade DB de Laravel.
Étape 6 - Personnalisation de la page d'accueil
En supposant que vous ayez suivi toutes les étapes de ce guide jusqu'à présent, vous devriez avoir une application Laravel fonctionnelle et une table de base de données nommée places contenant des exemples de données.
Nous allons maintenant modifier la route principale de l'application pour interroger la base de données et renvoyer le contenu dans la vue de l'application.
Ouvrez le fichier de route principal, routes/web.php :
Ce fichier est fourni par défaut avec le contenu suivant :
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
return view('welcome');
});
Les routes sont définies dans ce fichier à l'aide de la méthode statique Route::get, qui reçoit un chemin et une fonction de rappel comme arguments.
Le code suivant remplace la fonction de rappel de la route principale. Il fait 2 requêtes à la base de données en utilisant le flag visited pour filtrer les résultats. Il renvoie les résultats dans une vue nommée travellist, que nous allons créer ensuite. Copiez ce contenu dans votre fichier routes/web.php en remplaçant le code déjà présent :
$visited = DB::select('select * from places where visited = ?', [1]);
$togo = DB::select('select * from places where visited = ?', [0]);
});
Enregistrez et fermez le fichier lorsque vous avez terminé l'édition. Nous allons maintenant créer la vue qui rendra les résultats de la base de données à l'utilisateur. Créez un nouveau fichier de vue dans les ressources/vues :
Le modèle suivant crée deux listes de lieux en fonction des variables visited et togo. Copiez ce contenu dans votre nouveau fichier de vue :
<html>
<head>
<title>Travel List</title>
</head>
<body>
<h1>My Travel Bucket List</h1>
<h2>Places I'd Like to Visit</h2>
<ul>
@foreach ($togo as $newplace)
<li>{{ $newplace->name }}</li>
@endforeach
</ul>
<h2>Places I've Already Been To</h2>
<ul>
@foreach ($visited as $place)
<li>{{ $place->name }}</li>
@endforeach
</ul>
</body>
</html>
Enregistrez et fermez le fichier lorsque vous avez terminé. Allez maintenant dans votre navigateur et rechargez l'application. Vous verrez une page comme celle-ci :
Vous avez maintenant une application Laravel fonctionnelle tirant le contenu d'une base de données MySQL.
Conclusion
Dans ce guide, vous avez configuré une nouvelle application Laravel au-dessus de la combinaison LEMP (Linux, Nginx, MySQL et PHP), exécutée sur un serveur Ubuntu 22.04. Vous avez également personnalisé votre route par défaut pour interroger le contenu de la base de données et afficher les résultats dans une vue personnalisée.
À partir de là, vous pouvez créer de nouvelles routes et vues pour toutes les pages supplémentaires dont votre application a besoin. Consultez la documentation officielle de Laravel pour plus d'informations sur les routes, les vues et la prise en charge de la base de données. Si vous déployez en production, vous devez également consulter la section optimisation pour découvrir différentes manières d'améliorer les performances de votre application.
Category: technology
Tags: guide
Share with others:
Comments
Recent Posts
Recently published articles!
-
Blaise Nduwimana
-
Blaise Nduwimana