Kamal logo

Cloud & DevOps

Official site

Kamal

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.

Key Capabilities

Zero-downtime container deploys with seamless proxy traffic switching.
Single-command deployments and immediate rollbacks.
Simple YAML config — no orchestrator needed below cluster scale.
Builds on Docker images with env and secrets handled cleanly.
The pragmatic choice between raw SSH and Kubernetes.