Zero-downtime deploys without Kubernetes: a practical look at Kamal
Kamal ships containers to plain Linux servers over SSH and swaps traffic with a tiny proxy. Here's how the pieces fit, and when it's the right tool.
Topic
Deployment, infrastructure, CI/CD and observability.
Kamal ships containers to plain Linux servers over SSH and swaps traffic with a tiny proxy. Here's how the pieces fit, and when it's the right tool.
The "three pillars" of observability answer different questions. Knowing which one to reach for saves hours during an incident.
Every deploy strategy trades speed, cost and blast radius differently. Here's how the three common ones compare and when each makes sense.
Most slow Docker builds come down to layer ordering. A few structural habits make rebuilds dramatically faster.
A health check that always returns 200 is worse than none. Separate "is the process alive?" from "can it serve traffic?" and your deploys get safer.
Shipping code and turning on a feature don't have to happen at the same moment. Flags make releases boring — if you also clean them up.
Renaming a column sounds trivial until old and new code run at the same time. The expand/contract pattern makes schema changes safe during live deploys.
Declaring infrastructure in version control makes it reviewable and repeatable. It also has sharp edges — state, secrets and drift.
100% uptime is the wrong goal. Service level objectives turn reliability into a number you can plan around, and error budgets tell you when to slow down.
Free-form log lines are easy to write and painful to search. Emitting events with consistent fields turns logs into data.