The cloud is the easier story. Spin up a VPS, walk away, the bill shows up monthly. My home lab is the inconvenient story. Two power strips, a couple of small form factor boxes, a switch, and a Proxmox cluster that has outlived three jobs and one entire startup. People ask why I haven't moved everything to a managed host. I have actually moved bits to the cloud. The pieces that came back are the answer.

What is on it

Two nodes, Proxmox on bare metal, both sipping power in a closet. Mostly lightweight LXC containers, with a full VM where something genuinely needs one. Between them they run the DNS for the whole house with AdGuard Home, the home automation with Home Assistant, the storage with OpenMediaVault, a Docker stack through Portainer, network boot with netboot.xyz, and Uptime Kuma watching all of it. A separate always on machine handles the loud public work: the Minecraft server, the Discord bot, and Nexus AI, my self hosted open models on a dedicated GPU.

Nothing on the cluster faces the internet directly. The public pieces reach back out through a Cloudflare tunnel, so from outside only Cloudflare's edge is reachable, not my hardware. Cheaper than a mid tier VPS to run, and the work that lives on it would not fit on one VPS anyway.

Why Proxmox and not something else

I have tried a few things. ESXi when the home use license was still a thing. Plain Debian with Docker compose. Unraid for a stretch. Each was fine for a while. Proxmox is the one that stuck because of three things that sound boring in a list and matter every week in practice.

LXC and KVM in the same UI. Most things I want to run are happier in a container. AdGuard Home, Portainer, Uptime Kuma, netboot.xyz, WireGuard, the reverse proxy, all LXC. Home Assistant and OpenMediaVault run as full VMs because they want deeper access to the hardware. Switching tools to handle both feels like a defeat. Proxmox just shows me all of it in the same tree.

Snapshots that work. Right click, snapshot, name it whatever, done. Major OMV update goes sideways, roll back to two minutes ago. The hypervisor handles it at the filesystem level (ext4 with qcow2, or ZFS if you set that up). I have rolled back about a dozen real changes over the years. None of those rollbacks would have been clean on a generic Docker host.

The web UI is not pretty but it is honest. Every container has a resource graph, a console, a backup tab, a network tab. No hunting for which config file holds what. When something is broken at 1am, Proxmox shows me the answer in two clicks.

The cloud comparison that pushed me back home

A while ago I tried to live without the home lab for a month. Moved the DNS filtering to a small VPS, tunneled the whole house out to it so every device used the cloud resolver, moved Home Assistant to a hosted account, kept the local only services local because some of it is just not really a cloud thing.

It worked. It cost about $14 a month total. The reason it did not stick was latency and trust. DNS queries from my couch were leaving the house, crossing the internet, getting a verdict, and coming back. Mostly fast. Sometimes 80ms instead of 2ms. The whole network had a faint laggy feel during DNS hiccups that I had never noticed before. And every smart home automation now depended on a remote service being up. When Nabu Casa had a small outage during a snowstorm, my heating schedule did not run.

I moved everything back to the home lab over a weekend. The latency feel disappeared. The heating ran. The bill went away.

What I do not love about Proxmox

Honest list, since posts like this tend to read like marketing if you only mention upsides.

  • ZFS memory hunger. If you enable ZFS without tuning zfs_arc_max, it eats half your RAM and the LXCs start swapping. The default is fine on a big NAS. On nodes with limited RAM you have to tune it.
  • The UI is dense. First time users get lost in the tree. There are maybe four screens you actually need, but ten more that exist for cluster setups you will never run.
  • Two node clusters need a tie breaker. Proxmox really wants three nodes plus a quorum device for clean failover votes. With two nodes you either set up a lightweight qdevice or accept the split brain caveat and move on. Not hard, but more reading than the docs let on.
  • Upgrades are real upgrades. Major version jumps want you to read release notes. Not bad, just not the no thought streaming app upgrade experience.

The boring reasons it stays

I keep the home lab because the work it does is shaped wrong for the cloud. DNS for every device in the house wants to live one hop away. The storage already lives on the cluster, no reason to push it to someone else's cloud. Home Assistant should not lose its mind during a remote outage. And the things I learn from running this hardware show up in the rest of my work. Half of what I know about Linux networking I learned because a container could not see the local subnet at 11pm.

The case for self hosting is not philosophical for me. It is that the alternative has more failure modes I do not control. A small box in a closet has one failure mode: hardware. I can plan for that. A cloud provider has all the failure modes plus a billing department.

If you want to start, you do not need much. A used office SFF on eBay, a 256GB SSD, 16GB of RAM. Proxmox on a USB stick. Three containers to start: AdGuard Home for DNS, Home Assistant for automation, one for whatever fascinates you right now. The first weekend will eat ten hours. The next year will save you about a hundred.

The cluster lives behind a Cloudflare tunnel. The Nexus AI Terminal at thyfwxit.com/nexus runs out on the edge, this portfolio sits on Cloudflare Pages so it stays up even if my home internet drops, and the Minecraft server and Discord bot run on that separate always on box. But the DNS for the whole house, the smart home brain, and the storage stay home, on hardware I own, where they belong.