Refreshing my Home Server/NAS

I’ve been running a little home server for probably close to twenty years. Originally, it was driven by my desire to learn Linux and run a whole-home MythTV setup. I still think that was an amazing setup for the time, but of course things change and broadcast TV just isn’t what it used to be. About five years ago, I decommissioned my server and moved my media library to a Helios4 by Kobol. My media frontends are now mainly built into our TVs, Fire TVs, or phones/tablets. The NAS was definitely a cool unit and helped my electric bill some, but ultimately the performance left a lot to be desired. ….using it for ostree commits the past few years was painful.

My work has me in the situation where I need a fast local container registry. Given the performance of the Helios4 and that two of the hard drives are from 2007 ……uh yeah let’s get that “spinning rust” out of here. Rather than waste hours, days, months, etc researching what to buy, I stumbled across Brian C Moses’s site, specifically this post. It’s a small world because he lives about ~25min from me. He imports these Topton n6005 systems and they seem about perfect for what I need. I was initially going to print this case, but I decided it against it as I have a perfectly good Antech case collecting dust and I couldn’t tell how well the vertical design the 3d print would work with my setup pictured above.

It’s only been running for a few days, but I’m so pleased with the results I thought I would document this. …plus I haven’t written a blog post in a long time and I should do this more often.

Hardware:

  • Topton Mini-ITX NAS Motherboard w/ Jasper Lake IntelĀ® PentiumĀ® Silver N6005 Processor (Base: 2.00 GHz, Burst 3.30 GHz, TDP: 10W)
  • 64G memory (you only live once right?!)
  • 4TB flash (non-raid, 2x NVME, 1x SATA)
  • 16TB Raid 1 mirror (2x 16T SATA HDDs)
  • Existing power supply and case
A Texas sized case for a non-Texas sized mobo!

Honestly, there’s nothing super exciting here, but it’s a huge step forward in the performance and efficiency side. I have some external drives for back ups, and I mainly want to protect against one of these 16TB drives failing. I’ve had a ton of luck using software RAID with Linux over the years and this is the basic level of resiliency that makes sense for what I need. Oh and I used my p-touch labeler to mark the port number that each sata cable is in. This should make it a little easier to swap drives or add new one drives to those two red cables. …thanks for that, OCD!

Software

I grabbed the latest version of Fedora and I have to say I was pretty blown away. Yes, I use Fedora every day since FC4, but I’m also at a point where I’m not setting up servers from scratch very often. This was a great reminder for just how far we’ve come in the Linux world and how user friendly things can be. ….oh there are plenty of cool things that will trickle into the next enterprise release soon enough! :) Basically I have a minimal install that self updates using dnf-automatic, 1 mirror, a handful of disks, some LVM volumes, and everything else is running as containers via Podman. If you haven’t looked at Podman in a while, now is the time to get up to speed with using quadlets to define your containers (bonus points for using auto-update), and I took full advantage of that.

Hey that’s not very many containers! …don’t worry more are coming!

phpsysinfo -> cockpit

It’s everything you want to know at a glance and nothing more. ….oh and you can click stuff and do things!!

I’ve been a fan of cockpit for years. While I use cockpit regularly, I haven’t actually used it to setup a “system of record” in some time. Holy crap it’s amazing to see the progress that’s been made. There are a lot of utilities and commands in Linux that, while I feel I know them and have used them for years, I still find myself googling as I don’t use these commands with enough regularity to retain the intricacies. I’m a fan and have no use to mess with phpsysinfo anymore! …although it served me well for a long time.

MythTV, Jinzora, Kplaylist -> Jellyfin

I’ll always have a soft spot for MythTV, but jellyfin fits much better with what I need these days. I haven’t been running it very long yet, but I was amazed with how easy it is to setup. I much prefer the idea of setting up a backend and my clients just work. I still really like Kodi, but I do not enough maintaining it on multiple clients. My new server also does a great job transcoding videos on the fly to any of our TVs, phones, etc. I actually didn’t factor that in when I was spec’ing the hardware. Also, I used to have Jinzora and kplaylist hanging around for streaming and downloading music to my phone. These projects were pretty mind blowing for their time, but they haven’t aged very well. I did not expect jellyfin to handle my large music collection, but holy crap it does. Also, their android app is amazing. So this was huge win and the podman documentation is *perfect*! Oh and my old HDhomerun tuner “just works” too.

Pro tip: The HDHR-3US will negotiate random high UDP ports so I just added the source IP to the trusted zone for my server and poof, it works! firewall-cmd --zone=trusted --add-source=[tuner IP in CIDR] --permanent

Now any client gets broadcast TV. …not there’s anything worth watching but next time there’s a tornado, we cat watch the weather in the bathroom as a family!

httpd -> Caddy

OK, Caddy is probably the biggest single game changer here. It’s a simple web server & reverse proxy with automatic TLS. This solves three problems for me. 1) I hate getting browser errors for self-signed certs. This is also problematic for the container registry I need to run, and I really don’t want to mess with client-side configurations. 2) who wants to remember the ports being used by containers, especially when you’re running more than a handful? Kubernetes solves this problem by using “services” which typically run behind some type of reverse proxy. 3) I don’t really want to deal w/ a LAMP stack if I don’t have to! ….well, caddy to the rescue! I’m using cloudflare DNS and Caddy perfectly creates TLS connections. Each container I need to access has an entry in the Caddyfile which helps me keep all the ports straight. Instead of using [SERVER-IP]:5000 as my registry, my clients point to registry.mydomain.com and the TLS just works! Finally, it’s a super fast web server and is perfect for serving my local files. It greatly simplifies a lot of things I used to deal with. Of course Caddy is just another container running on the server w/ everything else.

I also have Caddy serving a local landing page with links to almost everything on my network including my 3D printer, sprinklers, cameras, etc. So the next time I have a middle-age moment and forget an IP or hostname, this little landing page will help me cope! Go read this blog or this one to learn how to set this up.

Final thoughts

My setup is really super simple and was long over due for an upgrade. I really wish I had done this years ago, but regardless, I’m really glad that it’s in place now. I’ve also had two other home network upgrades including moving openvpn to wireguard and adding Adguard. Both of these were great upgrades that compliment the new server. There are a few more containerized applications I’m going to add in the future. I’m also anxiously awaiting podman 5 which is scheduled for Fedora 40. Specifically, I’m waiting for quadlet to gain the ability to manage pods for multi-container apps. Pods work great today, but everything is sooooo clean w/ quadlet that I’m going to wait for that. I predict this will be in place for quite a while and I love that there’s room to group compute & 2x free SATA ports. Next on my list is upgrading these ancient 1G network switches. That’s the next bottleneck.

4 Replies to “Refreshing my Home Server/NAS”

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.