The PaaS-on-a-VPS renaissance
A git-push deploy on a single A$9 box is back in fashion — not from nostalgia, but because the per-seat and bandwidth maths on managed platforms stopped adding up.
The A$9 box that ate my Vercel bill
Last quarter I moved four side projects and one small client app off a managed platform and onto a single Hetzner CX22 — 2 vCPU, 4 GB RAM, 40 GB NVMe, A$8-odd a month. The deploy flow didn’t change: I still type git push. What changed was the invoice. The platform bill it replaced was creeping toward A$120 a month, most of it seats and bandwidth I wasn’t really using, just renting.
This isn’t a “cloud bad, self-host good” sermon. It’s a swing of the pendulum, and it’s worth being precise about why it swung, because the answer tells you when to follow it and when to stay put.
The problem: the pricing model, not the price
Vercel, Netlify and Fly are excellent products. The friction isn’t the sticker — it’s that the sticker is a floor, and the meter runs on axes you don’t control once an app gets traction.
Take the three big ones as they stand in mid-2026.
Vercel Pro is USD$20 per developer seat per month — call it ~A$30 at A$1.52 to the dollar. A five-person team is A$150/month before a single request is served. You get 1 TB of fast data transfer, then it’s USD$0.15 per extra GB. Functions bill on three meters at once: USD$0.60 per million invocations, USD$0.128 per CPU-hour, USD$0.0106 per GB-hour of memory. And since February 2026, “Turbo” builds are the default for new Pro projects at 7.5x the per-minute cost of Standard. There’s a USD$20 monthly usage credit to soften the edges, but the shape is clear: every axis is a line item.
Netlify actually moved the other way on seats — as of 14 April 2026, Pro is a flat USD$20/month with unlimited members, which is a genuinely good change. But usage went credit-based: 3,000 credits included, bandwidth at 20 credits/GB, overage credits at ~USD$0.00667 each, so roughly USD$0.13 per GB once you’re past the allowance, auto-recharging in USD$10 batches.
Fly is the most honest about being infrastructure: a minimal always-on shared-cpu-1x Machine with 256 MB is about USD$1.94/month, egress is USD$0.02/GB in NA/EU, volumes are USD$0.15/GB-month. Cheap — until you need a Performance Machine (from USD$99/month) or you’re running several services and the per-Machine, per-volume, per-region lines stack up.
None of these are rip-offs. But all three price the thing that scales — traffic, seats, compute-seconds — as a variable, and a single VPS prices it as a fixed cost you’ve already paid. That’s the whole arbitrage.
The deep dive: what you’re actually buying back
The tool that makes a raw VPS feel like Heroku is a thin control plane. Three live options in 2026, and they’re genuinely different animals:
- Dokku — the lightest. A Bash-and-Docker layer with no UI, driven entirely by SSH and
git push. It sips RAM, which matters a lot on a 4 GB box, and it’s the closest thing to the original Heroku contract: push a repo, it builds a container, it runs. - CapRover — a web UI plus Docker Swarm underneath, so multi-node clustering is there if you grow into it. Middle weight.
- Coolify — the prettiest, most actively developed, and the one that’ll deploy a whole
docker-composestack, databases included, from a dashboard. It also eats the most resources for the privilege of that UI and its bundled services.
The DX is the headline. Here’s the entire lifecycle of a new app on Dokku — server side, then the one-time client wiring, then every deploy after that:
# --- on the server, once per app ---
dokku apps:create dispatch
dokku postgres:create dispatch-db
dokku postgres:link dispatch-db dispatch
dokku domains:add dispatch news.example.com
dokku letsencrypt:set-email [email protected]
# --- on your laptop, once ---
git remote add dokku dokku@your-vps:dispatch
# --- every deploy, forever ---
git push dokku main
# build → release → switch traffic, zero-downtime, automatic
# TLS once DNS resolves
dokku letsencrypt:enable dispatch That git push dokku main is the entire point. No CI vendor in the path, no build-minute meter, no dashboard. The box pulls your code, builds an OCI image (via buildpacks or your own Dockerfile), health-checks the new container, swaps traffic, and tears down the old one. Let’s Encrypt handles certs. You can run five or six of these on one CX22 because most small apps are idle most of the time, and a single host lets them share the slack instead of each renting its own reserved slice.
The economics underneath: that CX22 includes 20 TB of traffic. On Vercel, 20 TB of overage past the included terabyte would be around USD$2,850. On the VPS it’s zero, because you already paid the A$8. Bandwidth is where managed platforms quietly make their money, and it’s exactly the axis a VPS flattens to a constant.
Real-world impact: where it’s right, and where it bites
The honest trade is in one sentence: you stop paying for ops with money and start paying for it with attention.
On a managed platform, a kernel CVE, a full disk, a wedged Docker daemon, an expired cert, an OOM-killed container at 2am — none of those are your problem. On your VPS, all of them are, and they don’t care that it’s a Sunday. There’s no autoscaling; if you get hugged to death by Hacker News, the box falls over and you’re the on-call. Backups are yours to script and, more importantly, yours to test-restore. A single host is a single point of failure by definition.
So the decision tree is concrete:
Reach for the VPS when you’re a solo dev or a small team running a handful of low-to-moderate-traffic apps, you’re comfortable in a terminal, your seat count is about to multiply your bill, or your bandwidth is becoming the dominant line. Internal tools, portfolios, side projects, small client sites, staging environments — this is the sweet spot. It’s the pattern behind most of the small-team setups I’ve written up in recent client work.
Stay on the managed platform when uptime is contractual, traffic is spiky and unpredictable, you need multi-region edge or genuine autoscale, or — the one people undercount — your team’s time is worth more than the delta. If you’re billing A$200/hour, three hours of fighting a broken Docker daemon has wiped out a year of savings on a A$100/month bill. The maths only works if the ops load stays low and you actually enjoy, or at least tolerate, owning it.
There’s a defensive middle ground too: keep the production app on the managed platform and run everything else — preview environments, internal dashboards, cron workers, the staging stack — on one cheap box. That’s often where the bill was leaking anyway. If you want to feel the workflow before committing real traffic, the local-first dev tooling rundown is a low-stakes way in.
Why it matters
The renaissance isn’t about cloud being a scam. It’s that the abstraction got priced per-axis right as a generation of developers got comfortable with Docker, and a A$9 VPS with 20 TB of included traffic exposes how much of a managed bill is margin on bandwidth and seats rather than compute you’re really using.
The mature read is “and,” not “or.” Know what a git push deploy on your own box actually costs you — in dollars saved and in attention spent — and put each workload where that trade is honest. For a lot of small teams, that’s a single tidy VPS and a control plane that gets out of the way. For the app that can’t go down, it’s still someone else’s pager. Pick per workload, not per ideology.