I priced my homelab as if I had to rent it. Same workload, same month, numbers read off the running systems rather than off a spreadsheet. On-demand AWS came to just under $50,000 a year. The electricity bill it replaces is $274.
Twenty-two guests, six nodes, and 4.3 cores of actual work
Two Proxmox nodes running 22 guests, plus a six-node k3s cluster on bare metal. Everything below was read off the live systems.
| Platform | Units | vCPU alloc. | RAM alloc. | Busy |
|---|---|---|---|---|
Proxmox GeekCluster | 22 guests | 68 | 110.5 GiB | 2.0 cores / 50 GiB |
| k3s, bare metal | 6 nodes, 114 pods | 36 | 124 GiB | 2.3 cores / 25.5 GiB |
| Total | 28 workloads | 104 | 235 GiB | 4.3 cores / 76 GiB |
Stored data is 863 GB across both pools — 635 GB on node 1, 132 GB of replicas on node 2, 96 GB of Longhorn volumes with their three copies. A quarter of it is one Immich photo library.
Ninety-three cents of every cloud dollar buys the part I do not use
Sized 1:1 on AWS on-demand in us-east-1, honouring allocation because the cloud will not let you oversubscribe the way a hypervisor does.
| Line | Basis | $/month |
|---|---|---|
| Compute | 104 vCPU, m7i @ $0.0504/vCPU-h × 730 | 3,826 |
| EBS gp3 | 2,025 GB @ $0.08/GB | 162 |
| NAT Gateway | $0.045/h + processing | 53 |
| Egress | 400 GB billable @ $0.09/GB | 36 |
| Load balancer | k3s ingress | 20 |
| 4 × public IPv4 | $0.005/h each | 15 |
| S3 backups | 400 GB @ $0.023/GB | 9 |
| Total | $49,452 / year | 4,121 |
The same workload, priced five ways
Every price checked in August 2026. Euro list prices converted to USD at 1.17 — everything below is dollars.
| Where | Shape | $/month | $/year | × |
|---|---|---|---|---|
| AWS on-demand | 1:1 allocation | 4,121 | 49,452 | 180× |
| AWS 3-yr reserved | 1:1, −50 % compute | 2,208 | 26,496 | 97× |
| Vultr | 1:1 allocation | 1,375 | 16,500 | 60× |
| Hetzner dedicated | 2 × AX102 bare metal | 602 | 7,224 | 26× |
| Hetzner cloud, EU | rightsized to real use | 167 | 2,004 | 7× |
| This house | 140 W, all on UPS | 23 | 274 | 1× |
Every machine here sits behind one of two UPS units, with a power bank holding up the Pi that arbitrates the cluster. Between them they report 140 W — 102 kWh a month, $15 at $0.15/kWh, plus $7.50 of Cloudflare R2 for the offsite copy.
That number surprises people, so here is why it is real rather than a typo. Every k3s node runs a T-series CPU — Intel's 35 W parts rather than the 65 W desktop versions — and the whole fleet spends most of its life at the 4 % utilisation the first chart showed. Idle silicon at 35 W TDP draws very little. The rack also staggers its power-on so the inrush peaks never coincide, which is why a 350 VA unit can carry what it carries.
Where this comparison is genuinely worse for me
Three things the headline number hides, and I would rather say them than have a commenter say them.
- The hardware was not free. It is a sunk cost, not a zero. Spread a fleet purchase over five years and the true figure is nearer $80 a month than $23 — which makes the rightsized cloud option only about 2.1× my real cost, not 7×.
- The 180× is against a 1:1 lift-and-shift. Nobody sane migrates that way. A competent architect would rightsize first, and the gap collapses to the bottom row of that table.
- Everything I own sits in one failure domain. One house, one breaker, one ISP. No amount of homelab money buys a second one.
What it actually takes to start, which is less than people think
None of this needs a rack. The whole argument scales down to one machine, and the entry rungs are cheap enough to be rounding errors.
| Rung | What you get | Cost |
|---|---|---|
| Oracle Always Free | 2 OCPU ARM, 12 GB, 200 GB | $0 |
| Contabo VPS 10 | 4 vCPU, 8 GB, 75 GB NVMe | $4.21–5.79 |
| Hetzner CX23, EU only | 2 vCPU, 4 GB, 20 TB traffic | $6.42 |
| Used mini PC | whatever it has, forever | ~$3/mo of power |
My second Proxmox node is a used Dell OptiPlex 5050 — an i7-6700 with 48 GB of RAM in three of its four slots, an office cast-off. It runs half the cluster. One month of the AWS bill would buy a shelf of them.
What is still an estimate, and what I could not verify
- The 140 W is two UPS readings summed, not a plug-in meter. Each reports load as a whole percentage of its rating, so the resolution is coarse — roughly ±4 W on the larger unit — and it is a snapshot rather than a year-long average. A real meter would tighten it; nothing suggests it would move it far.
- The offsite backup size is approximate — I sized R2 at 400 GB from the local datasets rather than billing the bucket.
- Egress is a modelled 500 GB/month. I do not meter it. If Immich and the camera recordings push more, AWS gets worse, not better.
- The five-year hardware amortisation uses an assumed purchase price. It is the one number in this piece not read off a receipt or a running system.
Method
Allocation and usage came from pvesh get /cluster/resources and kubectl top nodes; storage from zpool list and the Longhorn volume API; power from upsc on both UPS units. Prices were pulled from vendor documentation in August 2026 — AWS on-demand and EBS list, Hetzner's own published price-adjustment notice, Vultr and Contabo product pages, Cloudflare R2 docs. Euro prices are converted at 1.17 and shown in USD throughout.
Claude Code did the inventory sweep, the arithmetic and the layout. The corrections were mine: it first assumed the SMB shares were LAN-only, and it reached for Hetzner as the cheap default before the June repricing turned up.