It was 1:09 AM on a quiet Friday night when my digital world went dark. In an instant, my carefully crafted blog and homelab setup vanished from the internet, leaving me feeling like I’d built a high–tech sandcastle only to watch the tide wash it away. The culprit? Not a sophisticated cyber attack or a critical bug in my code1, but something far more mundane and frustratingly out of my control: an unannounced ISP outage.
Now, I’m no stranger to the occasional tech hiccup. As a self–proclaimed homelab enthusiast, I’ve had my fair share of late–night debugging sessions and “oops, I broke the network” moments. But this was different. This was the night my overengineered dream met the harsh reality of residential internet reliability.
The Setup
In a world of sleek cloud solutions and managed services, I decided to take the road less traveled — or perhaps the road more cluttered with spare computer parts. It’s a common affliction among developers: the irresistible urge to self–host everything. After all, we know how to do it, so why pay someone else when we can do it ourselves “better”2? My setup isn’t just a server in a closet; it’s a testament to modern, container–based architecture squeezed into a homelab, with all the charm and challenges that entails.
At the heart of this homelab hodgepodge sits a four–node K3s cluster, cobbled together from a collection of old, written–off Lenovo M700 mini PCs3. These little powerhouses, each no bigger than a hardcover book, run a cavalcade of services using the latest and the greatest trends I am interested enough in trying:
- ArgoCD orchestrating deployments to the homelab using GitOps principles
- Forgejo hosting my personal repos (and mirroring them to Github)
- An assortment of other tools and services4, mostly accessible only via LAN
And nestled among this digital menagerie sat (ahem, spoiler alert) this very blog. It was elegant, efficient, and entirely under my control. In theory, it rivaled any cloud setup. In practice… well, we’ll get to that.
I built this self–hosted infrastructure driven by a trifecta of motivations:
- A desire for complete control over my data
- Privacy concerns5
- A hefty dose of developer pride (if it’s not overcomplicated, are you even trying?)
Now, I’m no stranger to the challenges of self–hosting. The trade–offs are often worth it for the control, the learning experience, and the endless material they provide for tech small talk. However, as I was about to discover, hosting public–facing, high–availability content like a blog can expose vulnerabilities when factors beyond our control come into play.
The Downfall
At 01:09, without warning, my internet connection went dark. My blog, along with all my other self–hosted services, vanished from the internet faster than free snacks at a developer meetup. For the next 7 hours and 28 minutes, my digital fortress became an isolated island. All my redundancies and optimizations crumbled in the face of this single point of failure. It felt like I’d built a state–of–the–art fortress, only to realize I’d forgotten about the bridge. And now, that lone entry point had been severed, leaving my digital fortress floating in isolation.
As I sifted through the router metrics the next morning, I confronted some uncomfortable truths. No matter how robust my self–hosted setup, I was still at the mercy of my ISP. My carefully crafted Kubernetes cluster, with its elegant network of services, was about as useful as a flux capacitor without a DeLorean to put it in.
The Aftermath
As I stared at my router’s blinking lights in the morning, a familiar internal debate reignited. The purist in me wanted to double down on self–hosting, suggesting backup internet connections and failover systems6. But the pragmatist knew better. It was time to admit that my blog — a static site that should be the epitome of reliability — was being held hostage by elements beyond my control.
I didn’t make the decision to move to a cloud–based CDN lightly. It felt, in some ways, like admitting defeat. But as I started the migration process, I realized this wasn’t about giving up control, but rather about applying the right tool to the right job. This shift was about recognizing that true engineering prowess lies in crafting the right solution for each specific need.
In tech as in the Force, absolute positions rarely serve us well. Fully embracing the cloud or stubbornly sticking to self–hosting alone would be missing the point. The path forward wasn’t about choosing sides, but finding balance.
The Lessons
So, what did I learn from my 7–hour adventure in internet darkness? Well, for starters, I learned that my ISP’s idea of a “reliable connection” is about as dependable as a red–shirted crew member on the original Star Trek. But more importantly, I realized that maybe, just maybe, I’d gone a tad overboard with this whole self–hosting thing.
Don’t get me wrong, I still love my homelab. It’s like a digital playground where I can break things without anyone yelling at me (except maybe my family when the Wi–Fi goes down). My blog, though, is enjoying its new life in the cloud, blissfully unaware of my local network’s drama. Meanwhile, my AdGuard Home is still happily blocking ads and trackers in my network, and I’ve got more Docker containers running than I care to admit. But I’ve learned to pick my battles. Some things are worth the hassle of self–hosting, and some things… well, they’re better off in someone else’s server room.
In the end, this whole experience taught me a valuable lesson: don’t put all your eggs in one basket, especially when that basket is connected to the internet by a single cable.
Footnotes
-
It’s a static site, it would be difficult to mess that up. ↩
-
“Better” here means “more likely to wake me up at 3 AM with alerts,” but also more tailored to my specific needs and allowing for rapid iterations without depending on a third–party service’s roadmap. ↩
-
One man’s e–waste is another’s Kubernetes cluster. These can be found on eBay for less than a hundred euros each. ↩
-
I’ve got more tools than a hardware store, but unlike a hammer, these ones occasionally get updated and break everything. ↩
-
I’m not a privacy advocate, I just don’t like the idea of my data being sold to third parties. Call it digital introversion if you will. It’s not paranoia if they’re really after your data, right? ↩
-
Because clearly, what this situation needed was more complexity. ↩