Comment Déployer des Applications Web avec Kamal : Déploiement Efficace d’Applications Conteneurisées

Comment Déployer des Applications Web avec Kamal : Déploiement Efficace d’Applications Conteneurisées

Le déploiement d’une application web conteneurisée peut souvent sembler décourageant. Kamal est un outil conçu pour rationaliser et simplifier le déploiement d’applications web, rendant votre flux de travail plus efficace et plus fiable.

Dans cet article, vous apprendrez à déployer des applications web à l’aide de Kamal sur un serveur privé virtuel (VPS). Nous vous présenterons également plusieurs bonnes pratiques pour améliorer le processus de déploiement de vos applications.

À la fin de ce guide, vous serez bien équipé pour tirer parti de la puissance de Kamal dans vos projets. Commençons par le commencement.

Kamal est un outil de déploiement qui facilite le déploiement efficace des applications web. Il intègre les services et les opérations essentiels dans un flux de travail cohérent, ce qui rend le déploiement d’applications web avec Kamal plus rationnel et moins sujet aux erreurs.

Conçu pour gérer et automatiser le déploiement des applications web, Kamal réduit la complexité souvent associée à la gestion manuelle des serveurs et des services. Il permet aux développeurs de se concentrer sur la création et la mise à jour de leurs applications web sans avoir à se préoccuper de la logistique de déploiement.

Kamal prend en charge des déploiements allant d’un serveur métallique nu à une simple machine virtuelle. Il offre des déploiements sans temps d’arrêt, des redémarrages en continu, des ponts d’actifs, des constructions à distance et une gestion complète des services accessoires.

Avec Kamal, vous pouvez déployer sans effort des applications web, configurer des serveurs, gérer des bases de données et équilibrer le trafic. Cet outil prend en charge divers environnements, ce qui le rend polyvalent pour le déploiement d’applications web sur différentes plateformes.

Pourquoi utiliser Kamal pour le déploiement d’applications Web ?

Page d'accueil officielle de Kamal

Choisir Kamal pour le déploiement de votre application web offre plusieurs avantages aux développeurs et aux entreprises. Voici ce qui distingue Kamal :

  • Simplicité – L’approche directe de Kamal en matière de déploiement permet d’éviter la courbe d’apprentissage souvent abrupte associée à d’autres outils de déploiement. Il simplifie le processus en permettant le déploiement d’applications à l’aide de quelques commandes Linux seulement.
  • Automatisation – L’automatisation de Kamal pour les déploiements rationalise vos flux de travail. Des mises à jour à la mise à l’échelle, Kamal automatise ces tâches, garantissant qu’elles sont accomplies rapidement et de manière cohérente. Cela signifie moins de temps pour les processus manuels et plus de temps pour le développement.
  • Fiabilité – avec Kamal, vous pouvez vous attendre à des versions stables. Son processus de déploiement structuré minimise les erreurs qui peuvent survenir lors de déploiements manuels, garantissant ainsi le bon fonctionnement et la fiabilité de votre application web.
  • Adéquation – Kamal est exceptionnellement compatible avec les environnements VPS Linux. Son alignement avec les serveurs Linux signifie que vous pouvez exploiter tout le potentiel et la flexibilité du déploiement d’applications sur un hébergement VPS Linux.

Comment déployer des applications Web à l’aide de Kamal

Dans cette section, vous apprendrez à utiliser Kamal pour rationaliser le processus de déploiement de votre application web.

1. Préparer le déploiement

Qu’il s’agisse d’une machine locale ou d’un serveur virtuel, la préparation des conditions préalables garantit un déploiement fluide de l’application web avec Kamal. Dans cet exemple, nous utiliserons l’hébergement VPS d’Hostinger pour configurer votre environnement en vue du déploiement d’une application web.

Le VPS d’Hostinger offre un serveur fiable qui prépare le terrain pour vos besoins de déploiement. Il offre des mesures de sécurité de premier ordre, une évolutivité facile pour croître en même temps que votre application, et un assistant IA pour simplifier vos processus de développement et de déploiement.

Après avoir préparé votre VPS, accédez à votre serveur avec PuTTY ou tout autre client SSH. Ensuite, mettez à jour vos paquets Linux avec les commandes SSH suivantes :

sudo apt-get update && sudo apt-get upgrade

Ensuite, configurez l’environnement logiciel requis par votre application web, ce qui peut inclure l’installation d’un serveur web tel qu’Apache ou NGINX et la configuration d’une base de données telle que MySQL ou PostgreSQL. Il est également essentiel de sécuriser votre serveur à l’aide de pare-feu et de clés SSH pour un accès sécurisé.

Si vous développez une application Rails, assurez-vous que Ruby on Rails est installé. Sinon, vous pouvez installer Docker et gérer les conteneurs pour votre application.

2. Installer et déployer avec Kamal

Une fois que votre environnement est prêt, procédez à l’installation de Kamal. Pour ceux qui ont un environnement Ruby, installez Kamal globalement sur votre VPS Linux avec la commande suivante :

gem install kamal

Cela rend Kamal accessible à partir de n’importe quel répertoire de votre serveur.

Si vous préférez la conteneurisation dans les déploiements de Kamal, tirez l’image Docker et définissez un alias dans votre fichier de configuration shell. Cela vous permet d’utiliser les commandes Kamal sans installer les dépendances sur votre serveur.

Ensuite, naviguez vers le répertoire config et ouvrez le fichier deploy.yml. Ici, vous pouvez spécifier des détails tels que les étapes de déploiement, les adresses IP publiques et l’URL du référentiel pour le contrôle de version avec Kamal.

Votre fichier deploy.yml inclura également les détails du registre. Si vous utilisez Docker Hub, vous n’aurez pas besoin de spécifier un serveur car c’est le serveur par défaut.

Voici un exemple basique de ce que le contenu de deploy.yml pourrait inclure :

# Your web app name. Used to uniquely configure containers.
service: hey
# Your image host or container image name
image: 37s/hey
servers:
  - 192.168.0.1
  - 192.168.0.2
registry:
  # The container registry server, if you're not using Docker Hub
  # server: ghcr.io / ...
  username: registry-user-name
  password:
    secure: KAMAL_REGISTRY_PASSWORD
env:
  secret:
    secure: RAILS_MASTER_KEY
#Configure a custom healthcheck
healthcheck:
  path: /healthz
  port: 4000
  max_attempts: 7
  interval: 20s

N’oubliez pas de sécuriser vos informations d’identification en remplaçant KAMAL_REGISTRY_PASSWORD par votre jeton d’accès au registre Docker.

Une fois le fichier de configuration configuré, il est temps de lancer le processus de déploiement. Pour le déploiement initial, exécutez :

kamal setup

Il prépare vos serveurs en créant des répertoires, en définissant des autorisations et en effectuant d’autres tâches nécessaires.

Pour les déploiements ultérieurs, utilisez :

kamal deploy

Cette commande exécute les tâches décrites dans votre fichier deploy.yml, telles que les mises à jour de code, les migrations et les redémarrages de service.

3. Pousser les fichiers d’environnement

Pour déployer efficacement votre application web à l’aide de Kamal, il est essentiel de gérer méticuleusement vos fichiers d’environnement. Ces fichiers contiennent des variables d’environnement essentielles à la configuration de votre application dans les différents environnements de développement, de test et de production.

Pour des raisons de sécurité, les fichiers ENV de votre application ne devraient jamais être inclus dans le contrôle de version. Au lieu de cela, utilisez les fonctions robustes de gestion de l’environnement de Kamal pour transférer ces fichiers sur votre serveur en toute sécurité.

Commencez par sécuriser votre fichier d’environnement dans un lieu de stockage sûr. Envisagez d’utiliser le VPS de Hostinger pour gérer de manière fiable les variables d’environnement de votre application, en veillant à ce qu’elles soient appliquées de manière sécurisée et maintenues de manière cohérente tout au long du déploiement.

Ensuite, utilisez la commande kamal env push pour transférer le fichier vers votre serveur en toute sécurité.

Chaque fois que vous ajoutez de nouvelles variables d’environnement ou que vous modifiez des variables existantes dans votre fichier ENV, n’oubliez pas de pousser ces mises à jour vers vos serveurs distants à l’aide de la commande kamal env push. Avant d’exécuter la commande kamal deploy, effectuez cette étape pour vous assurer que votre processus de déploiement incorpore les variables mises à jour dans le conteneur de votre application.

Ces procédures sont essentielles pour faire fonctionner correctement les services et les conteneurs Docker, car elles s’appuient sur les paramètres de configuration corrects fournis par les variables d’environnement.

4. Exécuter des commandes sur des serveurs

Pour simplifier la gestion de vos applications web, Kamal propose une fonction conviviale qui vous permet d’exécuter des commandes à travers votre infrastructure de serveurs de manière efficace.

Par exemple, pour lancer une commande sur tous vos serveurs afin de vérifier la version de Ruby, vous devez utiliser :

kamal app exec 'ruby -v'

La sortie confirmera la version de Ruby sur chaque hôte de l’application, par exemple :

App Host: 192.168.0.1
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
App Host: 192.168.0.2
ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]

Pour cibler uniquement le serveur primaire, la commande serait la suivante :

kamal app exec --primary 'cat .ruby-version'

Si vous devez exécuter une commande liée à Rails sur tous les serveurs, par exemple pour vérifier la configuration de l’environnement Rails, vous devez saisir ce qui suit :

kamal app exec 'bin/rails about'

Le résultat devrait ressembler à ceci :

App Host: 192.168.0.1
About your application's environment
Rails version:             7.1.0.alpha
Ruby version:              ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
RubyGems version:          3.3.26
Rack version:              2.2.5
Middleware:                ActionDispatch::HostAuthorization, Rack::Sendfile, ActionDispatch::Static, ActionDispatch::Executor, Rack::Runtime, Rack::MethodOverride, ActionDispatch::RequestId, ActionDispatch::RemoteIp, Rails::Rack::Logger, ActionDispatch::ShowExceptions, Action Dispatch::DebugExceptions, Action Dispatch::Callbacks, Action Dispatch::Cookies, Action Dispatch::Session::CookieStore, Action Dispatch::Flash, Action Dispatch::ContentSecurityPolicy::Middleware, Action Dispatch::PermissionsPolicy::Middleware, Rack::Head, Rack::ConditionalGet, Rack::ETag, Rack::TempfileReaper
Application root:          /rails
Environment:               production
Database adapter:          sqlite3
Database schema version:   20221231233303

Pour les tâches plus interactives comme le lancement d’une console Rails ou d’une session bash, Kamal simplifie le processus. Il suffit d’exécuter les commandes suivantes pour démarrer une session bash dans un nouveau conteneur d’image d’application ou dans le conteneur Docker en cours d’exécution :

# New container bash session
kamal app exec -i bash
# Reuse the current container for bash session
kamal app exec -i --reuse bash
# New container Rails console
kamal app exec -i 'bin/rails console'

5. Vérifier l’état du serveur avec Kamal Details

Comprendre l’état de vos serveurs est crucial pour maintenir leur santé et assurer le bon fonctionnement de vos applications. Kamal fournit un moyen efficace de surveiller cet état grâce à la commande details.

L’exécution de kamal details vous donne un aperçu de vos conteneurs, de leur état et de leurs performances. Voici ce que vous verrez généralement :

Pour les conteneurs Traefik :

Traefik Host: 192.168.0.1
CONTAINER ID   IMAGE    COMMAND                 CREATED          STATUS          PORTS
6195b2a28c81   traefik  "/entrypoint.sh…" 30 minutes ago   Up 19 minutes   0.0.0.0:80->80/tcp...

Pour vos conteneurs d’application :

App Host: 192.168.0.1
CONTAINER ID   IMAGE                     COMMAND          CREATED         STATUS          PORTS
badb1aa51db3   registry.domain.tld/...  "/rails/bin/…"  13 minutes ago  Up 13 minutes   3000/tcp

Cette sortie vous permet de vérifier rapidement que les conteneurs sont opérationnels et que les ports sont correctement mappés, ce qui indique un état de serveur sain.

Pour une inspection plus ciblée, vous pouvez restreindre les détails à des conteneurs spécifiques à l’application ou à Traefik en utilisant respectivement kamal app details ou kamal traefik details.

Ces commandes ciblées fournissent un accès direct aux journaux et aux spécificités des conteneurs, rationalisant ainsi le processus de gestion des configurations de l’environnement et simplifiant la gestion des erreurs dans les déploiements de Kamal.

6. Déploiements rétroactifs

Lorsqu’un déploiement ne se déroule pas comme prévu, Kamal propose un processus de retour en arrière simple. Il s’agit de réactiver un conteneur Docker précédemment stable. Pour gérer un retour en arrière rapide et efficace, suivez les étapes suivantes :

Tout d’abord, identifiez les anciens conteneurs disponibles à l’aide de la commande kamal app containers. La liste des conteneurs actifs et inactifs s’affichera. Recherchez le dernier conteneur actif par son image ou son ID avant l’échec du déploiement.

Par exemple, vous pouvez voir une sortie indiquant :

App Host: 192.168.0.1
CONTAINER ID   IMAGE               COMMAND                  STATUS
1d3c91ed1f51   [previous_image]    "/rails/bin/docker-e…"   Up 19 minutes
539f26b28369   [failed_image]      "/rails/bin/docker-e…"   Exited (1) 27 minutes ago

Pour revenir en arrière, exécutez kamal rollback [previous_image_tag]. Kamal arrêtera le conteneur problématique actuel et redémarrera le dernier conteneur stable. Le conteneur précédent étant déjà sur l’hôte, le retour en arrière s’effectue rapidement sans avoir à puiser à nouveau dans le registre.

Notez que les anciens conteneurs sont automatiquement purgés au bout de trois jours après un nouveau déploiement de kamal, il est donc conseillé de confirmer le succès de votre déploiement dans ce délai afin de conserver la possibilité d’un retour en arrière rapide.

Il est également essentiel de s’assurer que vous disposez d’une sauvegarde et d’une récupération appropriées avec Kamal afin de vous prémunir contre les problèmes imprévus. L’hébergement VPS d’Hostinger comprend des sauvegardes automatisées, améliorant de façon transparente vos capacités de retour en arrière.

7. Nettoyer les serveurs avec Kamal Remove

La gestion de l’espace et des performances du serveur implique la suppression des applications inutilisées. Avec Kamal, le nettoyage de votre serveur est simple. Pour supprimer une application entière, exécutez la commande kamal remove.

Kamal supprimera ensuite tous les composants associés à l’application sur le serveur, notamment en arrêtant et en supprimant les conteneurs Docker, en effaçant toute image Docker et en supprimant toutes les sessions de registre associées.

Cette commande est pratique pour s’assurer que votre serveur ne soit pas encombré et qu’il fonctionne de manière optimale. Cependant, il est essentiel d’utiliser cette fonctionnalité avec prudence. Avant d’exécuter kamal remove, assurez-vous d’avoir des sauvegardes de toutes les données que vous souhaitez conserver.

8. Redémarrer Traefik

Lorsque vous gérez le proxy inverse et l’équilibreur de charge de votre serveur, il peut arriver que vous deviez redémarrer Traefik, le service qui achemine votre trafic HTTP. Ce besoin survient généralement après des mises à jour des arguments ou des étiquettes de Traefik, nécessitant un redémarrage pour que les changements soient pris en compte.

Pour redémarrer Traefik à l’aide de Kamal, utilisez la commande suivante :

kamal traefik reboot

Cette opération redémarre le service Traefik et met en œuvre vos nouvelles configurations. Cependant, dans un environnement de production, où la stabilité et le temps de fonctionnement sont essentiels, optez pour la fonction de redémarrage progressif :

kamal traefik reboot --rolling

Un redémarrage progressif redémarre méthodiquement les conteneurs Traefik de manière séquentielle, garantissant ainsi l’absence de temps d’arrêt et le maintien d’une fonctionnalité d’équilibrage de charge continue. Cette approche plus sûre garantit que vos applications web restent accessibles aux utilisateurs pendant que les mises à jour se déroulent en arrière-plan.

Meilleures pratiques pour le déploiement d’applications Web avec Kamal

Après avoir appris à déployer votre web app sur un serveur, explorons les meilleures pratiques de déploiement de Kamal pour une gestion fluide et efficace de l’application web.

Automatiser le processus de déploiement

L’automatisation des déploiements par Kamal transforme les tâches manuelles répétitives en une opération en un seul clic. Les commandes et les scripts de Kamal vous permettent d’automatiser la configuration initiale, les mises à jour et la maintenance continue de vos applications web, ce qui rend le processus de déploiement plus rapide et plus fiable en réduisant les erreurs humaines.

L’intégration des outils d’automatisation du déploiement de Kamal dans les pipelines CI/CD améliore encore l’efficacité. Ces pipelines favorisent l’amélioration continue et les mises à jour transparentes, permettant un flux ininterrompu du développement au déploiement.

L’hébergement VPS d’Hostinger est idéalement adapté à ces pratiques, offrant un assistant IA pour rationaliser l’automatisation des scripts pour la gestion et la mise à l’échelle de vos applications web sans effort. Vous pouvez consulter l’assistant IA de Hostinger VPS pour obtenir des instructions sur l’automatisation de votre flux de déploiement.

Par exemple, lancez un prompt VPS IA « Comment automatiser les sauvegardes du serveur de base de données à l’aide de Kamal ? »

Notre assistant IA vous fournira alors un guide complet étape par étape. Vous pouvez poser des questions complémentaires pour approfondir chaque étape si vous avez besoin de plus de détails. L’assistant IA de Hostinger VPS peut également fournir des modèles de code d’application pour accélérer le processus de configuration.

Déployer des opérations simultanées de verrouillage et de sécurité

La gestion des opérations simultanées est essentielle lors du déploiement d’applications web pour éviter les conflits et préserver l’intégrité de vos applications. Kamal facilite cette tâche grâce à une fonction de verrouillage du déploiement, un mécanisme de coordination qui n’autorise qu’un seul déploiement à la fois.

Voici comment intégrer un verrou de déploiement dans vos stratégies de déploiement Kamal :

Avant le déploiement

Lancez un verrou de déploiement pour empêcher le chevauchement des processus de déploiement à l’aide de la commande kamal lock acquire -m « Your reason for locking« . Cette commande crée un répertoire kamal_lock sur le serveur principal, indiquant qu’un processus de déploiement est en cours.

Pendant le déploiement

Vérifiez l’état du verrou avec kamal lock status pour déterminer qui a initié le verrou et dans quel but, ainsi que la version en cours de déploiement. Vous obtiendrez peut-être un résultat similaire à celui-ci :

Locked by: A.N. Other on 2023-03-24 09:49:03 UTC
Version: 77f45c0686811c68989d6576748475a60bf53fc2
Message: Automatic deploy lock

Cette sortie vous permet de rester informé des activités de déploiement en cours et de vous assurer qu’aucune opération conflictuelle n’est menée.

Après un déploiement réussi

Terminez votre déploiement en libérant le verrou de déploiement avec kamal lock release. Cette action est cruciale pour nettoyer l’environnement en vue de futures mises en œuvre et pour garantir des opérations de déploiement continues.

Utiliser des hooks Kamal

Kamal fournit un système de hooks qui permet aux développeurs d’exécuter des scripts personnalisés à des points prédéfinis du processus de déploiement, offrant ainsi une automatisation sur mesure et garantissant l’intégrité et la fiabilité du déploiement. Il existe quatre types de hooks :

  • Hooks de pré-connexion – exécutés avant que Kamal ne prenne un verrou de déploiement et avant de se connecter aux hôtes distants. Ces hooks sont utiles pour les tâches de réchauffement du DNS.
  • Hooks de préconstruction – exécutés avant le début du processus de construction, ils permettent d’effectuer des validations préalables à la construction, telles que la vérification des changements non validés ou l’intégration continue (CI).
  • Hooks de pré-déploiement – déclenchés juste avant le début du déploiement, adaptés aux contrôles finaux tels que la vérification de l’achèvement de l’IC.
  • Hooks post-déploiement – activés après un hook de déploiement, de redéploiement ou de retour en arrière. Les hooks post-déploiement peuvent envoyer des notifications de déploiement ou enregistrer la nouvelle version auprès d’un système de gestion des performances des applications (APM).

Les scripts de ces hooks ont accès à une série de variables d’environnement KAMAL_*, qui fournissent un contexte détaillé sur le déploiement, y compris des horodatages, des informations sur les utilisateurs, des détails sur la version et des listes d’hôtes. Si un script sort avec un statut différent de zéro, le processus de déploiement est interrompu afin d’éviter que des erreurs potentielles ne se propagent.

Voici un exemple de création d’un script de hook post-déploiement qui envoie une notification de déploiement à un chatbot dans Basecamp en utilisant les variables KAMAL_* :

#!/usr/bin/env bash
curl -q -d "content=[My App] ${KAMAL_PERFORMER} Rolled back to version ${KAMAL_VERSION}" https://3.basecamp.com/XXXXX/integrations/XXXXX/buckets/XXXXX/chats/XXXXX/lines

Ce script affiche un message indiquant qui a effectué le retour en arrière et vers quelle version.

Dans les situations où les hooks ne sont pas nécessaires, vous pouvez les contourner en utilisant l’option –skip_hooks lors des commandes de déploiement, ce qui empêche l’exécution de ces scripts personnalisés.

Conclusion

Tout au long de ce guide, vous avez découvert ce qu’est Kamal, ses avantages, et les étapes pour déployer des applications web en utilisant Kamal sur un VPS Linux. Vous avez également appris des astuces de déploiement de Kamal, telles que l’automatisation du flux de travail, la sécurisation des opérations avec les verrous de déploiement, et l’optimisation des processus avec les hooks de Kamal.

Alors que vous continuez à chercher des améliorations pour vos applications web, pensez à utiliser l’hébergement VPS de Hostinger. Nos plans commencent à partir de seulement €5.99/mois, chacun d’entre eux étant doté d’une série de fonctionnalités qui vous permettront d’améliorer votre réussite.

Il s’agit notamment d’instantanés gratuits en temps réel, de sauvegardes hebdomadaires automatiques et de l’accès à un assistant IA, chacun étant conçu pour compléter votre stratégie de déploiement et stimuler les performances de votre projet.

Profitez de la force de l’hébergement VPS d’Hostinger pour vos déploiements d’applications Web alimentées par Kamal. Libérez le plein potentiel de votre présence en ligne en cliquant sur la bannière ci-dessous !

Déployer des applications Web avec Kamal – FAQ

Cette section répondra aux questions les plus courantes sur la manière de déployer des applications web en utilisant Kamal.

Quelles sont les conditions préalables à l’utilisation de Kamal pour déployer des applications Web ?

Avant de déployer avec Kamal, assurez-vous que votre machine a Git installé pour le contrôle de version, un accès SSH à votre serveur pour des connexions sécurisées, et un environnement d’application Rails avec les dépendances nécessaires résolues. Ces prérequis sont cruciaux pour un processus de déploiement transparent de Kamal.

Puis-je déployer différents types d’applications Web avec Kamal ?

Oui, Kamal peut gérer différents types d’applications web au-delà des applications Rails. Il fournit un système de déploiement flexible adapté à divers cadres de web apps, garantissant aux développeurs un déploiement efficace de leurs projets, quelle que soit la technologie sous-jacente.

Kamal est-il adapté à la mise à l’échelle des applications Web ?

Kamal est idéal pour la mise à l’échelle des web apps car il prend en charge le déploiement sur plusieurs hôtes et s’intègre à un équilibreur de charge, essentiel pour la distribution du trafic et la garantie d’une haute disponibilité à mesure que votre base d’utilisateurs et votre trafic s’accroissent.

Author
L'auteur

Chaimaa Chakir

Chaimaa est une spécialiste du référencement et du markting de contenu chez Hostinger. Elle est passionnée par le marketing digital et la technologie. Elle espère aider les gens à résoudre leurs problèmes et à réussir en ligne. Chaimaa est une cinéphile qui adore les chats et l'analyse des films.