Installer Laravel sur un serveur Ubuntu / Debian

Je voulais proposer cet article depuis longtemps, ce sera maintenant chose faite. Il me servait en brouillon pour mes propres projets et après de nombreuses modifications pour qu’il soit le plus digeste et compréhensible possible. Je me suis enfin décidé à le publier. Bon rassurez bous, il n’y a ici rien de révolutionnaire, mais je voulais proposer une ressource qui vous permet d’installer facilement un projet fait avec le framework PHP Laravel sur un Linux Ubuntu / Debian. Je vous conseille d’ailleurs avoir un système d’exploitation à jour avant de passer à la suite.

Pour ma part, sur les serveurs web de production, j’utilise le plus souvent Ubuntu LTS, mais libre à vous d’adapter ce tutoriel avec la distribution Linux que vous avez choisi. Je suis pragmatique et je manque souvent de temps pour faire tout ce que je voudrais faire donc je vais au plus simple. C’est pour cela que j’ai fait ce choix, car ça marche et je n’ai jamais rencontré de problème particulier avec lui. Une fois que vous avez un Ubuntu LTS ou autre bien à jour, vous pouvez lancer les commandes suivantes pour vérifier que vous êtes bien à la page :

sudo apt update
sudo apt upgrade

Une fois que c’est fait, selon la version de votre serveur web, il faut avoir une version de PHP récente. Cela dépend des cas, mais si votre Ubuntu / Debian n’est pas sur la dernière version, vous pouvez quand même faire tourner un PHP récent à l’aide de ce tutoriel pour installer PHP 8.3. Attention, dans la suite de cet article, je considère que vous avez une version de PHP récente sur votre serveur web ! J’essaye de voir dans le futur et donc même si cet article à plusieurs années, le reste devrait rester valable, mais il vous faut la version la plus récente de PHP pour utiliser Laravel. Le framework est très suivi et vous pourriez avoir des problèmes si ce n’est pas le cas.

Maintenant, que c’est fait, on peut continuer notre préparation pour installer notre projet Laravel. La prochaine étape est d’installer un système de gestion de bases de données relationnelles (SGBDR) car il y a de fortes chances que vous en ayez besoin. Mon choix s’est porté depuis quelque temps sur MariaDB qui est un fork de MySQL. Les deux sont très connus et fonctionnent presque de la même manière. Pour installer MariaDB, rien de plus simple :

sudo apt install mariadb-server

Une fois que c’est fait, on peut déjà préparer notre base de données pour la suite avec la commande suivante :

sudo mysql -u root

Après la connexion, on peut directement créer notre base de données pour notre projet Laravel :

CREATE DATABASE mabddlaravel;

Pour des raisons de sécurité, on va créer un nouvel utilisateur qui n’a des droits que sur cette base de données que l’on vient de créer à l’aide de la commande suivante :

GRANT ALL ON mabddlaravel.* TO 'luser'@'localhost' IDENTIFIED BY 'supermdpbyzonetuto';

Dans le cas classique, il vous suffit donc de choisir le nom de votre utilisateur ainsi que le mot de passe de celui-ci, il aura les droits sur la base de données que vous avez mentionné. Quand c’est fait, vous pouvez appliquer les droits à l’aide de la commande :

FLUSH PRIVILEGES;

Tout devrait vient de passer et vous pouvez sortir de MariaDB avec cette commande :

EXIT;

Les choses avancent bien et il est temps de passer aux choses plus sérieuses à savoir la configuration de notre serveur web. Cela fait longtemps que j’ai abandonné Apache2 et que j’utilise NGINX qui remplit parfaitement sa mission. Les raisons de ce choix sont nombreuses, mais il supporte sans problème les grosses charges avec une bonne configuration. Mon premier réflexe sur une fresh install d’un serveur Linux Ubuntu est maintenant de supprimer totalement Apache2 pour éviter le moindre problème pour la suite. Pour installer NGINX, rien de plus simple, il suffit de faire la commande suivante sous Ubuntu :

sudo apt install nginx

Une fois que tout s’est bien installé, vous pouvez aller maintenant aller dans le dossier qui a été par défaut avec NGINX :

cd /var/www/

Je vais créer un nouveau dossier qui va accueillir mon projet Laravel et aller directement dedans :

mkdir tutolara
cd tutolara/

Si ce n’est pas encore fait, vous devez installer git pour continuer ce tutoriel. C’est de toute façon un logiciel indispensable si vous administrez un serveur. Pour cela, il suffit de faire la commande suivante :

sudo apt install git

Si vous ne connaissez pas encore l’outil GIT, je vous conseille d’aller voir cet article pour récupérer et installer un projet hébergé sur GitLab sur un serveur. C’est la forge logicielle avec laquelle je travaille depuis quelques années et j’en suis très satisfait. Vous pouvez bien sûr utiliser n’importe quelle forge pour la suite de cet article ou directement GitHub si vous récupérez un Laravel tout neuf.

Après avoir vu ce tutoriel, vous pouvez récupérer votre projet sur le serveur à l’aide de la commande suivante :

git clone git@gitlab.com:monprojetlaravel/monprojetlaravel.git

Maintenant, que vous avez récupéré votre projet Laravel, vous pouvez installer composer sur votre serveur pour récupérer toutes les dépendances de Laravel :

sudo apt install composer

On vérifie que Composer est bien installé à l’aide de cette commande :

composer --version

Vous pouvez maintenant finaliser l’installation de votre projet Laravel à l’aide de la commande suivante dans le dossier de votre projet. Cela devrait être assez rapide.

composer install

Une fois que l’installation des dépendances de Laravel est terminée, il faut maintenant configurer le fichier .env. Par défaut, il n’y a pas grand-chose à changer, mais il faut tout de même changer quelques informations. Pour commencer, il faut créer le fichier .env à partir du fichier d’exemple .env.example avec la commande suivante :

mv .env.example .env

Avec mon exemple plus haut de la configuration d’une base de donnée MariaDB avec un utilisateur et un mot de passe. Dans le cas le plus simple, il faut modifier cette partie dans le fichier .env :

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mabddlaravel
DB_USERNAME=luser
DB_PASSWORD=supermdpbyzonetuto

Ensuite il est nécessaire d’exécuter la commande :

php artisan key:generate 

C’est obligatoire après avoir créé votre fichier .env parce que cette commande génère une clé d’application unique et la définit dans la variable APP_KEY de votre fichier .env. Cette clé est essentielle pour les fonctionnalités de sécurité de Laravel, notamment le chiffrement des données sensibles comme les sessions utilisateur, les cookies et d’autres informations protégées. Sans une clé d’application valide, ces fonctionnalités ne fonctionneront pas correctement, ce qui peut exposer votre application à des risques de sécurité.

Il est maintenant temps de configurer NGINX pour que notre application Laravel soit accessible sur le web à partir d’un nom de domaine. Allez dans le dossier de configuration NGINX pour créer un nouveau site :

cd /etc/nginx/sites-available/

Je crée mon fichier qui accueillera la configuration de mon projet Laravel :

touch monlaravel

Pour éditer ce fichier, j’utilise VI :

vi monlaravel

J’ajoute alors le contenu suivant dedans :

server {
    listen 80;
    listen [::]:80;

    root /var/www/tutolara/monprojetlaravel/public;
    index index.php index.html;

    server_name monsupersite.zt;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        include fastcgi_params;
    }
}

Le bloc server encapsule toutes les directives spécifiques à votre site web. Il indique à NGINX comment traiter les requêtes pour un domaine particulier. Dans cet exemple, le serveur écoute sur le port 80, qui est le port standard pour les requêtes HTTP non sécurisées. Les directives listen 80; et listen [::]:80; permettent au serveur de gérer les connexions IPv4 et IPv6 respectivement.

La directive server_name monsupersite.zt; spécifie le nom de domaine pour lequel cette configuration est applicable. Cela signifie que NGINX utilisera ces paramètres pour toutes les requêtes destinées à monsupersite.zt. Si vous déployez ce site sur un domaine réel, assurez-vous de remplacer monsupersite.zt par votre nom de domaine.

Ensuite, la directive root /var/www/tutolara/monprojetlaravel/public; définit le répertoire racine où se trouvent les fichiers publics de votre site. Pour une application Laravel, il est crucial de pointer vers le dossier public, car c’est là que résident les fichiers accessibles publiquement. Cela garantit également que les fichiers sensibles de votre application ne sont pas exposés aux visiteurs.

La directive index index.php index.html; informe NGINX des fichiers à rechercher par défaut lorsqu’une requête ne spécifie pas de fichier particulier. NGINX cherchera d’abord un fichier index.php, puis un index.html si le premier n’est pas trouvé. Cela permet à votre application Laravel de traiter les requêtes via le fichier index.php, qui est le point d’entrée principal de l’application.

La partie la plus importante pour le routage de Laravel est la directive try_files $uri $uri/ /index.php?$args;. Cette ligne indique à NGINX de vérifier si le fichier ou le répertoire demandé existe réellement sur le serveur. Si c’est le cas, il sert ce fichier ou répertoire. Sinon, il redirige la requête vers index.php avec les arguments de requête. Cela permet à Laravel de gérer toutes les routes définies dans votre application, même si elles ne correspondent pas à des fichiers ou dossiers physiques.

Pour le traitement des fichiers PHP, le bloc location ~ .php$ { … } est essentiel. NGINX, en tant que serveur web, ne peut pas interpréter le code PHP par lui-même. Il doit transmettre les requêtes pour les fichiers PHP à un interpréteur PHP, tel que PHP-FPM (FastCGI Process Manager). La directive fastcgi_pass unix:/run/php/php8.3-fpm.sock; indique à NGINX où trouver le socket de PHP-FPM pour la version PHP 8.3. Cela permet à NGINX de passer les requêtes PHP à PHP-FPM pour traitement.

La ligne include snippets/fastcgi-php.conf; inclut une configuration standard pour le traitement des fichiers PHP avec FastCGI, tandis que include fastcgi_params; ajoute les paramètres nécessaires pour que PHP-FPM puisse traiter correctement les requêtes transmises par NGINX.

On peut maintenant vérifier que la configuration est correcte et ne comporte pas d’erreur avec la commande :

nginx -t

Si tout est bon, vous pouvez activer le site en créant un lien dans sites-enabled :

ln -s /etc/nginx/sites-available/monlaravel /etc/nginx/sites-enabled/

Pour charger la nouvelle configuration, il faut redémarrer NGINX :

systemctl restart nginx

Pour que tout fonctionne bien, on va appliquer les bonnes permissions et le bon utilisateur sur notre projet Laravel à l’aide d’un chown :

chown -R www-data:www-data /chemin/vers/laravel

Pour terminer l’installation basique de notre projet Laravel on va rajouter une toute petite couche de sécurité. Vu que notre Laravel est exposé sur le web et étant donné qu’il va y avoir des échanges entre le serveur et les clients, il faut que l’on active le HTTPS. Pour cela rien de plus simple, il y a quelque temps, j’ai écrit un article pour activer le HTTPS avec Let’s Encrypt et NGINX.

Voilà vous êtes parés pour installer un projet Laravel sur un serveur Ubuntu / Debian grâce à ce tutoriel. Amusez-vous bien avec ce super framework PHP et longue vie à vos projets !

Laisser un commentaire