Déployer un site Laravel

Nous l'avons vu en cours, utiliser Laravel permet de gagner du temps lors de la création du site / solution. Déployer un site Laravel est assez similaire à ce que vous connaissez déjà, cependant il y aura quelques exceptions.

TP prévu pour Debian

Le TP est axé sur Debian, mais il devrait fonctionner avec la plupart des distributions.

Sommaire

Apache

Première étape (si vous ne l'avez pas déjà) est d'installer Apache :

apt-get install apache2 -y

PHP 8

Pour faire du Laravel vous devez avoir une version récente de PHP, de base Debian arrive avec une version relativement ancienne de PHP à savoir PHP 7.3 (et des bananes).

Pour ça nous allons avoir besoin d'un dépôt externe, celui-ci contiendra la dernière version de PHP.

# Installation des dépendances nécessaires à l'ajout d'un dépôt
apt-get install apt-transport-https gnupg2 ca-certificates -y
# Ajout du dépôt Sury
wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
# Ajout de PHP et des dépendances nécessaire au bon fonctionnement de Laravel
apt-get update -y
apt-get install libapache2-mod-php php php-common php-xml php-gd php8.0-opcache php-mbstring php-tokenizer php-json php-bcmath php-zip unzip curl -y

# Active la réécriture d'URL nécessaire pour Laravel
/usr/sbin/a2enmod rewrite

Et voilà, nous avons la base, votre serveur est prêt à recevoir votre code ! Avant de continuer, vérifiez avec la commande suivante que votre version de PHP est au moins égale à 8.

php -v

Exemple dans mon cas :

PHP 8.0.10 (cli) (built: Aug 26 2021 16:06:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.10, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.10, Copyright (c), by Zend Technologies

Un instant !

  • D'où viennent ces commande ?
  • Devez-vous ? Pouvez-vous me faire confiance et les copiez-collez directement ?

Composer

Nous l'avons vu en cours, de base un projet Laravel arrive sans aucune dépendance, il faut les installer avec Composer. Votre serveur va donc également devoir avoir Composer. Pour l'installer :

# Téléchargement de composer.
curl -sS https://getcomposer.org/installer | php

# Installation de composer pour qu'il soit accessible de partout.
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

Vous avez tout ce qu'il vous faut !

Votre serveur est maintenant prêt ! Il ne nous reste plus qu'à :

  • Mettre les sources sur le serveur
  • Configurer Apache pour indiquer où son vos sources.

Un instant !

  • Pourquoi ai-je choisi de passer par l'installation hors de apt-get ?
  • Selon vous, pourquoi est-ce que ça pourrait-être une mauvaise idée ?

Installer votre site

Pour installer votre site, nous avons deux solutions :

  • Utiliser un FTP (ou un sftp) et déposer votre code source dans /var/www/html/votresite/.
  • Cloner le code source avec Git dans le dossier /var/www/html/

Cloner ou FTP ? Vous avez le choix !?

Une fois le code déposé sur le serveur :

cd /var/www/html/votresite/
composer install --no-interaction --optimize-autoloader --no-dev

chown -R www-data:www-data /var/www/html/votresite
chmod -R 775 /var/www/html/votresite

n'oubliez pas le `.env`

N'oubliez pas pour que votre site fonctionne correctement, vous devez avoir un .env correctement configuré avec :

  • Vos identifiants de la base de données (et le serveur).
  • Une clé permettant de protéger vos COOKIES php artisan key:generate.

Un instant !

  • Avez-vous déjà cherché la différence entre FTP ou SFTP ?
  • Je pense qu'il serait plus intéressant de passer par GIT, pourquoi selon vous ?

Configurer Apache

La dernière étape est la configuration du serveur Apache, habituellement déposer les sources suffit à faire fonctionner un site Internet avec Laravel nous allons avoir une étape supplémentaire :

Pour ça :

nano /etc/apache2/sites-available/000-default.conf

Dans le fichier en question vous devez :

1 - Changer / Modifier le DocumentRoot par :

# Change l'emplacement où les sources seront chargées
# Laravel possède un dossier public avec dedans un index.php qui
# contient la logique de chargement de VOTRE CODE SOURCE.
# C'est l'équivalent du php artisan serve en quelque sorte
DocumentRoot /var/www/html/votresite/public

2 - Ajouter dans la configuration du VirtualHost :

# Autorise l'exécution des fichiers .htaccess dans votre site.
<Directory /var/www/html/votresite>
    AllowOverride All
</Directory>
Un exemple du résultat

Dans mon cas voilà le résultat :

<VirtualHost *:80>
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html/votresite/public

    <Directory /var/www/html/votresite>
        AllowOverride all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Un Instant !

Comprendre la configuration c'est important, c'est une partie importante de votre métier (et ça fait partie de la sécurité).

3 - Redémarrer votre serveur Apache

systemctl restart apache2

4 - Profit !

Voilà ! Votre site est maintenant fonctionnel sur votre serveur.

Félicitation !