Déploiement d'une application Laravel avec Capistrano

Vous venez donc de créer une application Web sophistiquée et vous envisagez de la mettre en ligne. Cela peut être fait de plusieurs manières. Dans cet article, je voudrais aborder une approche pour déployer votre système backend sur votre serveur de production. Nous allons suivre les étapes suivantes en donnant un exemple d’application Laravel, mais cela peut s’appliquer à n’importe quel autre langage ou technologie..

Mettre à jour

Cet article a été mis à jour pour Capistrano 3. Vous trouverez plus d'informations sur la nouvelle version sur le site Web de Capistrano..

Le passé

Peut-être avez-vous déjà mis en ligne des sites Web dans le passé. Vous avez probablement utilisé un client FTP et téléchargé les bits et les octets à la main. Ou peut-être avez-vous toujours connecté à votre serveur via ssh et extrait les modifications manuellement.

L'idée

Notre objectif est de simplifier ce processus autant que possible. L'idée est d'utiliser votre référentiel de code comme source pour chaque déploiement. Dans notre cas, capistrano, l’outil de déploiement se connecte automatiquement à votre serveur et construit votre système directement à partir de votre référentiel..

Le déploiement de logiciels regroupe toutes les activités qui rendent un système logiciel utilisable. - Wikipédia

Ce dont vous aurez besoin…

… Sur votre serveur distant

Votre serveur distant doit fournir ssh accès. Il devrait également avoir installé toutes les dépendances nécessaires pour votre projet, telles que GIT, PHP, MySQL, Composer,… De plus, vous n'avez besoin d'aucun logiciel supplémentaire sur votre serveur de production..

… Sur votre machine locale

Pour installer et utiliser capistrano, vous avez besoin au minimum de Ruby 1.9 (si Ruby n’est pas installé, je vous recommande de l’installer avec rbenv). Pour installer capistrano, vous devez simplement exécuter:

 $ gem installer capistrano

Alors pourquoi capistrano, vous pouvez demander. Comme toujours, il y a plusieurs façons d'accomplir une tâche, mais dans mon cas, capistrano semblait toujours être l'approche la plus simple et la plus souple. Vous pouvez le configurer pour répondre à tous vos besoins et de nombreux plug-ins simplifient votre travail à nouveau..

Capistrano est un utilitaire et un framework permettant d’exécuter des commandes en parallèle sur plusieurs machines distantes, via SSH. Il utilise un simple DSL (emprunté en partie à Rake) qui vous permet de définir des tâches pouvant être appliquées aux machines dans certains rôles. Il prend également en charge les connexions par tunnel via un ordinateur passerelle pour permettre l'exécution d'opérations derrière des VPN et des pare-feu..

Préparer

Maintenant que nous avons tout ce dont nous avons besoin, configurons nos paramètres de déploiement. Mais nous devons d’abord créer un dossier sur le serveur distant sur lequel tous les fichiers doivent être déployés. Connectez-vous à votre serveur avec SSH et créez un dossier. Un lieu commun est / var / www /. Alors faisons ceci:

 $ sudo mkdir / var / www / mon-application $ sudo chown -R nom d'utilisateur: groupe / var / www / mon-application

C'est tout. Il n'y a plus rien à faire sur le serveur distant, vous pouvez donc fermer la connexion ssh et continuer. Allez dans votre projet (ou n'importe quel autre dossier, cela n'a pas d'importance pour le moment) et lancez:

 $ cd mon-projet $ cap installer

Cette commande créera les fichiers de base dont nous avons besoin. Après cela, votre dossier devrait ressembler à ceci.

 . ├── Capfile ├── Config ├── aging Déployer Production.rb Staging.rb Déployer.rb Lib Capistrano tâches

le Capfile est comme le point de montage pour capistrano mais pour l'instant nous aurons juste besoin de modifier config / deploy.rb et config / deploy / production.rb. Le premier fichier est responsable de toutes les étapes de la construction, le second représente une "étape". Vous pouvez avoir plusieurs étapes, telles que la production, le stockage intermédiaire, les tests… Dans chaque fichier de configuration d'étape, vous pouvez spécifier votre ou vos serveurs. Ouvrons ces deux fichiers dans votre éditeur de texte préféré et remplaçons le contenu par les extraits suivants. Nous allons passer par le code après.

Nous allons commencer avec config / deploy / production.rb:

 role: app, %[email protected] # EDITER votre nom d'utilisateur ssh et votre adresse IP du serveur définis: ssh_options, auth_methods:% w (mot de passe), mot de passe: "" # EDITER votre mot de passe ssh

Ensuite nous modifierons config / deploy.rb:

 set: application, "Nom de votre application" # EDITER votre ensemble de noms d'applications: repo_url, "https://github.com/laravel/laravel.git" # EDITER votre ensemble de référentiels git: deploy_to, "/ var / www / my- app "# EDIT dossier où les fichiers doivent être déployés dans l'espace-noms: deploy do desc" Construire "après: updated,: build faire sur les rôles (: app) faire dans release_path faire exécuter: composer," install --no-dev --quiet "# dépendances de l'installation execute: chmod," u + x artisan "# make artisan exécutable fin fin fin desc" tâche de redémarrage ": redémarrer faire sur les rôles (: app) faire dans release_path faire exécuter: chmod," -R 777 app / storage / cache "execute: chmod", -R 777 app / storage / logs "execute: chmod," -R 777 app / storage / meta "execute: chmod," -R 777 app / storage / sessions "execute: chmod," -R 777 app / storage / views "fin fin fin fin

Vous devez maintenant mettre vos données dans chaque ligne avec un #MODIFIER comment (adresse ip, repo git, utilisateur ssh, mot de passe, etc.). le : deploy_to variable devrait être le dossier que nous venons de créer. Votre serveur Web (Apache, Nginx,…) devrait pointer vers / var / www / my-app / current / public.

dans le espace de noms: deploy bloc de la deploy.rb fichier vous spécifiez ce qui devrait réellement se passer pour chaque déploiement. Donc, il y a deux tâches. dans le construire tâche, nous installons toutes vos dépendances PHP, comme vous en avez l’habitude lors du développement. Après cela, nous rendons le fichier artisan exécutable afin de l’utiliser pour les migrations. dans le redémarrer tâche nous fixons les autorisations pour les dossiers de stockage.

Toutes ces tâches sont appelées dans l'ordre suivant. Vous pouvez vous accrocher à chaque tâche si vous en avez besoin, mais pour le moment, nous nous en tenons à notre configuration simple..

 deploy: démarrez - démarrez un déploiement, assurez-vous que tout est prêt deploy: started - started hook (pour les tâches personnalisées) deploy: update - met à jour le (s) serveur (s) avec une nouvelle version deploy: updated - mis à jour le hook deploy: publishing - publie le nouveau release deploy: publié - publié hook déployé: finition - terminer le déploiement, nettoyer tout déployer: fini - hook terminé

Chaque déploiement est stocké dans / var / www / my-app / releases /. La tâche intégrée deploy: publication crée un lien symbolique entre le récent déploiement et le actuel dossier. De cette façon, vous pouvez conserver les anciennes versions et changer de version sans vous déconnecter une seconde. Lorsque cette tâche a été exécutée, votre dernière version est en ligne..

Vous pouvez facilement ajouter vos propres tâches si votre processus de construction nécessite des étapes supplémentaires. Pour des informations plus détaillées, je vous recommande de lire la documentation officielle.

Après ces étapes de configuration de base, nous sommes prêts pour notre premier déploiement..

Feu!

C'est donc le moment que vous attendiez. Le plus dur est fait. Pour l'instant, chaque fois que vous souhaitez livrer vos mises à jour d'applications, il vous suffit d'exécuter la commande magique suivante. Capistrano va lire votre config / deploy.rb config / deploy / production.rb fichiers et exécuter chaque tâche. Si une tâche échoue, le déploiement s'arrête et l'ancienne version est toujours en ligne..

 $ cap production déployer

Vous verrez beaucoup de texte et peu de temps après (tout dépend de votre serveur), tout devrait être terminé. C'était facile, n'est-ce pas?

Remarque: Pour le moment, nous venons de configurer notre étape de production, mais vous pouvez remplacer production avec une autre étape, par exemple votre serveur de test et exécutez $ cap staging deploy.

Pensées supplémentaires

Sécurité

Peut-être que vous pourriez être un peu inquiet si vous devez mettre votre mot de passe en texte brut dans le fichier de configuration. Je viens de choisir cette méthode pour rendre la démonstration aussi simple que possible, mais dans le monde réel, vous souhaiterez peut-être utiliser une clé SSH. Vous pouvez en importer un comme ceci:

 set: ssh_options, keys:% w ("/ chemin / vers / votre / key.pem"), # EDITER votre clé ssh auth_methods:% w (publickey)

Base de données

Pour l'instant, nous nous sommes concentrés sur le déploiement des fichiers dans leur nouvelle maison, mais dans de nombreux scénarios, vous pouvez également utiliser votre base de données. Laravel dispose d'un outil parfait pour cela: les migrations. Vous pouvez simplement ajouter une nouvelle étape dans laquelle vous exécutez ces migrations. Après cela, notre tâche de construction pourrait ressembler à ceci:

 desc "Build" après: updated,: build faire sur les rôles (: app) faire dans release_path faire exécuter: composer, "installer --no-dev --quiet" # installer des dépendances execute: chmod, "u + x artisan" # make artisan exécutable execute: php, "artisan migrate" # exécuter les migrations end end end end

Vous devez également ajouter cette tâche dans le transaction bloc de la mettre à jour tâche. Maintenant, chaque fois que vous déployez, la base de données sera mise à jour pour vos dernières migrations.

Retour en arrière

Parfois, vous déployez une version non opérationnelle de votre application et vous devez annuler ces modifications. Capistrano a une fonctionnalité intégrée pour ce qu'on appelle "rollback". Il suffit de courir:

 Déploiement de la production $ cap: rollback

Conclusion

Vous venez d'apprendre un moyen très simple de déployer votre application sur vos serveurs de production avec Capistrano. Une fois le travail de configuration terminé, il suffit d’une commande pour déployer votre dernière version en quelques secondes. Mais comme mentionné précédemment, ce n'est pas la seule façon de le faire.

Vous devriez également consulter la tâche du coureur qui convient parfaitement à la création et au déploiement d’applications JavaScript. Une approche complètement différente prend docker qui agit comme une VM légère. L'idée ici est de déployer tout votre environnement en tant que machine virtuelle. Vérifie-les!