From Homelab to Hetzner: Ten Years of Self-Hosting

Jun 16, 2026·
David Bösiger
David Bösiger
· 6 min read
blog

Over ten years ago I had a Dell PowerEdge running Ubuntu in a closet at home. ownCloud for files, Plex for media, a torrent client downloading everything Plex needed. That was my “homelab”.

Ten years later I have a single Hetzner box running everything. No basement, no fan noise, no electricity bill. This is the story of how the second setup replaced the first - and why it took me a decade to get here.

The Dell Era

The home setup was fun while it lasted. Ubuntu on a Dell PowerEdge, ownCloud for files, Plex for media, torrents for the rest. It worked.

What killed it was money. Running a server 24/7 isn’t free, and when I started thinking about upgrading the hardware, the math stopped making sense. The Dell was getting old, but buying a new server for the closet felt like throwing good money after bad.

Discovering Hetzner

Around the same time I had a job where we used Hetzner root servers. I saw the prices. For what I was about to spend on new hardware plus years of electricity, I could rent something better - in a real datacenter, with real internet and someone else’s power bill.

For reference: my Hetzner box today runs around 90 CHF a month. Symmetric 1 Gbit internet alone at home would be 30-40 CHF before electricity or hardware. The math wasn’t close.

I moved my stuff over. That was about ten years ago.

ownCloud → Nextcloud

Somewhere in here I switched from ownCloud to Nextcloud. The migration was painless - same codebase under the hood. I don’t fully remember why I switched. Probably a mix of “everyone else was” and “Nextcloud was iterating faster.” It stuck. It’s still the spine of my data layer today.

From Host to Docker

The first version of my Hetzner setup ran services directly on the OS - Nginx as a reverse proxy on the host, packages installed alongside. It worked, but every upgrade was a small adventure.

I learned Docker around then and the pattern flipped. Services moved into containers. The reverse proxy eventually moved into a container too. Today everything runs in Docker. Updates are predictable. Rollbacks are clean. The host stays clean.

And no, I haven’t moved to Kubernetes. The overhead doesn’t pay off until you have multiple physical machines, and I don’t need 99.9% uptime. Docker is simpler. Cheaper. Fine.

Plex → Jellyfin + the *arr Stack

The media side evolved too. Plex got replaced by Jellyfin - fully open source, no account, runs on my server. The *arr stack (Sonarr, Radarr, Lidarr, Prowlarr) replaced my hand-managed torrent client. Now I tag what I want and the stack handles the rest. The old “download and shuffle files” approach is just gone.

The Migration That Birthed Arch

One day I couldn’t edit a particular file on the Hetzner box anymore - some filesystem or permission state I never fully diagnosed. Rather than fight it, I rented a new Hetzner server, set it up fresh, and rsync’d everything over.

Fresh install meant a free choice of OS. I picked Arch, and it’s been Arch since. People look at me funny for running Arch on a server. My reasons:

  • Small footprint. I install only what I need.
  • Current packages. I get up-to-date versions instead of waiting six months for a backport.
  • Fast security updates. When something breaks in the broader Linux world, Arch ships a patch quickly.

The only real pain was UFW - setting it up cleanly on Arch took more effort than I expected. After that, nothing.

The Setup Today

The box itself: one Hetzner dedicated server with the OS on an SSD and two 16 TB drives in RAID 0 (via LVM) for the data. The backup NUC at home runs on SSDs now too - upgraded a while back.

Network: headscale on the server, tailscale clients on my devices, and on the server itself. The *arr stack lives entirely inside the VPN - no public exposure. Public surface is VPN, HTTP/HTTPS, and the occasional game server port. Let’s Encrypt via nginx and certbot handles the certs.

Backups

Running everything on one Hetzner box is a real single point of failure - so backups have to be solid.

I use borg for backups, and they go to a NUC at home. The NUC also runs Zabbix, which monitors everything. If a backup fails, or a service goes down, I see it.

This is the part I’d defend most loudly. Self-hosting without real backups is just data you’re going to lose later.

I’ve restored from these a few times - usually individual files. Mount the borg archive, copy over, done. Simple, which is the whole point.

Identity

A more recent addition: Keycloak, integrated with several services so I have one login layer instead of N. Once you have that running, adding new services gets a lot less friction-y.

The Scope of It

What started as ownCloud and Plex grew. The box now runs Nextcloud, my mailserver, Immich, Jellyfin + the *arr stack, Vaultwarden, Vikunja, ntfy, AdGuard Home, Matomo, Keycloak - and recently Matrix with bridges, so I can keep one chat layer across multiple networks. Over the years I’ve also run a few game servers on it for friends.

A few of these services I share with family and friends too. They get the benefit, I run the box.

It crept up on me. Each thing was one small addition. The total is a lot.

My digital life would be useless without that box. I’m dependent on it - but only on my own stuff. Not on a cloud provider. Along the way I moved off Google completely. That’s the trade I’d take any day.

What’s Next

The current setup is mature but mutable. The next chapter is an immutable OS approach: Fedora CoreOS, Butane/Ignition for declarative config, Quadlets for systemd-native containers. Everything in Git, the system rebuilt from config rather than patched in place.

I’m not there yet. But that’s where this is heading.

Further out, I want a real security monitoring layer. I deployed Wazuh at work; something similar at home is on the list. The architecture switch comes first though.

Looking Back

Calling this a “homelab” stopped fitting somewhere around year three. One Hetzner box in a datacenter isn’t really home anything. But the spirit is the same - my data, my services, my call on every choice.

Ten years in, I’d move to Hetzner earlier. I’d start with Docker on day one. And I’d pick Arch (or something like it) the first time, not on the second go. The rest I’d let unfold the same way - the trial and error was the learning.