Blog

Deployment, done plainly.

Comparison guides, deployment tutorials and field notes. New posts every two weeks.

All apachebashci-cddeploymentdnsenvironmentsfeature-flagsgitgithubmonitoringnginxopinionphpreflectionrollbacksecuritysshstagingsymlinksteam-processtroubleshootingtutorial
Latest · Nov 18, 2025 · 5 min read

Feature flags and real rollback

A feature flag system with a bounded kill-switch is one table, one function, one circuit breaker. That's what rollback looks like for small teams.

Read post →
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