Comment déployer avec Deployer

Le flux de travail automatisé pour le déploiement est un excellent outil que chaque équipe de développement logiciel doit posséder. Le processus de publication, quand il est rapide, sécurisé et tolérant aux pannes, peut faire gagner du temps pour développer de plus grandes choses. Et la bonne nouvelle qu'il existe de nombreux excellents outils pour créer un cycle de publication automatisé.

Dans cet article, je vais vous présenter un outil de déploiement appelé Deployer. J'aime l'utiliser parce qu'il est écrit en PHP, qu'il est facile à configurer et qu'il comporte de nombreuses fonctionnalités pratiques pour intégrer le processus de déploiement dans le flux de travail de votre équipe..

Le processus de déploiement avec Deployer

Tout d’abord, voyons la structure du processus de déploiement avec Deployer. Il se compose de trois parties principales: a déployer le serveur pour initier le déploiement, un serveur de production ou de transfert pour héberger votre application, et un référentiel git pour stocker le code de votre application.

Lorsque vous initiez un processus de déploiement, vous exécutez un script de déploiement sur le serveur de déploiement. Après cela, le serveur de déploiement se connecte au serveur de production avec SSH et effectue les tâches de maintenance du serveur de production, telles que le clonage du code à partir d'un référentiel git, la mise à jour des dépendances de Composer et d'autres éléments nécessaires à la réussite de la publication. 

Pour créer la confiance de tous dans cette chaîne, nous allons créer et installer des certificats SSH sur les serveurs et le référentiel..

Installer les certificats SSH

Nous devons créer une clé d'authentification SSH sur un serveur de production et la partager dans un référentiel git. Si vous n’avez pas de clé d’authentification SSH sur votre serveur de déploiement, exécutez ssh-keygen et suivez les instructions. Keygen va créer une clé publique dans un fichier ~ / .ssh / id_rsa.pub.

Maintenant, vous pouvez l'installer sur le compte de votre référentiel. Si vous ne savez pas comment faire, regardez l'exemple de GitHub à partir des liens associés au bas de l'article ou demandez de l'aide à votre service d'hébergement de référentiel..

En outre, il est préférable de créer une clé SSH sur votre serveur de déploiement pour obtenir la confiance sur la machine de production. Utilisez ces commandes pour établir une connexion SSH sans mot de passe entre les serveurs de déploiement et de production..

vagrant @ localserver: ~ $ ssh-keygen vagrant @ localserver: ~ $ ssh-copy-id -i ~ / .ssh / id_rsa.pub www-data@my_project.com

Avec tous les certificats installés, nous sommes prêts à installer Deployer.

Installer Deployer

L'installation de Deployer est aussi simple que celle de Composer. Vous devez télécharger PHP Archive et en faire une commande globale:

curl -LO https://deployer.org/deployer.phar mv deployer.phar / usr / local / bin / dep chmod + x / usr / local / bin / dep

Vérifions la version de Deployer pour voir si tout est installé correctement:

vagrant @ localserver: ~ $ dep --version Deployer 6.0.3

Tout est beau et nous sommes prêts à créer notre premier script de déploiement.

Faire le premier script de déploiement

Pour initialiser Deployer pour votre projet, exécutez dep init. Ceci exécutera un utilitaire pour générer un script de déploiement, qui vous demandera un type de projet et un lien de référentiel et créera le deploy.php fichier dans le répertoire en cours. Regardons ce fichier et les fonctions principales utilisées dans une recette. 

Les fonctions ensemble et obtenir travailler avec les valeurs de configuration, et un raccourci d'un getter peut être utilisé avec un courir commander:

set ('current_path', '~ / my_application'); run ('rm current_path / runtime / *');

Chaque valeur de configuration peut être remplacée pour chaque hôte. Nous pouvons configurer un chemin de déploiement et un utilisateur SSH pour notre application dans notre script de déploiement:

hôte ('mon_projet.com') -> utilisateur ('www-data') -> set ('deploy_path', '~ / application');

Pour définir vos propres tâches, utilisez le tâche fonction et courir exécuter une commande sur le serveur de production:

tâche ('disk_free', function () $ df = run ('df -h /'); writeeln ($ df););

Et puis le lancer avec dep et le nom de la fonction en tant que param:

vagrant @ localserver: / vagrant / deployer $ dep disk_free ➤ Exécution de la tâche disk_free Taille du système de fichiers utilisée Dispail Utilisation% monté sur / dev / md0 7.4G 4.7G 2.4G 67% / ✔ Ok 

Maintenant, vous pouvez parcourir le fichier de déploiement et modifier tous les paramètres nécessaires à la configuration de votre application..

Déployer en production

Nous avons déjà installé Deployer, installé des certificats SSL sur les serveurs de déploiement et de production et créé le script de déploiement. Il est donc enfin temps de rassembler tous les éléments et de procéder au premier déploiement en production..

Pour déployer votre application, il suffit d'appeler dep deploy:

Si quelque chose ne va pas, vous pouvez revenir à la version précédemment déployée en une seule étape:

vagrant @ localserver: ~ $ dep rollback ✔ Exécution d'une restauration de tâche

Ça a l'air facile, n'est-ce pas?

Maintenant, vérifions ce qui a été créé sur notre serveur de production. Grâce à Deployer, nous pouvons le faire facilement avec des commandes de raccourci. Essayer dep ssh pour vous connecter directement à un serveur à l'aide de la configuration du script de déploiement, ou exécuter une commande à distance via un tunnel SSH avec dep run. De plus, cette commande supporte les variables que nous avons définies dans le script..

Alors regardons le chemin de déploiement:

vagrant @ localserver: ~ $ dep run "tree deploy_path". ├──en cours -> / home / utilisateur / mon_projet / releases / 3 ├── versions 1 ├── │ composer.json │ ├── config.php -> / home / utilisateur / mon_projet / shared / config.php de README.md au moment de l'exécution -> / home / utilisateur / data / mon_projet / shared / runtime du fournisseur en cours… web │ └── index.php 2 │… 3 │… └── partagé config.php runtime 

L'essentiel est le les libérations répertoire, où Deployer stocke les dernières versions de notre application. Après chaque déploiement ou restauration réussi, il est lié actuel à la version activée. Enfin, nous avons un partagé répertoire, qui stocke les fichiers et les dossiers de la Shared_dirs et fichiers_partagé que nous avons défini dans le fichier script.

Lors du premier déploiement, Deployer copiera ces fichiers dans un répertoire partagé et créera un lien à partir du répertoire. les libérations dir au partagé dir. La prochaine fois, il ne fera qu'ajouter un lien entre les fichiers de version et les fichiers et dossiers du répertoire partagé. En outre, vous pouvez modifier n’importe quel fichier d’un répertoire partagé et Deployer le conservera sans modification à chaque déploiement. Par exemple, cela est utile pour les fichiers de configuration..

De plus, si vous avez un composer.json À la racine de votre référentiel, Deployer appellera Composer pour créer un répertoire de fournisseurs et mettre à jour toutes les dépendances nécessaires. Si vous ne stockez pas le fichier Composer dans le répertoire racine, vous pouvez créer une tâche personnalisée pour le mettre à jour..

Et maintenant, il est temps d'intégrer l'application déployée à nos processus.

Ajouter une tâche personnalisée

Chaque équipe a ses propres configurations de déploiement et processus à automatiser. Par conséquent, Deployer dispose d'outils faciles à utiliser pour étendre la configuration standard et ajouter des tâches personnalisées. Par exemple, votre hébergement peut avoir la règle pour stocker les applications et la racine Web à des endroits différents, sans droit de changer la configuration d'Apache ou de Nginx.. 

Mais il existe un moyen de surmonter ces liens symboliques d'utilisation de règles. Nous allons donc ajouter une tâche pour cela:

task ('deploy: public_html', function () run ('ln -sf deploy_path / current / web /var/www/my_application.com');); 

Puis ajoutez-le à la tâche de déploiement principale dans le cadre d'un cycle de publication:

tâche ('deploy', [//… 'deploy: public_html', //…]);

Maintenant, exécutez à nouveau le script de déploiement et vérifiez si tout est correct avec dep ssh.

Recettes de tiers

Deployer a de nombreuses recettes à intégrer avec des tiers pouvant étendre les fonctionnalités de base. Nous pouvons utiliser Composer pour les installer:

compositeur nécessite un dépliant / recettes --dev 

J'aime utiliser la recette de notification Slack. Pour l'activer, nous devrions aller à la page de recette Slack, cliquez sur le bouton Ajouter à Slack bouton, et sélectionnez le canal pour envoyer des notifications. Ensuite, nous aurons le webhook Slack et ajouterons ce code au déploiement.

// nécessite une recette lâche require 'recipe / slack.php'; // set slack webhook set ('slack_webhook', / * votre slack webhook * /); // notifie le relâchement après le déploiement réussi après ('success', 'slack: notify: success');

Après ces modifications, Deployer enverra un message comme celui-ci au canal de déploiement:


Vous pouvez maintenant ajouter votre équipe à la chaîne afin que toutes les personnes impliquées puissent être informées..

Conclusion

Dans ce tutoriel, nous avons installé Deployer et créé un script de déploiement qui peut être utilisé pour déployer notre application depuis un référentiel git vers un serveur de production ou de stockage intermédiaire en un clic..

En outre, il peut être intégré aux processus d'équipe. Par exemple, une application peut être déployée automatiquement après des modifications dans la branche principale et une notification peut être effectuée sur un canal Slack en cas de déploiement réussi..

Si vous avez des questions, n'hésitez pas à poser des questions dans les commentaires de l'article. 

Lectures complémentaires et liens connexes

  • Site de Deployer
  • Slack recette pour Deployer
  • Exemple d'installation d'une clé SSH sur un compte GitHub