My home NAS setup: a dive into the unknown
This article is intended to be the first in a series as I build my home NAS ecosystem and learn more about networking and home automation. Stay tuned for more.
Flashback to early 2025: The world is changing, and as each week passes, global relations across the planet are bending in unnatural ways. A new US president is shaking up assumed norms about Western alliances, and tensions in Ukraine and Gaza are showing signs of broader escalation.
Now, ideally you’re reading this from a much calmer future, and have the benefit of being able to look back on this blog post from your cosy fallout shelter, knowing everything turns out just fine. But until that time, there’s only one thing to do - build a NAS! Obviously.
It feels like it’s time to become that little bit more self-reliant when it comes to my personal data, and a little less reliant on big tech, hosted mainly overseas (he says, typing into Notion on a Macbook).
Like many of us, I’ve got years of digital detritus: thousands of photos stored across cloud services, digitised family VHS tapes, personal files, media collections, and more. It’s time to get organised.
So here are the goals:
- Organise family photos and videos in a centralised, self-hosted location
- Ensure both my family and my girlfriend’s family can access them easily
- Store personal files, media, and repositories
- Ensure it’s all safely and regularly backed up
Now, obviously, I can’t just buy a NAS. That would be too easy. I need to build it myself. Every part of it - hardware, software, networking, the lot.
The Hardware
After a little research and a lot of procrastination, I started to commit to buying hardware. I knew that I wanted to build a server with a relatively small form factor, and most of all, it needed to be silent.
I didn’t want an off-the-shelf black box. I wanted something that I’d understand inside and out - something I could customise, tinker with, and feel proud of. That meant building it myself, from the ground up.
Components
- Motherboard: MSI PRO B550M-VC This is a Micro ATX motherboard - perfect for a server with a smaller form factor.
- CPU: AMD Ryzen 5 PRO 4650G
- CPU Cooler: Thermalright AXP90-X36
- Memory: Kingston Server Premier 16GB x2
- Case fans: ARCTIC P12 PWM PST This was a steal on Amazon. A pack of five for £34.
- PSU: Cooler Master MWE 550 Bronze 230V V2
- Storage: Seagate IronWolf Pro x4
- SSD: Verbatim Vi3000 NVMe M.2 Internal SSD
I tracked down a neat looking case and started putting it together. The PSU wasn’t modular, so managing the spaghetti of unused cables was more work than expected. I picked up some ultra-thin SATA cables for the HDDs as the case I bought required them to be routed through some small openings in a separation between the motherboard and the HDDs.
The case fans chain together, which meant I only had to connect two of them to the motherboard, and chained a further two on.
Sure, it wasn’t cheap - the build totalled just under £2,000 - but this isn’t just storage. It’s a long-term project, a hobby, and a foundation for years of self-hosted services.
The Software
I went with RAIDZ1 - a ZFS-based architecture with one redundant drive, offering a good compromise between usable space and fault tolerance. I chose TrueNAS SCALE as the OS, as it’s Linux based and has great support for Docker containers.
TrueNAS SCALE also natively supports scheduled cloud backups with multiple providers. I opted to use Storj, which offers a pay-as-you go pricing model based on storage space and download bandwidth. It’s really cheap if you’re purely using it as a backup mechanism and don’t intend to regularly download data from it. Just make sure your TrueNAS sync is configured in push mode.
Organisation was important from the start, especially given the amount of media I wanted to share with both families. I also want to ensure I have a private file store, and a shared file store with my girlfriend, Emily.
The final dataset structure I settled on looks as follows:
- Main
- Media
- Family
- [my] Family
- [girlfriend] Family
- Movies
- TV Shows
- Family
- Private
- Daniel
- Emily
- Shared
- Media
This structure enabled me to easily expose SMB shares targeting the two family folders respectively, and mine and Emily’s private folders.
I also opted to set up a Jellyfin media server running in Docker. The intention was to give both families a user that could view Movies, TV Shows, and each family's respective folder.
All this might sound like overkill for what’s essentially a glorified file server, but there’s something very satisfying about knowing your memories and media live in your own home, under your control. Plus, there’s always so much more to tinker with.
The Networking
So, we’ve set up a server. We’ve configured RAID and got it backing up to the Cloud. I’ve set up a Jellyfin media server which is amazing (I don’t know why I haven’t set up a media server before) - but what happens when I leave the house?
It’s time to mess with some networking. To access SMB shares remotely, and host apps like Jellyfin and Home Assistant, I needed a VPN and a cleaner way to navigate my internal network. I wanted to assign friendly hostnames to each app instead of having to navigate to varying different ports on the NAS.
It was time to introduce Tailscale. It’s built on WireGuard, a fast and modern VPN protocol, but Tailscale takes care of all the fiddly bits, such as key management, NAT traversal, firewall rules, all behind the scenes. You install it on your devices, log in, and voilà - they can all talk to each other securely.
Actually, it wasn’t entirely plug-and-play, but overall, it was surprisingly painless. I installed it locally on a Raspberry Pi 5, to keep it separate from my main server. I coupled it with Pi-Hole and Caddy, to support local DNS and reverse proxy, to assign clean, friendly domain names to my various services.
I actually ended up setting up a couple more Raspberry Pis (see how addictive this project is becoming?), and deployed them to the households of both our families. I installed Tailscale on each one and mounted the relevant SMB shares to configure Jellyfin on each. They act as a bridge between the TVs, which aren’t on the Tailscale network, and the home NAS.
My original intention was to expose Jellyfin from my NAS through a Cloudflare Tunnel. That idea quickly fell apart when I discovered streaming media via a Cloudflare tunnel violates their terms. Fair enough.
I’m not going to lie - I spent days fixing networking issues but we can skim over that detail.
Final Thoughts
This project started as a simple desire to tidy up my digital life, but like most good nerdy side quests, it spiralled. It’s now a fully-fledged home lab setup. A self-hosted ecosystem that manages everything from media to backups, across multiple homes, through encrypted tunnels and custom domains. It’s deeply satisfying.
There were mistakes, of course. I lost hours chasing phantom networking bugs, redoing permissions, and yelling at routers. But I’ve also learned more in a few weeks than I would in months of passive tinkering. And best of all, I’ve got a setup I trust, that I fully understand, and that does exactly what I want it to do.
Would I recommend others do this? Absolutely. Just maybe start with a slightly smaller ambition. Or don’t. Part of the fun is seeing just how deep the rabbit hole goes.
And if you’re reading this from a calmer future where your data is safe, your Jellyfin is thriving, and you’re settled in your own self-hosting spiral - welcome. You’re in good company.