Personal VPS vs homelab for a nutrition stack
Hetzner CX22 vs a Pi 5 vs a used SFF Lenovo. Costs, latency, and the operations you don't want to be doing.
The decision
Three plausible places to run a personal nutrition stack (OFF mirror, Postgres for USDA, Caddy ingress, WebDAV target):
| Option | Up-front | Recurring | Power | Latency to phone (LAN) |
|---|---|---|---|---|
| Pi 5, 8 GiB, NVMe | ~$150 | ~$7/yr power | low | <2 ms |
| Used Lenovo M715q | ~$100 | ~$25/yr power | moderate | <2 ms |
| Hetzner CX22 | $0 | ~$48/yr | n/a | 20–60 ms (US) |
| Linode Nanode 1G | $0 | ~$60/yr | n/a | 20–80 ms |
| Mythic Beasts SBC | $0 | ~$60/yr | n/a | 60–120 ms (US) |
The big trade-off is latency vs operations. Local hardware = fast, you change a fuse. VPS = slower, no fuses to change.
Hetzner CX22 in 2026
Hetzner’s CX22 is the obvious VPS pick: 2 vCPU, 4 GiB RAM, 40 GiB NVMe, 20 TB transfer, EU-based (Falkenstein, Helsinki, Nuremberg) or now in Ashburn for North American users. About €4.51/mo at the time of writing.
Will it run the stack? Yes, comfortably. Our reference deploy:
- 1 GiB peak for the OFF mirror
- 350 MiB for Postgres (with the USDA dump loaded)
- 100 MiB for Caddy
- 50 MiB for WebDAV
- ~1.5 GiB headroom
Disk: 40 GiB minus 9 GiB for OFF mirror minus 6 GiB for the USDA bulk minus the OS (~5 GiB) leaves 20 GiB free. Fine for backups or for a second project.
Network: Hetzner’s egress is generous. Our stack does ~3 GiB/mo of inbound (OFF nightly diff sync) and basically zero outbound. We are nowhere close to the 20 TB cap.
Linode and DigitalOcean
We tested a Linode Nanode 1G ($5/mo) and a DO Basic Droplet 1 GB ($6/mo). Both work for the OFF mirror only if you skip the bulk OFF dataset and lazy-load. Postgres-with-USDA puts you over the 1 GB RAM ceiling.
If you go DO/Linode, get the 2 GB tier. Total monthly cost ends up matching Hetzner’s CX22 anyway.
Mythic Beasts SBC
Mythic Beasts rents Pi 4-equivalent SBCs in their datacentre. Charming, slightly slower than a Hetzner CX22, somewhat more expensive. The argument for it is “I want a Pi but I don’t want to be the one who has to replace its SD card.” That’s a real argument. We’ve used it for unrelated projects.
When the VPS is wrong
You should not use a VPS if:
- Your tracker logs sensitive identifying data. A consumer nutrition diary on someone else’s hardware is, in principle, less private than the same diary on hardware in your closet, even if the operator is reputable. We trust Hetzner more than we trust most cloud providers, but it’s still trust.
- You need offline-first operation. Phone-to-VPS round trips fail when your phone has no signal. Phone-to-Pi-on-LAN works on the elevator with no service.
- Your residential bandwidth is fine. If you have decent upload speeds, the latency advantage of LAN-local is real. ONT’s barcode lookup against a LAN OFF mirror is 100ms; against Hetzner Falkenstein from California it’s about 180 ms.
When the homelab is wrong
You should not run a Pi at home if:
- Your house has weekly power events. A UPS helps but it doesn’t fix everything. We’ve lost two SD cards to brownouts despite a UPS.
- You travel >50% of the time. Coming home to a dead Pi when you really wanted to log breakfast is annoying.
- Your noise/heat budget is zero. A Pi 5 with active cooling is audible at night in a bedroom-adjacent setup. The Lenovo SFF is louder.
- You don’t want a static IPv4. Hetzner gives you one. Your residential ISP might not.
The hybrid
A reasonable middle ground: Pi at home as primary, Hetzner CX22 as off-site replication target for backups. About $4/mo extra for cold-storage peace of mind. Borg or restic backs up nightly to the VPS. If the Pi dies, you re-deploy the stack to the VPS in about 20 minutes from your docker-compose.yml and restore from the latest snapshot.
We’d recommend this setup for anyone who’s serious enough about the data to want both speed and durability.
Recommended
- For 90% of readers: Pi 5 + UPS + nightly backup to a $4/mo Hetzner. Total: ~$200 setup, ~$55/yr.
- For people who can’t or won’t run hardware: Hetzner CX22 alone. ~$55/yr.
- For people with a noisy garage and a static IP: a used Lenovo SFF beats the Pi on raw performance per dollar. ~$120 setup, ~$30/yr power.
What we run
Pi 5 + 8 GiB + 256 GB NVMe + UPS as primary. Hetzner CX22 as replication target. About $50/yr ongoing. We have failed over to the Hetzner exactly once, in 2025, when the Pi’s NVMe died after 14 months of writes (the pg-stats writes are heavier than we’d assumed). Restore took 35 minutes. Lost no data.
References
- Pi 5 nutrition stack
- Backups and restore
- Tailscale for mobile access
- Hetzner: hetzner.com
- Mythic Beasts: mythic-beasts.com