Blog
Notes from actual engagements — CI/CD, Kubernetes, and Linux, written by the people who did the work.
Zero-downtime deploys with Nginx and PM2
How to ship a new Node.js release without dropping a single request — using PM2 cluster mode and an Nginx upstream, no Kubernetes required.
GitLab CI vs GitHub Actions: runners, caching, and when to self-host
Both platforms will build and deploy your app. The real decision is where your runners live and who's responsible for them.
Kubernetes autoscaling: HPA vs cluster autoscaler, and why they're not the same thing
The Horizontal Pod Autoscaler scales your pods. The cluster autoscaler scales your nodes. Confusing the two is why "autoscaling" doesn't work the way people expect.
A practical checklist for hardening a fresh Rocky Linux server
The dozen things we do before a new server goes anywhere near production traffic — in order, with the actual commands.
A Kubernetes production readiness checklist that isn't just YAML linting
kubectl apply succeeding means the cluster accepted your manifest — not that it's ready for real traffic. Here's what we actually check before it is.
Terraform in production: the practices that matter once more than one person runs apply
Terraform on a solo side project and Terraform a team runs against shared infrastructure are different disciplines. Here's where the second one actually breaks.
Docker in production: what we check before an image goes anywhere near go-live
A Dockerfile that builds successfully and an image that's safe to run in production are different bars. Here's the gap between them.
Cloud cost optimization: the boring checks we run before anything fancy
Most cost-optimization advice starts with Reserved Instances and Savings Plans. Most of the actual savings we find come from three much less exciting checks first.