Skip to content

Unexpected Linux Adventures

Jellyfin on Kubernetes with Intel GPU

I don't often watch videos, but when I do, I find it useful to have them all in one Plex... at least, I did, until the recent Important 2025 Plex Updates made it clear that it was going to have a significant cost; for a service I seldom use.

The new pricing becomes effective today and, although I had a few weeks to ponder the possibility of purchasing a lifetime subscription for a lot less than it costs now, I decided to switch to Jellyfin and I'm glad I did!

Synology DS423+ for the homelab (luggage)

SPAAAAACE!!! I like Space.

Despite all my efforts, hard drives keep filling up. Producing videos definitely does not help keeping drives from filling up and these days it's rather hard not to produce videos even accidentally. Besides that, having a single large storage unit allows making all the backups to a single place, at least once. Important data is already replicated in multiple disks and/or machines, having an additional large storage allows replacing one of those copies and thus alleviating disk pressure.

Remote access options for self-hosted services

Running self-hosted services behind a router that allows port forwarding is mostly as simple as forwarding a few ports, mainly 443 for everything over HTTPS and port 80 for automatically renewing Let's Encrypt certificates.

Otherwise, being behind a router that either doens't allow port forwarding, or just doesn't work well, or being behind CGNAT, may require the use of some sort of tunnels to route inbound traffic using outbound connections. This can also be useful even in the above case, when multiple systems need to be reachable on port 80.

Cloudflare tunnels do not enable access on port 80.

Cloudflare redirects port 80 to 443, to upgrade HTTP connections to HTTPS. That means ACME HTTP-01 challenges to renew Let's Encrypt certificates need to be routed to the relevant port (80 or 32080) based on the request path; see Let's Encrypt via tunnel.

Adopting Firefox and Bitwarden as daily drivers

Google Chrome has been my daily driver for a really long time; so long, in fact, that all I remember was the initial frustration when it first came out without a release for the GNU/Linux platforms. I don't remember why, or even whether, I was so eager to jump ship, and at this point I can only guess that the old ship was the one I'm preparing to jump back to: Firefox.

It seems on-line life has gotten a wee bit more comp-lic-ated that it was back in 2008, when smartphone apps were a new thing, YouTube had only 720p video, and Spotify was brand new...

Home Assistant on Kubernetes on Raspberry Pi 5 (Alfred)

That old house with aging electrical wiring, where last winter we needed Continuous Monitoring for TP-Link Tapo devices to keep power consumption in check at all times, could do with a more versatile and capable setup, to at least partially automate the juggling involved in keeping power consumption within the contracted capacity.

Home Assistant should be a good way to scale this up, but what that old house needs in the first place is a 24x7 system, so here we go again to setup a brand new Raspberry Pi... enter Alfred, the new housekeeper.

Migrating UniFi Controller to Kubernetes

The old UniFi Controller and its required Mongo DB have been a bit of a hassle to keep updated while running directly on the host OS in my little homelab server, so the time has come to migrate this to the new linuxserver.io/docker-unifi-network-application on my little Kubernetes cluster on my new Kubernetes cluster.

Warning

Beware of outdated documentation, most articles out there like Install Unifi Controller on Kubernetes, are based on the deprecated linuxserver/unifi-controller, while others like setting up the UniFi Network Controller using Docker are using jacobalberty/unifi-docker which was quite outdated until recently.