Series of posts about my homelab

81 posts latest post 2026-10-06
Publishing rhythm
Oct 2026 | 1 posts

I started my homelab journey being super naive about ZFS and how to manage the filesystem… that bit me in the butt when transfering a ton of files out of folders and into datasets because ZFS is copy on write so I was essentially duplicating my storage until I got a hair smarter about removing files after they’re moved (rsync –remove-source-file ftw). But I had a ton of snapshots of child datasets with a ton of data that I just never will need, so I learned zfs list -H -o name -t snapshot tank/dataset1/dataset2 will list just the snapshots for dataset2 and if you pipe that into xargs -n1 zfs destroy then you have a way to clear out some snapshots you don’t need!

Jellyfin-Media-Players

I use Jellyfin at home for serving up most of our media - movies and shows etc. My dream is to have a GPU capable of transcoding any and all of our media for smooth playback on any device… Now, I thought I’d have that by now with my Nvidia Quadro P400 however I have issues left and right with 4k content. What can I do to still use Jellyfin but get smooth playback? THe first answer is figure out why I suck with GPUs, but pausing that there’s shorter solutions -> namely, use a media player that’s compatabile with the encoded content! VLC # I’ll keep this one short - VLC is great and if you don’t need a netflix like experience, I’d recommend just using it to browse your network drives and play whatever you have Jellyfin Web Player # This is the reason I’m writing this post… the web player is great but not everything is supported on all devices Jellyfin MPV Shim # This cross-platform cast client is my answer now. You can find the project here The installation instrauctions are super straig…
self-hosted-media

self-hosted-media

Self-hosting 1 or several media servers is another common homelab use-case. Getting content for your media servers is up to you, but I’ll show a few ways here to get content somewhat easily! YouTube Disclaimer at Bottom you-get # is a nice cli for grabbing media content off the web. Installation # or use ad-hoc with Usage # For example if I wanted to catch up on ancient Chinese military tactics I may go for off the Internet Archive… the is showing me the info of what would be downloaded without the flag (it’s like a dry run) Now I can toss that mp3 onto my server and study for world domination while I do the dishes! pytube # is a python implementation of a youtube downloader that works at the command line or in python! Installation # docs Usage # has a lot of functionality, but a quick one would be the so you can see what qualities are available will download the specific from the list. Notice that some are videos and others audio - so you can download just the music of a YT video. als…

Truenas-And-Wireguard

NAS # One of the most common use cases for self-hosting anything is a file share system. I have been a fan of TrueNAS for a while. I currently use TrueNAS Core at home, and plan to consider transitioning to TrueNAS Scale soon. Blog post forthcoming on that! VPN # I don’t write a ton about homelabbing yet but one of the first things to set up whether you have a massive homelab or a little raspberry pi would be a self-hosted VPN. I have notes on wireguard here. I finally have a need to put my TrueNAS box on my wireguard network in order to transfer files to other devices that are outside my LAN. There is a handy tutorial on setting this up via the GUI here. They walk you through setting up 2 tunables wireguard. One to enable the the connection and one to setup the network interface. Next you create a script which will check that the right directories exist and will copy the wireguard config that hasn’t been made yet to the proper location and finally starts wireguard. The above is just c…

Wireguard

VPN # Virtual Private Networks are a big deal, and this shouldn’t be considered anything even close to a guide on using them. Here are just my notes and some setup for how I use wireguard at home. Wireguard # Wireguard is an awesome peer-to-peer VPN tunnel that makes it really easy for me to get into my home network when I’m out and about. My main reasons for this are 1. I don’t trust public wi-fi and 2. I want to use pi-hole for ad blocking when I’m not at home Wireguard can be configured as a “peer-to-site” VPN tunnel as well. My vpn setup let’s me jump to various machines on my network from anywhere! I use pivpn in a VM that’s already running to host my wireguard server. It’s super easy to setup just by following the instructions on the pivpn site. The reason I like it is that I have a nice for managing wireguard configs. When I’m ready to add a new client to my network, it’s as easy as and follow the instructions. The easiest part here is that you’ll be given a QR code in the termi…

I run pi-hole at home for ad blocking and some internal DNS/DHCP handling.

pi hole posts on the way

One thing I’ve never put too much thought in is asking “how well am I doing at blocking?” There’s lots of ways to measure that depending on what you care about but I just learned of adblock tester. It’s awesome and gave me a quick glimpse into how my pi-hole is performing on keeping my webpages clean and my DNS history private!

Credits to d3ward for the awesome tool!

I host a lot of services in my homelab, but they’re mostly dockerized applications so I have never had to care much about how content gets served up. Today I had several little concepts click into place regarding webservers, and it was a similar experience to when I started homelabing and didn’t know what a “server” was in the first place.

Servers

A “server” can have a lot of different meanings but specifically in my world it was a physical server, like my PowerEdge R610 which acts as my main “home server”. But then on my server, I have other servers… Jellyfin is my main media server - but that’s obviously not a hardware thing, that’s software. This is certainly not a groundbreaking thing but it was a tiny piece to the puzzle that I was missing… that “server” is highly contextual.

Webservers

Something that confused the heck out of me when I first started down the road of having a server was what a webserver even was… I always thought the “webserver” was just “a server that hosts a website”… and yes, that’s true, but also it wasn’t true in how I understood “server”. It turns out that across my 40-odd dockerized services I have at home that I must have about 40-odd web servers running, each docker container is spinning up its own!

So something I have wanted to do for a long time is put my theology notes online for my small group to access whenever they might want… it doesn’t need to be fancy or anything. My issue was not knowing what to even Google. I tried “How to serve up static html” but that kind of search is for people who know what a “static” site is - I am not one of those people. I kept running across nginx and apache things, wordpress and other website building tools, etc. In fact I only recently learned that JavaScript assets cann still be considered static so I am a complete baby in the web-dev space.

What I really wanted was just a simple landing page with a link to each of my “posts” which are in the form of a single html file each that I can easily export from my tiddlywiki (I have a post about tiddlywiki here)

The first win python -m http.server right in the directory I kept my html files in and that got me what I wanted functionally. But then I wanted just a hair more organization… I started looking for a way to dynamically generate an index for a directory of html files but again the verbiage of that Google search just wasn’t helping me - I didn’t want anything complicated and I knew that what I wanted had to be easy…

The Index

Luckily I randomly came across a SO that mentioned a Linux utility called tree which does exactly what I wanted!

See my TIL on tree here

So now it goes like this:

  • Take notes on X in my tiddlywiki
  • Export that tiddler to a html file
  • Put that html file into a notes folder in my github repo for small group notes
  • Use tree to generate an index.html of each of those files in the notes directory
  • Use python -m http.server to start a web server that lands me at the index.html and now I can click through to any post!

It’s not fancy but it’s functional… This site/blog is built with markdown and markata and I wanted way more functionality in my tech notes. But for this simple use case I learned a ton about how content gets served up on a webpage and my small group benefits from the easy access as well!

Traefik

Traefik If you don’t know about traefik and you need a reverse-proxy then you might want to check it out. I used to use nginx for my reverse proxy but the config was over my head, and once it was working I was afraid to touch it. Traefik brings a lot to the table, my main uses are reverse proxy and ip whitelisting, but it’s doing even more under the hood that I don’t have a full-grasp of yet. I like Traefik a lot because once I get some basic config up it’s incredibly easy to add services into my homelab whether they run on my primary server or not. This will not be exhaustive but I’ll outline my simple setup process of traefik and how I add services whether they are in docker or not. Docker In 2022 I’m still a docker fan-boy and I run my traefik instance in a docker container. This isn’t necessary but I love the portability since my homelab is very dynamic at the moment. And even if it wasn’t I’d still want to keep traefik in docker because deployment and updating are just so flipping…