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
- Déploiements zero-downtime grâce au load balancer Kamal Proxy (intégré depuis la v2).
- Gestion des secrets chiffrés avec Kamal Secrets, compatible dotenv et 1Password.
- Rollback instantané vers l'image Docker précédente en une commande.
- Multi-serveurs : déployez sur 1 ou 50 serveurs avec la même configuration.
- Accessoires Docker : base de données, Redis, Sidekiq gérés nativement.
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 :
- Un VPS Linux (Ubuntu 22.04 LTS recommandé) avec accès SSH root.
- Docker installé sur le serveur (Kamal l'installe automatiquement si absent).
- Un registry Docker : Docker Hub, GitHub Container Registry ou GitLab Registry.
- Ruby 3.2+ et Rails 7.1+ sur votre machine locale.
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 :
- service : le nom de votre application.
- image : l'image Docker sur votre registry.
- servers : la liste des IP de vos serveurs.
- proxy : la configuration SSL et le domaine.
- accessories : les services annexes (PostgreSQL, Redis).
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 :
- Multi-stage build : séparez la phase d'assets et la phase d'exécution.
- Utilisateur non-root : créez un utilisateur dédié pour la sécurité.
- ENTRYPOINT : utilisez
./bin/docker-entrypointgénéré par Rails.
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 :
- Installation de Docker sur le serveur si absent.
- Démarrage de Kamal Proxy en tant que conteneur Docker.
- Push de l'image vers le registry depuis votre machine locale.
- Démarrage des accessoires (base de données, Redis).
- Lancement de l'app et exécution des migrations Rails.
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 :
kamal app logs: accès aux logs en temps réel.kamal app exec: exécuter une commande dans un conteneur en production.kamal app restart: redémarrer l'app sans rebuild.
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ère | Kamal 2 | Kubernetes |
|---|---|---|
| Courbe d'apprentissage | Faible (1-2 jours) | Élevée (plusieurs semaines) |
| Infrastructure requise | 1 VPS suffit | Cluster minimum 3 nœuds |
| Coût mensuel | Dès 5€/mois (Hetzner) | 200€+ (managed cluster) |
| Zero-downtime | Oui (Kamal Proxy) | Oui (rolling updates) |
| Auto-scaling | Non (manuel) | Oui (HPA) |
| Rollback | En 30 secondes | En 1-5 minutes |
| SSL automatique | Oui (Let's Encrypt) | Via cert-manager |
| Équipe DevOps dédiée | Non nécessaire | Indispensable |
Quand choisir Kamal 2
Kamal 2 est le choix idéal pour :
- Les startups et PME qui veulent une infra simple et maîtrisée.
- Les équipes Rails sans DevOps dédié.
- Les apps avec trafic prévisible sans besoin d'auto-scaling agressif.
- Les projets avec budget infra limité (VPS Hetzner à 5-20€/mois).
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 :
- Sentry : pour le tracking des erreurs Rails en temps réel.
- Uptime Robot : pour les alertes de disponibilité (gratuit jusqu'à 50 monitors).
- Grafana + Prometheus : pour les métriques système avancées.
- Logflare ou Papertrail : pour la centralisation des logs.
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.