Cloud & DevOps
Official siteKamal
Kamal — single-command, zero-downtime deployment to plain VPS servers using Docker, without the orchestration overhead.
Overview
Kamal is the deploy tool that brings zero-downtime releases to a simple server: it builds the image, runs a new container alongside the old one, and flips traffic via a proxy with no downtime. It is the pragmatic middle ground between raw SSH deploys and full orchestration.
I use it when the complexity budget says "one or a few servers" rather than a Kubernetes cluster. Config is a simple YAML, deploy is a single command, and rollbacks are instant because each release is a container built from a known image.
It fits a modern Docker-first workflow neatly: same image, simpler ops. For a product team that wants boring, fast, reliable deploys without a control plane, Kamal does the job with far less machinery.
The zero-downtime trick is what makes it production-ready. A new container boots alongside the old one, and the proxy switches traffic once it is healthy — so releases are seamless rather than a visible service interruption.
The config stays boring on purpose. A single YAML file describes servers, env, and the image build, which means deploys are repeatable without the explosion of primitives an orchestrator would bring to the same job.
Rollback is a first-class, one-line operation. Because every release is a container tagged from a known image, reverting is just picking the previous container — a safety net that makes forward progress feel cheap and safe.
It slots cleanly into a Docker-first workflow. I build a disciplined image once and Kamal handles the deploy surface, keeping the toolchain comfortable instead of introducing a parallel deployment paradigm.
Secrets and environment are handled cleanly without baking them into images. The env is managed per-deploy, so the same artifact runs in multiple environments with different configuration.
Kamal is the right tool at a specific scale — and I deploy only when that is the case. Below a full orchestrator's worth of complexity, it delivers the calm, fast, reliable deploy a product team actually wants with a fraction of the machinery.
How I Work With Kamal
I reach for Kamal when the estate is one or a few servers and the complexity budget rules out an orchestrator. It is the middle ground between raw SSH and Kubernetes.
Deploys are a single command. Config is a simple YAML describing servers, env, and the image build, so releasing is repeatable without a pile of runbooks.
The zero-downtime mechanism is treated as the contract. A new container boots alongside the old, the proxy flips traffic once it is healthy, and releases are seamless rather than a visible outage.
Rollback is a first-class, one-line operation. Because every release is a tagged container, reverting is picking the previous one — which makes forward progress feel safe.
The image is built once with the discipline I use anywhere. A clean, versioned Docker artifact feeds Kamal, so the deploy surface stays comfortable.
Env and secrets are managed per-deploy without baking into the image. The same artifact runs across environments with different configuration.
I keep the config versioned. The deploy target and settings live in the repo, so the delivery path is auditable and reproducible by anyone.
Health is gated. Only a healthy new container takes traffic, so a bad boot does not serve users.
Boring, fast, reliable deploys are the aim — and Kamal delivers them with a fraction of the machinery of a full orchestrator, which is exactly when it is the right tool.