Kubernetes Is Overkill for Most Apps
You have one app, one database, and one worker process. Kubernetes wants you to learn pods, services, deployments, ingresses, ConfigMaps, Secrets, HPA, PDB, and 47 YAML files.
Kamal: Zero-Downtime Docker Deployment
Kamal (from the makers of Ruby on Rails) deploys Docker containers to any server with zero downtime. No Kubernetes. No orchestrator. Just SSH and Docker.
How It Works
- You have a server with Docker installed
- Kamal builds your Docker image
- Kamal deploys it via SSH
- Traefik handles routing and SSL
- Zero downtime — old container runs until new one is healthy
Config in 10 Lines
# config/deploy.yml
service: my-app
image: my-app
servers:
web:
hosts:
- 1.2.3.4
worker:
hosts:
- 1.2.3.4
cmd: bin/jobs
registry:
username: myuser
password:
- KAMAL_REGISTRY_PASSWORD
env:
secret:
- DATABASE_URL
- REDIS_URL
Deploy
kamal setup # First time: install Docker, Traefik, deploy
kamal deploy # Subsequent: build, push, deploy with zero downtime
kamal rollback # Something wrong? Roll back in 10 seconds
What You Get
- Zero-downtime deploys (health checks, rolling restart)
- Automatic SSL via Traefik + Let's Encrypt
- Multi-server deploys from one config
- Accessory services: deploy Redis, PostgreSQL alongside your app
- Rolling deploys: update servers one at a time
-
Audit trail:
kamal auditshows deploy history
Kamal vs Alternatives
| Feature | Kamal | Docker Compose | Kubernetes | Coolify |
|---|---|---|---|---|
| Zero downtime | Yes | No | Yes | Yes |
| Complexity | Low | Low | Very High | Low |
| Multi-server | Yes | No | Yes | Yes |
| SSL | Auto | Manual | Manual | Auto |
| UI Dashboard | No (CLI) | No | Dashboard | Yes |
| Learning curve | 1 day | 1 hour | Weeks | 1 day |
When to Use Kamal
- Small to medium apps that need reliable deployment
- Teams that know Docker but do not want Kubernetes
- Rails apps (Kamal was built for Rails at Basecamp/HEY)
- Any Dockerized app on any server
When to Use Something Else
- Need a UI: Use Coolify instead
- Large scale: 50+ services → consider Kubernetes
- Zero ops: Use Vercel/Railway
Install
gem install kamal
kamal init
kamal setup
Works with any Docker container — Ruby, Python, Node.js, Go, Rust.
Deploy scrapers to your own infrastructure. 88+ scrapers on Apify. Custom: spinov001@gmail.com
Top comments (0)