So I got into self-hosting…

I like configuring things, and hate subscriptions, so I’d been thinking about it for a while.

Hating subscriptions, to start I only had two to rid myself of: Google One Basic, and Spotify Premium (which got a bump in October).

The Hardware#

Looking for a small, quiet, power efficient box with easy storage expansion, I landed on the Bee-link Me Mini. It has an Intel N150 processor, a pretty common (and powerful for its size and efficiency) little chip for mini-PCs with a base power usage of 6W, six M.2 slots for NVMe SSDs, two 2.5Gig ethernet ports, and barely makes a sound with its single fan.

Despite the six slots, I actually don’t need a ton of storage right now, maybe 100GB at most. But when I do, for reliability it’s best to have identical drives, so I need a drive manufacturer I can assume will still be around in a few years. With this in mind, I landed on three 1TB MP4LL’s from Teamgroup which were going for just under £50 a piece from OverclockersUK in August.

The Operating System#

One of the things that gave me the confidence to get started with this project was HexOS, a beta NAS (network attached storage) operating system built ontop of TrueNAS Community Edition (formerly ‘Scale’), that seeks to provide an easy and flexible NAS experience. In retrospect, I’m probably in the camp of NAS-builders who could get away with learning TrueNAS, as I’ve spent the majority of my time using HexOS there rather than the HexOS ‘Deck’, but you live and you learn.

TrueNAS (and by extension HexOS) has a nice pre-packaged ‘Apps Market’ that can simplify docker container installation, though more often than not you’re just writing a docker-compose file as a form in their UI.

First Applications#

Photos: Immich#

My main use for Google One Basic is Google Photos, and Immich is an amazing drop-in self-hosted replacement. It’s pretty popular too, so you can generally find some nice CLI tools for working with it. One example being Immich-Go which made importing my photos from Google Takeout pretty painless.

Music: Navidrome#

Replacing Spotify Premium was less obvious. It took me some time to figure out that I didn’t want to copy over my library and listening habits like for like. Long playlists with sometimes one song per artist, and letting the algorithm dictate how I discover music (song by song), had started feeling less appealing.

Albums and Extended Plays are the intended listening experience for the most part, so I went through my library picking out every album I definitely wanted to have access to, and every album with at least 2 songs I knew I liked. In the end I had about 87 albums/EPs/singles to cover every song or group of songs I liked enough to listen to the rest of the album.

Wanting to actually support the artists I enjoy, and own the music I pay for, I buy everything I can on Bandcamp, and download albums in .FLAC from there. When this isn’t an option, I’ll hop on Soulseek.

Looking for an actively developed, solid music streaming server with open compatibility, I landed on Navidrome. It supports most of the OpenSubSonic API, supports scrobbling to Last.FM1, and just works well.

For clients, I’m using Symfonium on Android, and Supersonic on Desktop.

To keep ontop of song metadata and to fetch covers and synced lyrics, I’m using MusicBrainz Picard with the ‘Picard Sözler’ plugin to grab synced lyrics if any are available.


  1. If you give it an API key in the environment variables. You can find me as danbat-es over there, and you may recognise my profile picture from a previous post↩︎