Comment installer et configurer Laravel avec LEMP sur Ubuntu 18.04

introduction

Laravel est un framework PHP open-source qui fournit un ensemble d'outils et de ressources pour créer des applications PHP modernes. Avec uncomplete ecosystem 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 cadre 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 18.04, en utilisantComposer pour télécharger et gérer les dépendances du framework. Une fois l’opération terminée, vous aurez une application de démonstration Laravel fonctionnelle extrayant le contenu d’une base de données MySQL.

Conditions préalables

Afin de compléter ce guide, vous devez d'abord effectuer les tâches suivantes sur votre serveur Ubuntu 18.04:

[[step-1 -—- Installing-required-php-modules]] == Étape 1 - Installation des modules PHP requis

Avant de pouvoir installer Laravel, vous devez installer quelques modules PHP requis par la structure. Nous utiliseronsapt pour installer les modules PHPphp-mbstring,php-xml etphp-bcmath. Ces extensions PHP fournissent un support supplémentaire pour traiter le codage de caractères, XML et les mathématiques de précision.

Si c'est la première fois que vous utilisezapt dans cette session, vous devez d'abord exécuter la commandeupdate pour mettre à jour le cache du gestionnaire de packages:

sudo apt update

Vous pouvez maintenant installer les packages requis avec:

sudo apt install php-mbstring php-xml php-bcmath

Votre système est maintenant prêt à exécuter l’installation de Laravel via Composer, mais vous aurez besoin au préalable d’une base de données pour votre application.

[[step-2 -—- creation-a-database-for-the-application]] == Étape 2 - Création d'une base de données pour l'application

Pour illustrer l’installation et l’utilisation de base de Laravel, nous allons créer un exemple d’applicationtravel list pour afficher une liste des lieux où un utilisateur souhaite se rendre et une liste des lieux qu’il a déjà visités. Cela peut être stocké dans une simple tableplaces avec un champ pour les emplacements que nous appelleronsname et un autre champ pour les marquer commevisited ounot visited, que nous ' ll appellevisited. De plus, nous inclurons un champid pour identifier de manière unique chaque entrée.

Pour vous connecter à la base de données à partir de l'application Laravel, nous allons créer un utilisateur MySQL dédié et accorder à cet utilisateur tous les privilèges sur la base de donnéestravel_list.

Pour commencer, connectez-vous à la console MySQL en tant qu'utilisateur de la base de donnéesroot avec:

sudo mysql

Pour créer une nouvelle base de données, exécutez la commande suivante depuis votre console MySQL:

CREATE DATABASE travel_list;

Vous pouvez maintenant créer un nouvel utilisateur et lui attribuer tous les privilèges sur la base de données personnalisée que vous venez de créer. Dans cet exemple, nous créons un utilisateur nommétravel_user avec le mot de passepassword, mais vous devez le remplacer par un mot de passe sécurisé de votre choix:

GRANT ALL ON travel_list.* TO 'travel_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Cela donnera à l'utilisateurtravel_user tous les privilèges sur la base de donnéestravel_list, 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:

exit

Vous pouvez maintenant tester si le nouvel utilisateur dispose des autorisations appropriées en vous reconnectant à la console MySQL, cette fois en utilisant les informations d'identification de l'utilisateur personnalisé:

mysql -u travel_user -p

Notez l'indicateur-p dans cette commande, qui vous demandera le mot de passe utilisé lors de la création de l'utilisateurtravel_user. Après vous être connecté à la console MySQL, confirmez que vous avez accès à la base de donnéestravel_list:

SHOW DATABASES;

Cela vous donnera la sortie suivante:

Output+--------------------+
| Database           |
+--------------------+
| information_schema |
| travel_list        |
+--------------------+
2 rows in set (0.01 sec)

Ensuite, créez une table nomméeplaces dans la base de donnéestravel_list. À partir de la console MySQL, exécutez l'instruction suivante:

CREATE TABLE travel_list.places (
    id INT AUTO_INCREMENT,
    name VARCHAR(255),
    visited BOOLEAN,
    PRIMARY KEY(id)
);

Maintenant, remplissez la tableplaces avec quelques exemples de données:

INSERT INTO travel_list.places (name, visited)
VALUES ("Tokyo", false),
("Budapest", true),
("Nairobi", false),
("Berlin", true),
("Lisbon", true),
("Denver", false),
("Moscow", false),
("Oslo", false),
("Rio", true),
("Cincinati", false),
("Helsinki", false);

Pour confirmer que les données ont bien été enregistrées dans votre table, exécutez:

SELECT * FROM travel_list.places;

Vous verrez une sortie semblable à celle-ci:

Output+----+-----------+---------+
| 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 | Cincinati |       0 |
| 11 | Helsinki  |       0 |
+----+-----------+---------+
11 rows in set (0.00 sec)

Après avoir vérifié que vous avez des données valides dans votre table de test, vous pouvez quitter la console MySQL:

exit

Vous êtes maintenant prêt à créer l’application et à la configurer pour se connecter à la nouvelle base de données.

[[step-3 -—- creating-a-new-laravel-application]] == Étape 3 - Création d'une nouvelle application Laravel

Vous allez maintenant créer une nouvelle application Laravel en utilisant la commandecomposer create-project. Cette commande Composer est généralement utilisée pour amorcer de nouvelles applications basées sur des infrastructures et des systèmes de gestion de contenu existants.

Tout au long de ce guide, nous utiliseronstravel_list comme exemple d'application, mais vous êtes libre de changer cela en autre chose. L'applicationtravel_list affichera une liste d'emplacements extraits 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, allez dans le répertoire personnel de votre utilisateur:

cd ~

La commande suivante créera un nouveau répertoiretravel_list contenant une application Laravel barebones basée sur les paramètres par défaut:

composer create-project --prefer-dist laravel/laravel travel_list

Vous verrez une sortie semblable à celle-ci:

OutputInstalling laravel/laravel (v5.8.17)
  - Installing laravel/laravel (v5.8.17): Downloading (100%)
Created project in travel_list
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 80 installs, 0 updates, 0 removals
  - Installing symfony/polyfill-ctype (v1.11.0): Downloading (100%)
  - Installing phpoption/phpoption (1.5.0): Downloading (100%)
  - Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)
  - Installing symfony/css-selector (v4.3.2): Downloading (100%)
...

Une fois l'installation terminée, accédez au répertoire de l'application et exécutez la commandeartisan de Laravel pour vérifier que tous les composants ont été installés avec succès:

cd travel_list
php artisan

Vous verrez une sortie semblable à celle-ci:

OutputLaravel Framework 5.8.29

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable 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

(...)

Cette sortie confirme que les fichiers de l'application sont en place et que les outils de ligne de commande Laravel fonctionnent comme prévu. Cependant, nous devons encore configurer l'application pour configurer la base de données et quelques autres détails.

[[step-4 -—- configuring-laravel]] == Étape 4 - Configuration de Laravel

Les fichiers de configuration Laravel se trouvent 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 fichierenvironment file. Ce fichier contient des paramètres spécifiques à l'environnement actuel dans lequel l'application est en cours d'exécution et prévaudront sur les valeurs définies dans les fichiers de configuration normaux situés dans le répertoireconfig. 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 pouvant varier en fonction de l’environnement de l’application.

[.warning] #Warning: 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 de l'environnement d'application actuel.

Ouvrez le fichier.env en utilisant l'éditeur de ligne de commande de votre choix. Ici, nous utiliseronsnano:

nano .env

Même s'il y a beaucoup de 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 sels et des hachages, cette clé unique est créée automatiquement lors de l'installation de Laravel via Composer, vous n'avez donc pas besoin de la modifier.

  • APP_DEBUG: s'il faut ou non afficher 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 utiliseHomestead, 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 environnementdevelopment outesting, vous pouvez laisser l'optionAPP_DEBUG activée, car cela vous donnera des informations de débogage importantes lors du test de l'application à partir d'un navigateur. La variableAPP_ENV doit être définie surdevelopment outesting dans ce cas.

Si vous installez Laravel dans un environnementproduction, vous devez désactiver l'optionAPP_DEBUG, car elle montre à l'utilisateur final des informations sensibles sur votre application. Dans ce cas, lesAPP_ENV doivent être définis surproduction.

Le fichier.env suivant configure notre exemple d'application pourdevelopment:

[.note] #Note: La variableAPP_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 commandephp artisan key:generate.
#

/var/www/travel_list/.env

APP_NAME=TravelList
APP_ENV=development
APP_KEY=APPLICATION_UNIQUE_KEY_DONT_COPY
APP_DEBUG=true
APP_URL=http://domain_or_IP

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=travel_list
DB_USERNAME=travel_user
DB_PASSWORD=password

...

Ajustez vos variables en conséquence. Lorsque vous avez terminé, enregistrez et fermez le fichier pour conserver vos modifications. Si vous utiliseznano, vous pouvez le faire avecCTRL+X, puisY etEnter pour confirmer.

Votre application Laravel est maintenant configurée, mais nous avons toujours besoin de configurer le serveur Web pour pouvoir y accéder à partir d'un navigateur. Dans la prochaine étape, nous allons configurer Nginx pour servir votre application Laravel.

[[step-5 -—- setting-up-nginx]] == Étape 5 - Configuration de Nginx

Nous avons installé Laravel sur un dossier local du répertoire de base de votre utilisateur distant. 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 commandemv pour déplacer le dossier de l'application avec tout son contenu vers/var/www/travel_list:

sudo mv ~/travel_list /var/www/travel_list

Nous devons maintenant donner à l'utilisateur du serveur Web un accès en écriture aux dossiersstorage etcache, où Laravel stocke les fichiers générés par l'application:

sudo chown -R www-data.www-data /var/www/travel_list/storage
sudo chown -R www-data.www-data /var/www/travel_list/bootstrap/cache

Les fichiers de l’application sont maintenant en ordre, mais nous devons toujours configurer Nginx pour servir le contenu. Pour ce faire, nous allons créer un nouveau fichier de configuration d'hôte virtuel à/etc/nginx/sites-available:

sudo nano /etc/nginx/sites-available/travel_list

Le fichier de configuration suivant contient les paramètresrecommended pour les applications Laravel sur Nginx:

/etc/nginx/sites-available/travel_list

server {
    listen 80;
    server_name server_domain_or_IP;
    root /var/www/travel_list/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm 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 ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Copiez ce contenu dans votre fichier/etc/nginx/sites-available/travel_list et, si nécessaire, ajustez les valeurs en surbrillance pour qu'elles correspondent à votre propre configuration. Enregistrez et fermez le fichier une fois l’édition terminée.

Pour activer le nouveau fichier de configuration d'hôte virtuel, créez un lien symbolique verstravel_list danssites-enabled:

sudo ln -s /etc/nginx/sites-available/travel_list /etc/nginx/sites-enabled/

[.note] #Note: Si vous avez un autre fichier d'hôte virtuel qui a été précédemment configuré pour les mêmesserver_name que ceux utilisés dans l'hôte virtueltravel_list, vous devrez peut-être désactiver l'ancienne configuration en suppression du lien symbolique correspondant à l'intérieur de/etc/nginx/sites-enabled/.
#

Pour vérifier que la configuration ne contient aucune erreur de syntaxe, vous pouvez utiliser:

sudo nginx -t

Vous devriez voir la sortie comme ceci:

Outputnginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Pour appliquer les modifications, rechargez Nginx avec:

sudo systemctl reload nginx

Maintenant, allez dans votre navigateur et accédez à l’application en utilisant le nom de domaine ou l’adresse IP du serveur, comme défini par la directiveserver_name dans votre fichier de configuration:

http://server_domain_or_IP

Vous verrez une page comme celle-ci:

Laravel splash page

Cela confirme que votre serveur Nginx est correctement configuré pour desservir Laravel. À partir de ce moment, vous pouvez commencer à construire votre application sur le squelette fourni par l'installation par défaut.

À l'étape suivante, nous modifierons la route principale de l'application pour rechercher des données dans la base de données en utilisant la façadeDBde Laravel.

[[step-6 -—- customizing-the-main-page]] == Étape 6 - Personnalisation de la page principale

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éeplaces contenant des exemples de données.

Nous allons maintenant modifier la route principale de l'application pour rechercher la base de données et renvoyer le contenu auxview de l'application.

Ouvrez le fichier d'itinéraire principal,routes/web.php:

nano routes/web.php

Ce fichier est livré par défaut avec le contenu suivant:

routes/web.php

Les routes sont définies dans ce fichier en utilisant la méthode statiqueRoute::get, qui reçoit unpath et uncallback function comme arguments.

Le code suivant remplace la fonction de rappel de la route principale. Il effectue 2 requêtes dans la base de données en utilisant l'indicateurvisited pour filtrer les résultats. Il renvoie les résultats dans une vue nomméetravel_list, que nous allons créer ensuite. Copiez ce contenu dans votre fichierroutes/web.php, en remplaçant le code qui s'y trouve déjà:

routes/web.php

 $visited, 'togo' => $togo ] );
});

Enregistrez et fermez le fichier une fois l’édition terminée. 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 à l'intérieur deresources/views:

nano resources/views/travel_list.blade.php

Le modèle suivant crée deux listes d'emplacements basées sur les variablesvisited ettogo. Copiez ce contenu dans votre nouveau fichier de vue:

resources/views/travel_list/blade.php



    Travel List



    

My Travel Bucket List

Places I'd Like to Visit

    @foreach ($togo as $newplace)
  • {{ $newplace->name }}
  • @endforeach

Places I've Already Been To

    @foreach ($visited as $place)
  • {{ $place->name }}
  • @endforeach

Enregistrez et fermez le fichier lorsque vous avez terminé. Maintenant, allez sur votre navigateur et rechargez l'application. Vous verrez une page comme celle-ci:

Demo Laravel Application

Vous avez maintenant une application Laravel fonctionnelle extrayant le contenu d'une base de données MySQL.

Conclusion

Dans ce tutoriel, vous avez configuré une nouvelle application Laravel sur une pile LEMP (Linux, Nginx, MySQL et PHP), exécutée sur un serveur Ubuntu 18.04. Vous avez également personnalisé votre itinéraire 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 nouveaux itinéraires et vues pour toutes les pages supplémentaires dont votre application a besoin. Consultez la documentation officielle de Laravel pour plus d'informations surroutes,views etdatabase support. Si vous effectuez un déploiement en production, vous devez également vérifier lesoptimization section pour différentes manières d'améliorer les performances de votre application.

Pour améliorer la sécurité, vous devriez envisager d'installer un certificat TLS / SSL sur votre serveur, ce qui lui permettra de diffuser du contenu via HTTPS. Pour cela, vous pouvez suivre notre guide surhow to secure your Nginx installation with Let’s Encrypt on Ubuntu 18.04.