About a year ago, I added the last piece of the puzzle for my home computing environment to finally justify calling it a "homelab" of sorts - an uninterruptible power supply (UPS). We get some spectacular wind storms here on the coast, and power outages are not uncommon. Both to be able to stay connected to video conferences at work and to avoid the very long cascading reboots my networking equipment are prone to (more on that later), I finally invested in this APC BX1500M. As you can see in the image above, I massively overspecced! Let's look at this from the perspective of the UPS being the base of the lab.
The BX1500M is protecting my fiber modem/ONT (what it's called seems to depend on your provider, but it's the bit that takes the fiber through a hole in the wall from outside, authenticates me, and hands ethernet off to my router), the main router node of my Orbi RBK53, and my Intel NUC NUC7i5BNK. Typical power draw on the UPS is between 20-30W with all 3 of those devices protected. Naturally, after buying the UPS, I've had fewer power events, but it does indeed keep Internet connectivity, WiFi, and the NUC's in-home services up and running for potentially quite long periods of power outages.
You're reading this blog from it! I have symmetric gigabit fiber, and route traffic through Cloudflare primarily for caching purposes. I do use their front-end SSL certificates, but all of my services also have their own LetsEncrypt on the reverse proxy, so I can easily forego Cloudflare's. Other than Cloudflare, I do not have any external dependencies and am what I would consider pretty self-hosted.
The Netgear Orbi RBK53 is a terrible, terrible mesh WiFi system. I moved to my current home with a perfectly adequate-for-the-previous-space single-node ASUS WiFi router, but there are signal drops in most rooms from the router location at this place, so I decided to give mesh a try to get easier hand-offs between APs. I first tried an ASUS mesh system, as it promised compatibility with my existing router with their AI Mesh, but even without integrating the legacy equipment, the throughput of WiFi-connected devices was unacceptably slow - below 100Mbps in the same room as one of the satellites. The Orbi system supports wired backhaul, which I utilize, and has much better throughput, but the stability is pretty terrible. And reboots, when they occur, are generally cascading-failure events - one AP will fall over for no particular reason, which causes them all to kick the clients off as they reshuffle, then the next node will fully reboot which causes another reshuffle, until finally the router reboots and both APs have to fully reboot to reconfigure. I look forward to replacing it in the near future.
I don't have a huge amount of compute demand for my services, so a single Intel NUC NUC7i5BNK with its 2-core, 4-thread i5-7260U is sufficient. The low power draw is appealing, but I'm keeping an eye on similar-form-factor Intel 12th-gen alternatives, as they trickle into the market. The NUC has 32GB RAM and a 346GB-usable NVME drive with a 4TB spinning external. That's definitely the first part that needs an upgrade, as there is currently no storage redundancy beyond backups.
The NUC runs Ubuntu LTS, and serves as a terrible combination of host OS services like Plex (for easy access to otherwise-physical media and music) and Pihole, KVM virtual machines (mostly for work), but the bulk of non-legacy services are in Docker and Compose:
- Bitwarden (obviously) for password and secrets management
- Nextcloud for automatic backup of phone photos and replacing Google Drive/Docs
- Ghost (obviously) for this site
- Umami for privacy-preserving website analytics
- Jellyfin was supposed to replace Audible but I had issues I'll talk about in a different post
- Tandoor Recipes so I never have to rely on the Wayback Machine when a blog with my favorite recipes disappears again
- wg-easy so the call can come from inside the house
- paperless-ngx so I don't have to buy any more file cabinets
- photo-stream generates my personal photo gallery site linked in this blog's header
This one gets its own section, because I'm moderately evangelical about it. While many in the self-hosted community appreciate the auto-discovery of services offered by Traefik (but I can't stand having to manage all those Compose labels), and many people with my background of Linux sysadmin work stick with nginx (but it takes ages to write new vhost files), I'm a huge fan of the syntactical simplicity and batteries-included security settings and SSL certificate generation of Caddy, the last host OS service I run. I'll detail some of the configuration magic I like about Caddy in a separate post.
Through various scripts and some manual processes, I store everything that's important offsite in Backblaze B2 object storage. Over 750GB of storage currently costs me less than $4/mo. There are ways to get cheaper or even free storage, but I trust that Backblaze isn't going to suddenly disappear as a company, nor do I want to use a work-around like "unlimited" Google Drive storage for something as critical as backups.
Future Plans and Future Posts
I've sprinkled a few "separate post" mentions above; there are some aspects of my hardware and software choices that deserve separate overviews and actual reviews. I also have a list of things that I want to improve about the setup - most critically the storage, both the backup automation aspect and the in-home redundancy. I'll be writing about these as those projects continue, in particular the technical aspects of backup automation with B2 interacting with all this different software, and reviewing whatever replacement home network solution I land on. This was a pretty high-level overview, and is not meant to be a living document. When I feel more settled, with a few more of these projects listed, I'll write a living document that I'll update periodically, and update this (and any subsequent update posts) with a link to the living document at the top of the post.