IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Tutoriel pour apprendre à utiliser le framework Laravel 5.3

Plus loin


précédentsommairesuivant

IX. Le déploiement

Une application se développe et se teste en local mais arrive un moment où il faut la mettre sur un serveur pour qu'elle devienne visible et accessible. Ce déploiement n'est pas forcément une tâche aisée selon le contexte. Dans ce chapitre nous allons faire un petit tour d'horizon de ce qu'il convient de faire sans pouvoir être exhaustif étant donné la multiplicité des configurations existantes.

IX-A. L'environnement

IX-A-1. Créer des environnements

Pour la gestion de l'environnement Laravel fait usage d'un package tiers : DotEnv. J'en ai déjà parlé dans ce cours mais on va un peu faire le point. Quand vous installez Laravel avec Composer vous trouvez à la racine le fichier .env avec ce contenu :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
APP_ENV=local
APP_KEY=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=<a href="http://localhost">http://localhost</a>

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

PUSHER_APP_ID=
PUSHER_KEY=
PUSHER_SECRET=

Ça se présente sous la forme clé/valeur. Par exemple, on a déjà vu cela en œuvre dans config/app.php :

 
Sélectionnez
'debug' => env('APP_DEBUG', false),

L'helper env permet d'aller lire la valeur de APP_DEBUG dans le fichier .env et d'affecter la valeur de la clé debug de la configuration de l'application.

On trouve aussi par exemple le réglage de MySQL dans config/database.php :

 
Sélectionnez
1.
2.
3.
4.
5.
'host'      => env('DB_HOST', 'localhost'),
'port'      => env('DB_PORT', '3306'),
'database'  => env('DB_DATABASE', 'forge'),
'username'  => env('DB_USERNAME', 'forge'),
'password'  => env('DB_PASSWORD', ''),

Remarquez que l'helper accepte une valeur par défaut comme deuxième paramètre.

Que fait cet helper ?

Tout simplement il stocke les valeurs dans la super globale d'environnement $_ENV du serveur.

‌Moralité : pour avoir plusieurs environnements il faut créer plusieurs fichiers .env.

Le cas le plus classique sera d'avoir un environnement local de développement et un autre de déploiement. Il faut juste ne pas se mélanger les pinceaux, en particulier ne pas enlever le fichier .gitignore de la racine qui prévoit de ne pas envoyer le fichier .env qui peut contenir des données sensibles (si vous utilisez git).

La variable APP_ENV dans le fichier .env est justement destinée à connaître l'environnement actuel :

 
Sélectionnez
APP_ENV=local

Lorsque je crée une application je fais une copie du fichier d'environnement pour régler mes variables en situation production. Pour ne pas qu'il y ait de confusion je le nomme de façon explicite :

Image non disponible

Dans ce fichier je fixe toutes les valeurs nécessaires :

 
Sélectionnez
1.
2.
3.
4.
APP_ENV=production
APP_DEBUG=false
APP_KEY=5avz0M3IGPu4GFxBBLPhQs00MNJREzoL
...

Il me suffit ensuite d'envoyer ce fichier-là sur le serveur et de le renommer.

Selon où vous hébergez votre application vous pouvez avoir la possibilité de définir les variables d'environnement sans avoir à utiliser le fichier .env. C'est le cas si vous utilisez par exemple Forge.

IX-B. Le déploiement

IX-B-1. Le serveur

Laravel n'a pas besoin de grand-chose mais quand même :

  • PHP >= 5.6.4 ;
  • extension PHP PDO ;
  • extension PHP OpenSSL ;
  • extension PHP Mbstring ;
  • extension PHP Tokenizer.

D'autres part les dossiers storage et bootstrap/cache doivent avoir les droits d'écriture sur le serveur.

Selon la méthode d'installation que vous allez employer vérifiez que vous avez bien une clé de cryptage dans votre environnement.

IX-B-2. L'envoi des fichiers de l'application

Il existe de nombreux outils pour envoyer ses fichiers sur le serveur de production mais c'est un sujet assez vaste et pas forcément facile. Dans le cadre de ce cours je me contenterai de parler de l'envoi avec FTP qui est la méthode la plus simple et classique.

Mais avant d'envoyer les fichiers il faut être sûr de ne pas avoir des choses inutiles.

La première chose à faire est de vider le cache qui peut être volumineux  :

 
Sélectionnez
php artisan cache:clear

La seconde chose est d'envoyer le bon fichier de configuration dont je vous ai parlé ci-dessus.

Et le dossier vendor ?

Là ça dépend si vous disposez de SSH sur le serveur, ce qui vous permet d'utiliser Composer (même s'il n'est pas installé globalement vous pouvez toujours envoyer le fichier phar) et ainsi d'éviter l'envoi du dossier vendor parce que vous pourrez exécuter un composer install.

Si vous ne disposez pas de SSH sur votre serveur vous pouvez soit changer d'hébergeur, soit envoyer le dossier vendor et tout son contenu.

IX-B-3. L'installation

Une fois que les fichiers de l'application sont sur le serveur, si vous avez SSH (et donc vous n'avez pas envoyé le dossier vendor), vous devez procéder à l'installation.

Soit vous avez Composer installé globalement sur le serveur :

 
Sélectionnez
composer install

soit vous avez envoyé le fichier phar :

 
Sélectionnez
php composer.phar install

et là le dossier vendor va se créer et se remplir.

IX-B-4. Le cache‌

Pour gagner en performance vous pouvez mettre les routes en cache pour en disposer plus rapidement :

Image non disponible

Attention ! Si vous avez les routes en cache et que vous modifiez le fichier de routes il faudra régénérer le cache !

De la même manière vous pouvez mettre en cache les fichiers de configuration :

Image non disponible

IX-B-5. La base de données

Il vous faut également créer la base de données sur le serveur et bien renseigner les paramètres dans votre fichier .env de production. Ensuite si vous dispose de SSH lancez les migrations et la population (si nécessaire) sur le serveur :

 
Sélectionnez
php artisan migrate --seed

Si vous ne disposez pas de SSH l'affaire se complique un peu. Vous devez exporter votre base sur le serveur MySQL local et avec le fichier SQL généré créer votre base sur le serveur MySQL distant.

Avec tout ça votre application devrait fonctionner !

IX-C. Les mises à jour ultérieures

IX-C-1. Mise à jour du framework

Pour effectuer les mises à jours ultérieures du framework il faudra utiliser :

 
Sélectionnez
composer update

Et évidemment si vous ne disposez pas de SSH vous devez faire la mise à jour en local et transférer ensuite les fichiers ajoutés et modifiés du dossier vendor.

IX-C-2. Mise à jour de l'application

Quand vous mettez à jour votre application il peut y avoir des moments où il vaut mieux que personne ne se connecte. Laravel propose un mode maintenance facile à mettre en œuvre avec Artisan :

 
Sélectionnez
php artisan down

Et bien sûr il y a la commande inverse :

 
Sélectionnez
php artisan up

Évidemment encore faut-il que vous ayez accès à Artisan sur votre serveur…

En mode maintenance la vue affichée est celle située ici : resources/views/errors/503.blade.php

IX-D. Installation sur serveur mutualisé

Sur un serveur mutualisé peut se présenter une difficulté. On a vu que le seul dossier de Laravel qui doit être accessible est public, les autres ne doivent pas l'être. En général on fait pointer son domaine (ou sous-domaine) sur le dossier public et le tour est joué.

Mais parfois, on ne dispose que d'un dossier genre public_html et on doit tout mettre dedans. Laravel n'a pas été conçu pour ça mais on peut quand même le faire fonctionner ainsi. Voici la procédure :

commencez par installer normalement Laravel. Vous devez avoir cette architecture :

Image non disponible

On va commencer par transférer tout ce qui se trouve dans le dossier public à la racine et supprimer ce dossier. Vous devez avoir maintenant cette situation :

Image non disponible

Évidemment maintenant plus rien ne fonctionne !

Ouvrez le fichier index.php et trouvez cette ligne :

 
Sélectionnez
require __DIR__.'/../bootstrap/autoload.php';

Remplacez-la par celle-ci :

 
Sélectionnez
require __DIR__.'/bootstrap/autoload.php';

Dans le même fichier trouvez cette ligne :

 
Sélectionnez
$app = require_once __DIR__.'/../bootstrap/app.php';

Remplacez-la par celle-ci :

 
Sélectionnez
$app = require_once __DIR__.'/bootstrap/app.php';

Ces modifications sont nécessaires à cause du déplacement des fichiers et de la modification des emplacements relatifs.

Maintenant la page d'accueil de Laravel va s'afficher correctement.

Le souci c'est que maintenant tout devient accessible et il faut prendre des précautions !

Par exemple, en prévoyant dans les dossiers que vous voulez inaccessibles (app, bootstrap…) un .htaccess avec :

 
Sélectionnez
Deny from all

Les seuls fichiers accessibles restent ceux qui sont présents à la racine et il y a encore des choses sensibles comme votre fichier de configuration. Il faut donc aussi prévoir quelque chose pour .htaccess à ce niveau !

IX-E. Créer une installation comme WordPress

Si vous avez besoin d'une installation assistée genre celle proposée par WordPress j'ai créé un package qui peut vous aider.

Pour voir comment ça se présente commencez par créer une installation fraîche de Laravel.

Ajoutez l'authentification avec Artisan :

 
Sélectionnez
php artisan make:auth

Vérifiez que tout fonctionne correctement.

Image non disponible

Créez aussi une base de données MySQL sur le serveur et notez son nom et les paramètres pour y accéder.

Ensuite installez le package :

 
Sélectionnez
composer require bestmomo/laravel5-3-installer

Attendez que l'installation soit terminée.

Ajoutez la référence du package dans config/app.php :

 
Sélectionnez
Bestmomo\Installer\InstallerServiceProvider::class,

Pour terminer publiez la configuration, les langues, les vues et les routes :

 
Sélectionnez
php artisan vendor:publish --tag=laravel-installer

C'est pratiquement terminé !

Voyons comment ça fonctionne…

IX-E-1. Étape 1 : vérification du serveur

Votre page d'accueil a changé pour celle-ci :

Image non disponible

L'aspect ici est avec la locale en français, il y a aussi les textes en anglais.

Si vous arrivez sur cette page c'est que le serveur est correct pour Laravel (version et extensions de PHP, permissions sur les dossiers). Pour changer des éléments à ce niveau ça se passe dans le fichier de configuration :

Image non disponible

Si vous voulez modifier les textes, en particulier le titre et le numéro de version, vous pouvez le faire dans le fichier des langues, par exemple pour le français :

Image non disponible

IX-E-2. Étape 2 : la base de données

Dans l'étape suivante on demande les informations pour la connexion à la base :

Image non disponible

Modifiez les informations en conséquence. S'il y a une erreur vous recevez ce message :

Image non disponible

Si tout se passe bien les migrations et les populations éventuelles sont lancées.

IX-E-3. Étape 3 (optionnelle) : création d'un administrateur

Cette étape a lieu par défaut, vous pouvez changer ce comportement dans le fichier config/installer.php :

 
Sélectionnez
'administrator' => false,

Voici le formulaire qui apparaît :

Image non disponible

Les éléments du formulaire sont aussi paramétrables dans le fichier de configuration.

Si tout se passe bien l'administrateur est créé et une nouvelle clé de cryptage est enregistrée dans le fichier .env.

Vous devez voir apparaître ce message :

Image non disponible

À la fin de l'installation la référence au fournisseur de service de l'installeur est supprimée dans le fichier config/app.php, ce qui supprime les accès à cet installeur.

Vous avez ainsi tout ce qu'il faut pour créer une belle application et la distribuer :

  • créez l'application complète avec le vendor ;
  • ajoutez le package ;
  • ajustez les paramètres dans la configuration du package.

IX-F. En résumé

  • Il faut créer des environnements pour répondre aux différentes situations : local, distant…
  • Le déploiement est facile et rapide si on dispose du SSH.
  • On peut supprimer le dossier public tout en ayant un Laravel fonctionnel, il faut juste prendre des mesures pour assurer la sécurité.
  • Le package bestmomo/laravel5-3-installer permet de créer une installation dans le style de WordPress.

précédentsommairesuivant

Copyright © 2017 Laravel. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.