DockerDevOpsNext.jsFastAPI
Lean and Predictable Deploys on a Single VPS
I rebuilt how my site ships updates—smaller containers, faster deploys, safer defaults. Each change reduced friction until releases became routine instead of risky.
Context
If you’ve been following along, I’ve tightened deployments, made analytics compliant, moved publishing to real-time, and added human-in-the-loop approvals.
Now I’m pushing the same outcome from a different angle: keep the system light, fast, and controlled.
What changed
The site worked, but deploys felt heavy. Too many steps. Too much time. I rebuilt the images so they ship only what’s needed to run—nothing extra.
What that means in practice:
- Updates that took minutes finish in seconds.
- One identical artifact runs everywhere: dev, staging, production.
- Releases are calm, reversible, and secure by default.
It’s less about tools and more about discipline: keep things identical, predictable, and easy to recover.
Implementation notes
- Frontend: Next.js 15 multi-stage build on
node:22-slim; final image ships.next/standalone. - Backend: Python multi-stage build on
python:3.11-slim; deps baked in a build stage; runtime runs as non-rootappuser(UID/GID 1001). - Config: One image per service;
compose.production.yaml,compose.staging.yaml, andcompose.override.yamlswitch env/TAG and settings. - Cleanup next: remove leftover
/app/contentfrom the frontend image after full Sanity migration.
Why it matters
Lean process gives time back. Fewer surprises, lower cost, clear ownership. That scales from a one-person setup to a larger org.
What’s next
Trim migration leftovers and tighten runtime isolation. Small, steady steps that keep production calm.
In short
Less waste. More control. Same standard across environments.
Is recurring work behind the question?
Tell us what keeps happening in the free fit check. We will review whether Groundlens is the right next step.