Blog
Deployment, done plainly.
Comparison guides, deployment tutorials and field notes. New posts every two weeks.
Nov 11, 2025 · 6 min read
Git hooks for deploy discipline
A three-line pre-push hook stops a specific class of Monday-morning incident. The hook is in the repo. The habit is in the hook.
git Nov 3, 2025 · 5 min read
The 30-second deploy timeout
mod_fastcgi's idle timeout is exactly 30 seconds. Under cgi-fcgi, flush() does nothing. The only fix that worked was calling exit() right after.
deployment Oct 28, 2025 · 5 min read
Blue-green on a 5-euro VPS
Two nginx upstreams and a one-line config swap give you blue-green on any box, without a load balancer or second server.
deployment Oct 21, 2025 · 5 min read
Three years of pull-based deploys
Push-based deploys have CI pushing to production. Pull-based has the server fetching. After three years on pull, I lost one hour to a bug and zero to leaked credentials.
deployment Oct 14, 2025 · 5 min read
When a deploy succeeds but your app is down
The deploy pipeline is green. Customers see errors. The gap is almost always in what the health check is actually checking.
deployment Oct 7, 2025 · 5 min read
Stop deploying on Fridays (but actually)
The real rule isn't about the day of the week. It's about whether the person who can fix what breaks is about to be offline.
deployment Sep 30, 2025 · 5 min read
Post-deploy checks that actually catch things
A health check that only returns 200 is a tautology. The check has to verify the new code path AND the read path, against a known value.
deployment Sep 25, 2025 · 6 min read
SSH deploy keys versus personal keys
A per-repo deploy key with read-only access is the only SSH key a production server should ever hold. Your personal key isn't part of the deploy.
ssh Sep 18, 2025 · 5 min read
Branch-to-domain mapping, in practice
Treat domains as separate destinations, not mirrors. Then the branch-per-domain pattern stops fighting with itself.
deployment Sep 11, 2025 · 5 min read
The staging branch that lied to me
Staging looked green for three weeks. Production was not. The environment variable had diverged after a copy-paste, and nobody noticed.
staging Sep 4, 2025 · 5 min read
Atomic symlink deploys, step by step
A releases/ directory, a current symlink, and shared/ for things that survive across releases. The only tricky part is permissions on the shared uploads folder.
deployment Aug 29, 2025 · 4 min read
Rolling back is not rolling forward
If your rollback plan is 'deploy the previous commit', you don't have a rollback plan. You have a second deployment that can also fail.
deployment