Laravel 8

Créer un blog – le déploiement

Nous nous somme intéressés dans le précédent article au RGPD et on a ajouté une case à cocher pour le consentement volontaire de l’utilisateur lors de l’enregistrement ou de la prise de contact, les deux moments où il donne des données personnelles. Ça répondait à une question dans un commentaire. Il y a eu aussi la question du déploiement que je n’ai jamais vraiment traité ici.

Pour déployer une application construite avec Laravel il faut un serveur pour la recevoir : mutualisé ou privé. Les cas de figure peuvent être très variés. Il existe des outils d’automatisation comme Deployer.

Dans cet article je vais traiter principalement le cas du déploiement sur un serveur mutualisé équipé de CPanel, tout simplement parce que c’est celui que je connais le mieux. Mais je parlerai aussi des autres possibilités.

Un serveur prêt pour Laravel

Il faut que le serveur sur lequel on veut déployer notre application possède toutes les caractéristiques nécessaires. Si vous avez votre propre serveur il faut installer une stack LEMP ou LAMP. En général Linux est déjà préinstallé mais il faut ensuite ajouter Nginx (dans ce cas procédez bien à la configuration préconisée dans la documentation) ou Apache, MySQL et PHP. Sur une serveur mutualisé vous avez déjà tout ça servi sur un plateau mais aussi des contraintes;

Il est aussi pratiquement indispensable de disposer du SSH, sur votre propre serveur vous pouvez l’ajouter, sur un mutualisé vérifiez qu’il est disponible, sinon changez d’hébergeur.

Concernant PHP la version doit être au minimum 7.3 pour Laravel 8 et il faut toutes ces extensions :

  • BCMath
  • Ctype
  • Fileinfo
  • JSON
  • Mbstring
  • OpenSSL
  • PDO
  • Tokenizer
  • XML

Vous aurez également besoin de Composer. A nouveau si vous êtes sur un mutualisé vérifiez qu’il est disponible. Si ce n’est pas le cas ce n’est pas très grave parce que vous pouvez utiliser une version PHAR.

Pour information j’utilise comme hébergeur o2switch depuis plusieurs années sans soucis. Il a un bon rapport qualité-prix et offre tout ce qui est nécessaire avec une offre illimitée.

La configuration

On a donc notre application qui fonctionne bien en local avec une certaine configuration. Mais on va avoir une autre configuration sur le serveur. Je vous conseille de créer un second fichier .env que vous pouvez appeler par exemple .env_production :

On va simplifier avec ce contenu :

APP_NAME="Mon Blog"
APP_ENV=production
APP_KEY=base64:ZCGjzVuIuorqGQVE5c/l1zHzEA+i4Uwx4FfW6ZuUGzo=
APP_DEBUG=false
APP_URL=https://monblog.sillo.org

LOG_CHANNEL=stack
LOG_LEVEL=debug

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=monblog
DB_USERNAME=***
DB_PASSWORD=***

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

MAIL_MAILER=sendmail
MAIL_FROM_ADDRESS=admin@monblog.sillo.org
MAIL_FROM_NAME=Administrateur

La variable d’environnement est assignée à production. On supprime le mode DEBUG. On change l’url en mettant la définitive. On met à jour les données pour la base MySQL. On renseigne les éléments pour l’envoi des emails.

On envoie les fichiers

On va maintenant envoyer tous les fichiers nécessaires de notre application sur le serveur. Pour le faire il y a plusieurs solutions. Certains créent un dépôt Github, BitBucket ou autre et ensuite utilisent le SSH pour faire un clone sur le serveur. Personnellement je me contente de tout envoyer en FTP. Il n’y a pas tant de fichiers que ça et ça va assez vite. Mais il faut commencer par créer un dossier sur le serveur, avec CPanel on a un lien :

On ouvre ainsi le gestionnaire de fichier et on ajoute le dossier :

J’ai un dossier racine sites et ensuite je crée un dossier pour chaque site. Vous pouvez avoir un mutualisé avec juste le dossier public_html qui ne vous permet pas grand chose. Là aussi je vous conseille de changer d’hébergeur.

Maintenant qu’on a le dossier on envoie en FTP tout le paquet (sauf test et vendor). Dans la racine vous ne gardez que ce qui va servir : .env_production, composer.json et artisan.

Je travaille avec Windows et pour toute ma gestion de fichiers, que ce soit en local ou distant, j’utilise Multi Commander. Il sait tout faire et il le fait bien. Le transfert dure en gros une minute, ce qui est raisonnable.

Sur le serveur vous changer le nom de .env_production pour .env.

Maintenant on a tout sur le serveur !

Installation

Il nous faut maintenant générer le dossier vendor avec toutes les librairies nécessaires et aussi générer les fichiers pour le chargement des classes. Ici c’est Composer qui va nous servir. Si vous n’en disposez pas sur le serveur allez chercher la version PHAR et envoyez la sur le serveur.

Si vous avez un CPanel complet vous devez avoir une console :

Si ce n’est pas le cas alors il vous faut une application comme Putty.

On peut lancer composer install :

On laisse Composer travailler…

Remarquez que je n’ai pas utilisé composer install –no-dev, ce qui serait pourtant logique puisqu’on n’a a priori pas besoin des librairies de développement. Sauf que je vais faire ensuite la population qui nécessite la présence de faker. Donc pour le moment j’installe tout, je supprimerai ces librairies ensuite.

Quand c’est fini vous avez le dossier vendor et composer.lock :

La base de données

Dans CPanel on a l’accès à la gestion des bases de données et à phpMyAdmin :

On ouvre le gestionnaire des bases pour créer la nouvelle :

Il faut créer un utilisateur (ou en choisir un déjà existant) :

Et finalement ajouter l’utilisateur à la base :

On lui donne tous les privilèges :

Il faut maintenant mettre ajour .env pour déclarer le nom de la base, l’utilisateur et le mot de passe. Vous avez normalement un éditeur dans le gestionnaire de fichiers du CPanel.

On retourne maintenant dans la console pour faire les migrations et la population. On nous prévient que l’application est en production mais on n’a pas peur :

On peut vérifier avec phpMyAdmin que ça a bien été créé :

Le domaine

On a tout mais pour le moment on n’a accès à rien. Il nous faut un domaine. Pour l’exemple je vais créer un sous-domaine. Dans le CPanel on a accès à cette fonctionnalité :

Je crée le sous-domaine et je le fais pointer sur le dossier public :

Maintenant avec l’url monblog.sillo.org on a le blog ! Mais il manque les images. En effet comme on avait créé un lien symbolique en local le dossier storage existe dans public mais est maintenant relié à rien du tout. Si vous lancez la commande :

php artisan storage:link

On va vous dire que le lien existe déjà parce que le dossier existe. Alors il faut commencer par supprimer le dossier et ensuite lancer la commande.

On va faire juste une dernière touche avec la sécurité. Normalement dans le CPanel vous avez un accès à Lets Encrypt :

On va générer le certificat pour le blog.

Maintenant on peut taper https://monblog.sillo.org ! Vous pouvez le vérifier en ligne !

Optimisation

On peut supprimer les librairies du développement qui ne nous sont plus utiles :

composer install --no-dev

Pour accélérer le site on peut mettre en cache la configuration :

php artisan config:cache

Et les routes :

php artisan route:cache

Et la petite touche finale pour régénérer la clé de cryptage :

php artisan key:generate

Conclusion

On a vu dans cet article comment déployer le blog sur un serveur mutualisé. Ce n’est pas bien compliqué mais il faut être assez méthodique.

 

 

Print Friendly, PDF & Email

6 commentaires

  • klo_big

    Bonjour,

    Tout d’abord je tiens à saluer la qualité de ton travail ainsi que l’effort de mise à jour que tu fais pour nous faire partager tes connaissances sur laravel. C’est l’une des très rares ressources en francais sur le sujet. Donc un grand merci pour tout cela. J’aimerais savoir si dans le cadre des hebergements o2switch, tu avais eu à gerer les questions de tâches cron et de gestion de fils d’attentes notamment pour l’envoi de mails. J’ai crû comprende que c’etait très compliqué de mettre en place ce type de tâche sur un serveur « partagé ».

    • bestmomo

      Bonjour,
      Tout d’abord merci pour les encouragements !
      En ce qui concerne o2switch on peut facilement mettre en place des tâches CRON à partir du CPanel.
      Pour les emails il n’y a pas besoin de passer par la gestion de files d’attente étant donné qu’il y a un serveur dédié pour l’envoi des emails avec une rotation des IP pour éviter d’être blacklisté. C’est expliqué ici. Mais sinon la commande php artisan queue:work devrait fonctionner mais je n’ai jamais essayé.

  • Azo

    Bonsoir BestMomo,

    Un grand merci pour cette série de tuto qui est vraiment top !

    Petite question est-il envisageable d’avoir un tuto sur l’automatisation du déploiement, avec Deployer ou autre d’ailleurs.
    La doc de Deployeur est très succincte et je n’arrive pas à le mettre en place …

    Merci à toi en tout cas !

    • bestmomo

      Salut,

      En ce qui concerne l’automatisation du déploiement je n’en ai aucune expérience, il m’est donc difficile d’en faire un tuto. Je fais toujours mes déploiements sans outil spécifique parce que j’aime bien garder la maîtrise de ce qui se passe. je suppose que ça devient vraiment intéressant pour un gros projet évolutif.

Laisser un commentaire