I spent the weekend moving most of my personal services off the cloud and onto a box in the cupboard under the stairs, and I want to write down why before the satisfaction wears off and I forget that it was also a bit of a faff.
The honest trigger was the monthly bill. Not that it was large, it was about thirty quid across a couple of small VMs, some object storage and a managed database I barely used. Thirty quid is nothing. But thirty quid for things that idle at two percent CPU, serving an audience of approximately me, started to feel like paying rent on a warehouse to store a single box of books. The hardware to run all of it sits at home, already on, already paid for.
what actually moved
I made a list first, because the worst version of this project is the one where you migrate everything in a heroic weekend and then discover three months later that the thing keeping your domain's DNS alive was also in the cupboard during the power cut.
What came home:
- A personal Git server (Gitea), which is happier on a fast local disk anyway.
- A Nextcloud instance for files and calendar, which was the main storage cost.
- A handful of small internal tools and dashboards that only ever needed to be reachable from the house.
- The media library, which was always a slightly absurd thing to be paying egress on.
What stayed in the cloud, deliberately:
- DNS. It lives at a provider whose entire job is to be up when my house is not.
- Off-site backups. The whole point of off-site is that it is not in the same building as the thing it is backing up.
- This blog and anything else that needs to survive my home internet having a wobble.
That split is the actual lesson. "Self-host everything" is a slogan, not a plan. The right question per service is: who needs to reach it, and what happens when the house loses power or the broadband drops? If the answer is "only me, and nothing important breaks", it comes home. If the answer involves the public or involves recovering from a disaster, it stays rented.
the box and the boring bits
The host is nothing exotic: a small tower with a six-core CPU I bought second-hand, 32 GB of RAM, a pair of SSDs mirrored with ZFS for the things that matter, and a couple of big spinning disks for media where I care more about capacity than speed. Everything runs in Docker, behind a single reverse proxy doing TLS termination with certificates from Let's Encrypt via DNS challenge, so I never have to expose port 80 to anything.
The genuinely fiddly parts were the ones nobody puts in the blog posts:
- Backups, properly. Before I moved a single byte, I set up restic pushing nightly snapshots to cheap cloud object storage. The cloud was keeping my data safe almost for free when it was the cloud's job. Moving the data home means that safety net is now my job, and a homelab without off-site backups is just an elaborate way to lose your photos.
- UPS. The box is on a small uninterruptible power supply with a USB cable into the host, so a brief cut doesn't corrupt the ZFS pool mid-write. It also signals a clean shutdown if the battery runs low. This cost less than two months of the cloud bill it replaced.
- Dynamic DNS for the few things still reachable from outside. My home IP is not static, so a tiny cron job updates an A record when it changes. Crude, reliable.
was it worth it
A weekend of work, plus the ongoing cost of being my own ops team. When the Nextcloud upgrade goes sideways at eleven on a Tuesday, there is no support queue, there is just me and a backup I had better hope I tested.
But the file sync is now genuinely instant on the local network, the bill has dropped to a few pounds for the bits I sensibly left in the cloud, and there is a quiet pleasure in knowing exactly where my data physically is. Given everyone is at home and leaning on their home setups more than ever right now, the timing felt right.
The thing I'll keep reminding myself: the cloud was not the enemy. It was doing several jobs well, and I'm only bringing home the ones where I genuinely don't need someone else's datacentre. The trick is being honest about which jobs those are.