The most useful thing my home server taught me was not how to install another Docker container. It was how quickly a problem stops belonging to one tidy layer.
A service can be running while DNS is wrong. Plex can work while the machine doing the transcoding cannot reach the storage. A reverse proxy can be configured correctly while the network around it is a mess. When it is your own server and you actually want to use it, those boundaries become your problem.
That is very different from the way many application-focused software-engineering jobs feel. You can spend years building applications without having to join Linux, storage, DNS, HTTPS and networking together yourself.
The experiments that kept getting turned off
Around the start of 2020, I got a Raspberry Pi and repeatedly installed Raspbian or Debian on it. I would add Sonarr, Radarr, maybe Prowlarr, a torrent client and Plex. Sometimes Pi-hole joined them.
There was no reverse proxy and I was not putting my own domains behind it. It was primitive, and I learnt something each time, but it never stuck, right? I would decide to play with it and eventually turn it off again.
The Pi proved that I could run these services. It did not give me infrastructure I depended on.
That changed in summer 2024. I had an old i5 desktop lying around, knew it worked and could connect drives to it easily. Why the hell not?
I installed OpenMediaVault and spent the next two or three months building the setup out. Docker-managed services were joined by Traefik as a reverse proxy, Tailscale, proper DNS and network sharing.
The useful result was a repeatable path for a new service. I could put it behind HTTPS and decide whether it should be public or only reachable inside my network. The machine was no longer an experiment waiting to be unplugged.
A second machine made the lessons real
I also bought a separate OptiPlex with 4 GB of RAM and installed Debian. Its main job was Plex Pass transcoding, reading media over the network from storage attached to the OpenMediaVault machine.
That small decision forced several pieces to work together. The OptiPlex needed the network share. Plex needed to read the right files. Deployment now covered two Linux machines rather than one. Running another Pi-hole there also gave me two DNS servers.
None of this was exotic. That was precisely why it was useful. These were ordinary operational problems with an outcome I cared about: I wanted my own services to work.
The failure that taught me to stop
I did not keep every layer.
That same summer, I tried turning an old laptop into my router with OpenWrt. It kept dropping out, which meant I was repeatedly taking down my own internet while trying to learn the rest of the server.
Eventually I bought a router.
The lesson was not that I should keep going until I became better at OpenWrt. It was that you need to know when to just not do it yourself. I reached the point where I thought: “I just want something that works. I’m going to stop trying to overcomplicate it. I’m just going to make it work.”
That judgement matters as much as knowing how to add another service. A home server gives you a place to learn across layers; it does not require you to own every layer.
It is not free either. It uses energy. Plex Pass costs money, as can a VPN or another service. Sometimes the server is down when you just want to watch a film. Self-hosting will cause a fucking headache.
What are you going to do, right? I still think it is worth it. I use the result all the time, and the problems have given me practical reasons to understand Docker, Linux, networking, storage and operations together.
The next change was moving the setup onto a different desktop and Proxmox. That is another part of the story.
Want to talk about something I’ve written or built? Get in touch.
This article was adapted with AI assistance from an original article on billiem.uk. The original article was reviewed before publication.
Top comments (0)