This site runs on 30GB of RAM
My residential internet gateway is a two-in-one optical network terminal (ONT) and home router. The gateway is configurable only through a web interface my ISP controls and they, unsurprisingly, expose very few gears and knobs for me to play with. This must be intentional on their part. They probably get a lot less tech support calls from people locking themselves out. I’m slightly annoyed about waiting 15 minutes for the DHCP lease list to update, but not annoyed enough to do anything about it. $60/month gets me 2 gbps up/down. That’s a great deal even if it means I can’t customize much.
I’ve had this service for 16 months and never bothered to check if I’m getting what I pay for.

That’s fast… but surely not fast enough? I went through most combinations of:
- (a) macbook, (b) thinkpad, (c) mini pc
- (1) wifi 5 AP, (2) wifi 6 AP, (3) usb-2-ethernet, (4) thunderbolt-2-ethernet, (5) ethernet-2-ethernet
Resorting to anything just to avoid a phone call, the problem must surely be the cables. So I terminated brand new cat6a from spool I had used only a month ago and knew to be good. The mindless testing continued for another 2 hours until I finally phone up tech support and, after just 2 minutes of holding1, they tell me that lan ports 1 and 2 on the gateway each support 1 gbps up/down. what.
Since I live in a small apartment and all of my devices comfortably work on a single wireless access point, there really is no need to run a second AP for more coverage.
I overpaid $160
When I moved in, my ISP was selling a 1 gbps line in the building for $50/mo, $10 less than my plan. They no longer advertise this price.
Today they’re selling 3 gbps for $15/mo more. It comes with a separate ONT and gateway router that, unlike my two-in-one, is capable of saturating the connection from a single device.
Well that sucks. I’m not spending another $15/month. Let’s find a good use for this unused port valued at $160 (and counting). We’ve got a 1 gbps link just wasting away here. It’s time to start self-hosting.
I spent $1,000
What the hell has happened to memory prices? Anyway, I’m out approximately $1,060:
- barebones mini PC ($500)
- 32gb ram ($500)
- 16x used 2tb HDDs ($60 total, thanks Paul)
- 1tb NVMe SSD (free, thanks me)
After testing, all of the used HDDs reported less than 20,000 power-on hours and no s.m.a.r.t. errors. Not sure why they were being thrown out2. Lucky me.
I plugged some of the HDDs into a USB DAS enclosure and attached them to the mini PC, a few others into a NAS, installed headless linux, ufw, docker, caddy, and we’re off to the races!
what do I put on this thing…?
For the last 6 years, I’ve been taking advantage of GitHub pages to host nebezb.com for free. It’s been weighing on me. I’m no Microsoft shareholder, but I’m certainly no freeloader either. Last week, I archived the repo hosting my homepage. It’s time to repatriate all that html to Canada.
we don’t have a static ip
Actually, we don’t really have anything. Not a static ip, not backup power, not a failover network. Heck, my guests sleep in the same room as this “server” and they could accidentally knock the power cable right out of the wall while reaching for a hand towel or slippers3.

I have a single DNS entry for home.nebez.dev that I update every 120 seconds thanks to CloudFlare’s API. A public IP check, comparison, and upsert. At most 2 minutes of downtime when my IP inevitably changes. That’s okay with me. If this script fails, I’ll only find out much much later when I try to load this site and it doesn’t resolve (or the new IP holder hijacks all the domains I own). Or maybe it isn’t resolving because of nat loopback?
There are quite a few domains, both apex and subdomains, that I want pointing home. Thanks to CloudFlare’s apex CNAME flattening, I only keep a single entry up-to-date and rely on aliases for everything else. All of these examples below resolve to that beautiful box in my closet up above:
host home.nebez.dev- Ahost nebez.ca- flattened CNAMEhost www.nebezb.com- CNAME
Like I mentioned earlier, my router config is a simplified web ui controlled by my ISP. And it certainly doesn’t have any way to configure nat hairpinning. Thankfully I can manage DNS settings and, since we’re self-hosters now, we run a dns proxy that rewrites home.nebez.dev4 locally.
we’re live
I don’t know how I got here and I’m nowhere closer to using the 2 gbps I’m paying for. But it’s live and I like it.
Here are the live stats of the server running this website. I generate them using webtop-gen and serve them live from home.nebez.dev/stats.json.
For the cost of $1,060, here’s what I get:
- when my power goes out, my site goes down
- when my internet goes out, my site goes down
- when my IP changes,
someone can hijack my nameseverything should be fine - when my server reboots, all my lan devices lose dns
- a server I must keep patched and updated
- a bunch of spinning disks that might fail
- less ads on my phone thanks to adguard
- a site that loads immediately for me here in Toronto, and honestly that makes it all well worth it.
I have no idea what I’m going to do when I have to move from this place and relocate the server, but I had a lot of fun doing this and I’m enjoying the little annoyances. Self-hosting is fun and I’m looking forward to using up all that available memory and disk space. Ideas?