@drawoharaj'❤️ ça! << cliquez ici 🐛 🫖 🧚
/une-stratégie-simple-pour-gérer-les-déploiements-complexes-d-applications-web
publié le: 2012-08-09

Les déploiements d'applications web sont complexes dès le départ. On commence souvent avec au moins un déploiement de mise en scène et un déploiement de production. Ajoutez à cela le multi-tenancy, les configurations pour les intégrations tierces comme l'authentification Facebook ou Salesforce, les configurations pour le stockage cloud et les réseaux de distribution de contenu, les environnements d'intégration continue, le thème multi-client, les configurations SSL, les configurations vhost, les configurations de processus de construction pour les frontends js, la configuration des tâches en arrière-plan, la configuration du traitement des téléchargements, la liste continue… explosion combinatoire.

Chez dojo4, nous avons une pile d'applications web basée sur rails et nous utilisons Multistage Capistrano pour le déploiement sur les nœuds AWS EC2. Nous avons trouvé une stratégie simple pour gérer la grande variété de configurations et d'exigences de déploiement que nos clients nous ont présentées. La stratégie implique une tâche rake qui utilise une variable d'environnement RAILS_STAGE basée sur l'étape Multistage Capistrano. Nous configurons une structure de fichiers pour les configurations spécifiques au déploiement dans repo_root/config/deploy/files/RAILS_STAGE qui est structurée de manière identique au système de fichiers du référentiel source. Pendant le déploiement cap, avant le lien symbolique actuel ou les processus de construction, la tâche rake copie de manière récursive repo_root/config/deploy/files/RAILS_STAGE dans repo_root.

Nous avons constaté que cette stratégie permet de garder les configurations de déploiement complexes bien organisées de manière à ce qu'elles soient faciles à comprendre et n'ajoutent pas beaucoup de complexité supplémentaire à une architecture déjà complexe.

Le gist ci-dessous démontre cette idée. À l'origine, cette tâche utilisait diverses bibliothèques rails. Cependant, j'ai pu supprimer les dépendances rails tout en maintenant la fonctionnalité de la tâche afin que vous puissiez l'utiliser avec n'importe quelle pile d'applications.