Building a server to store media
April 17, 2025
Motivation
- My school’s Google storage was no longer unlimited
- My old external hard drive was already half full, and I wanted to be prepared for when it runs out of space
- It’s fun to build things and learn more about servers/hosting as a frontend engineer
Hardware
I wanted this to be an ITX build because I’m keeping it in my living room, and I wanted it to be decently small and presentable.
All parts were purchased second hand, except for the hard drives and cables
- Jonsbo N2 (Facebook Marketplace)
- Noctua A12x15 case fan (eBay)
- Corsair SFX SF750 Platinum PSU (Craigslist)
- Intel i5-8500 (Reddit)
- cooled by a Noctua NH-L9i CPU (FBM)
- ASRock IMB-1210-D (”industrial” ITX motherboard) (Reddit)
- 16gb DDR4 SODIMM RAM (Reddit)
- might upgrade to 32gb
- 2 x Seagate Exos X20 18tb drives (goharddrive.com)
- accessories
- 6 x SATA cable (Amazon)
- fan guards to replace the Jonsbo default mesh ones (Amazon)
Software
I was deciding between the following:
- Unraid - paid
- OpenMediaVault - made for slightly slower machines
- TrueNAS Scale - seemed like a good balance
I knew I wanted a storage-first OS, but the ability to run some apps was also a pretty big factor. I chose TrueNAS Scale because it seems pretty popular, user-friendly, and is open source! My storage setup is also not super complex and I don’t mind dealing with migrations/manually expanding the server in the future.
Storage
- I created a pool running mirror between the two disks
- decided this because the whole point of the server is redundancy/backup
- the tradeoffs of speed/storage vs. safety vs. cost are worth it to me
Apps
- Immich - Google Photos replacement (including the AI! but excluding the sharing 😢)
- Tailscale - VPN so I can access the server remotely
- Jellyfin - self-hosted Netflix!
Nice things
- really easy to set up Jellyfin, Tailscale
- things mostly just work!
- really easy to access files from devices on network, don’t need to plug in drive
- white noise machine?
Tricky things
- importing data from external hard drive - NTFS, used rsync, the web UI console times out (I ultimately needed to ssh into server from my desktop and then started rsync)
- Immich setup was a pain - custom host paths don’t work for the postgres directories
- not as quiet as I would like (ideally it’s near silent) because it’s a small machine and the case fan runs at 100% (even though it’s a Noctua)
- RAM might be a bottleneck
- need a monitor to setup, but router is in living room and didn’t have a DP cable at the time, had to move things back and forth and borrow a cable from a friend
Useful resources
- todo
Thanks for reading :)
Last updated April 17, 2025