Kubernetes est puissant. Mais pour la majorité des projets Rails, c'est aussi une usine à gaz coûteuse et complexe à maintenir. Depuis la version 2, Kamal s'impose comme l'alternative sérieuse : un outil de déploiement minimaliste, open source, pensé pour les équipes qui veulent livrer vite sans sacrifier la fiabilité. Basé sur Docker et SSH, Kamal 2 gère le cycle de vie complet de vos conteneurs directement sur vos serveurs. Zéro abstraction inutile, zéro vendor lock-in. Dans ce guide, nous allons voir comment configurer Kamal 2 de A à Z pour déployer une application Ruby on Rails en production, avec load balancer intégré, gestion des secrets et rollback automatique. Que vous soyez développeur solo ou tech lead d'une startup, ce guide vous donnera toutes les clés pour maîtriser votre infrastructure sans dépendre d'une plateforme tierce.

Kamal 2 : qu'est-ce que c'est exactement ?

Kamal 2 est un outil de déploiement open source développé par 37signals, la société derrière Ruby on Rails et Basecamp. Il est conçu pour déployer des applications conteneurisées sur des serveurs bare metal ou VPS via SSH et Docker.

Une réponse concrète à la complexité Kubernetes

Kubernetes demande une expertise DevOps pointue et une infrastructure dédiée. Pour une startup ou une PME, le coût humain et technique est rarement justifié. Kamal 2 résout ce problème en offrant un déploiement robuste avec une courbe d'apprentissage très faible.

Ce que Kamal 2 apporte concrètement

Kamal Proxy : le remplaçant de Traefik

Kamal 2 abandonne Traefik au profit de Kamal Proxy, un reverse proxy maison ultra-léger. Il gère automatiquement le SSL via Let's Encrypt et assure le trafic sans interruption lors des déploiements.

« Kamal 2 vous donne la puissance d'un déploiement professionnel sans la complexité d'une plateforme d'orchestration. C'est du DevOps pour les développeurs. »

Prérequis techniques

Avant de commencer, vous aurez besoin de :

Configurer Kamal 2 pour une app Rails

La configuration de Kamal 2 repose sur deux fichiers principaux : config/deploy.yml et .kamal/secrets. Voici comment les structurer correctement pour une app Rails en production.

Installation de Kamal 2

Kamal s'installe comme une gem Ruby. Ajoutez-la à votre Gemfile ou installez-la globalement :

Avec gem install kamal, vous avez accès à la commande kamal en global. Rails 7.2+ intègre Kamal par défaut dans le Gemfile généré. Exécutez ensuite kamal init pour créer la structure de configuration.

Structure du fichier deploy.yml

Le fichier config/deploy.yml est le cœur de votre configuration. Il définit :

Exemple minimal pour une app Rails avec PostgreSQL :

Le champ proxy.ssl: true active automatiquement Let's Encrypt. Kamal gère le renouvellement des certificats sans intervention manuelle.

Gestion des secrets avec Kamal Secrets

Depuis Kamal 2, les secrets sont stockés dans .kamal/secrets (gitignore par défaut). Vous pouvez les sourcer depuis l'environnement local, un fichier dotenv, ou directement depuis 1Password.

« Ne stockez jamais vos clés API ou DATABASE_URL en clair dans deploy.yml. Utilisez systématiquement Kamal Secrets ou des variables d'environnement chiffrées. »

Configuration du Dockerfile Rails

Rails 7.2+ génère un Dockerfile optimisé pour la production. Quelques ajustements recommandés :

Déployer en production avec Kamal 2

Une fois la configuration en place, le déploiement se fait en une seule commande : kamal setup pour le premier déploiement, puis kamal deploy pour les suivants.

Premier déploiement : kamal setup

kamal setup effectue dans l'ordre :

Déploiements suivants : kamal deploy

Les déploiements suivants utilisent kamal deploy. Kamal build l'image Docker, la pousse vers le registry, puis effectue un rolling update zero-downtime sur vos serveurs. Le trafic bascule instantanément vers la nouvelle version une fois les health checks validés.

Rollback et gestion des incidents

En cas de problème, kamal rollback restaure l'image précédente en moins de 30 secondes. Vous pouvez également utiliser :

Déploiements multi-environnements

Kamal 2 supporte les destinations multiples via le flag --destination. Créez un fichier config/deploy.staging.yml pour votre environnement de staging. La commande kamal deploy --destination staging déploie sur vos serveurs de staging avec la configuration dédiée.

Kamal 2 vs Kubernetes : quel outil choisir ?

Le choix entre Kamal 2 et Kubernetes dépend de la taille de votre équipe, de votre charge applicative et de votre budget DevOps. Voici une comparaison objective.

CritèreKamal 2Kubernetes
Courbe d'apprentissageFaible (1-2 jours)Élevée (plusieurs semaines)
Infrastructure requise1 VPS suffitCluster minimum 3 nœuds
Coût mensuelDès 5€/mois (Hetzner)200€+ (managed cluster)
Zero-downtimeOui (Kamal Proxy)Oui (rolling updates)
Auto-scalingNon (manuel)Oui (HPA)
RollbackEn 30 secondesEn 1-5 minutes
SSL automatiqueOui (Let's Encrypt)Via cert-manager
Équipe DevOps dédiéeNon nécessaireIndispensable

Quand choisir Kamal 2

Kamal 2 est le choix idéal pour :

Quand Kubernetes reste pertinent

Kubernetes garde l'avantage pour les architectures microservices complexes avec des centaines de services, un besoin d'auto-scaling dynamique et des équipes DevOps dédiées. Pour 95% des apps Rails en production, Kamal 2 est largement suffisant.

Le coût réel de l'infrastructure

Un cluster Kubernetes managé (GKE, EKS, AKS) coûte en moyenne 300 à 800€/mois pour une app medium traffic. Avec Kamal 2 sur un VPS Hetzner CX31 (12€/mois), vous obtenez 4 vCPU, 8 Go RAM et des performances suffisantes pour servir des milliers d'utilisateurs simultanés.

Bonnes pratiques et cas d'usage avancés

Maîtriser Kamal 2 ne se résume pas à lancer kamal deploy. Voici les pratiques qui font la différence entre un déploiement fragile et une infrastructure production-ready.

Automatiser le déploiement avec GitHub Actions

Intégrez Kamal 2 dans votre pipeline CI/CD avec GitHub Actions. Créez un workflow qui déclenche automatiquement kamal deploy après un push sur la branche main. Stockez vos secrets (clé SSH, registry token) dans les GitHub Secrets de votre repository.

Surveiller votre app en production

Kamal ne fournit pas de monitoring natif. Combinez-le avec :

Sauvegardes automatiques avec un accessoire

Déclarez un accessoire Kamal dédié aux sauvegardes PostgreSQL. Utilisez pg_dump dans un conteneur schedulé via cron. Envoyez les dumps chiffrés vers un bucket S3 ou Backblaze B2. Une bonne sauvegarde est la première ligne de défense de votre production.

« Un déploiement sans sauvegarde automatisée n'est pas un déploiement en production. C'est un jeu de hasard. »

Scaling horizontal avec Kamal 2

Kamal 2 supporte le scaling horizontal manuel. Ajoutez simplement de nouveaux serveurs dans votre liste servers et relancez kamal deploy. Kamal Proxy distribue automatiquement le trafic entre tous les serveurs configurés. Pour aller plus loin dans la maîtrise de votre stack Rails, consultez notre guide Ruby on Rails 2026 : le guide pro pour livrer vite. Notre agence Ruby on Rails configure et gère l'infrastructure Kamal 2 en production pour vous. Si vous souhaitez évaluer le coût d'une refonte ou d'un nouveau projet, notre article sur les prix du développement Ruby on Rails en 2026 vous donnera des repères concrets. Enfin, n'oubliez pas que la visibilité de votre app passe aussi par le SEO : découvrez notre guide sur le suivi de position SEO pour piloter votre référencement.

FAQ

Kamal 2 fonctionne-t-il avec tous les hébergeurs VPS ?

Oui. Kamal 2 fonctionne avec n'importe quel VPS accessible en SSH avec Ubuntu 20.04+ ou Debian 11+. Les hébergeurs les plus utilisés sont Hetzner, DigitalOcean, OVH et Scaleway.

Hetzner est particulièrement recommandé pour son excellent rapport qualité/prix. Un serveur CX31 à 12€/mois suffit pour la plupart des applications Rails en production.

Peut-on utiliser Kamal 2 sans Docker Hub ?

Oui. Kamal 2 est compatible avec tous les registries Docker conformes à l'OCI standard. Vous pouvez utiliser GitHub Container Registry (GHCR), GitLab Registry, ou votre propre registry privé.

GHCR est gratuit pour les repositories publics et offre 500 Mo de stockage gratuit pour les repos privés. C'est souvent le meilleur choix pour les équipes déjà sur GitHub.

Kamal 2 gère-t-il les migrations de base de données automatiquement ?

Oui. Vous pouvez configurer les migrations dans la section boot.cmd ou via un hook pre-deploy dans votre configuration Kamal. Rails exécute alors rails db:migrate avant chaque déploiement.

Attention : prévoyez des migrations rétrocompatibles (backward-compatible) pour éviter les erreurs lors du zero-downtime deployment. La stratégie expand-and-contract est recommandée.

Quelle est la différence entre Kamal 1 et Kamal 2 ?

Kamal 2 (sorti fin 2024) apporte trois changements majeurs : le remplacement de Traefik par Kamal Proxy (plus simple, plus rapide), la refonte de la gestion des secrets avec Kamal Secrets, et une meilleure gestion des accessoires Docker.

Kamal 2 simplifie aussi la configuration des builds multi-arch et améliore les performances des déploiements sur des flottes de serveurs importantes. La migration depuis Kamal 1 est documentée et prend en général moins d'une heure.

Faut-il un expert DevOps pour utiliser Kamal 2 en production ?

Non. C'est précisément l'objectif de Kamal : permettre à un développeur Rails de déployer en production sans expertise DevOps avancée. La configuration initiale prend 1 à 2 heures pour un développeur qui découvre l'outil.

Pour les entreprises qui souhaitent externaliser cette mise en place, les équipes d'Akolads peuvent vous accompagner de la configuration initiale jusqu'au maintien en condition opérationnelle. Contactez-nous pour en discuter.