obsidian says this takes 16 minutes to read.

look at the page updates here.

You know that moment back in school, when you were just seeing a new math concept, and you wouldn’t understand it, untilthat moment that someone sat down with you and explained to you step by step how it is done (or you figure it out by yourself)? And then you’re like “ohhhhhh I finally get it now!” and manage to pretty much get a good grade on your math homework?

That is how I felt with Docker recently. Before all of this, and before I started fucking around with it again (read more here), I was really confused by the idea of the Compose file. Like, at first glance it really looks like a confusing word salad that is used in Docker to rebuild itself from the ashes. I think it is very interesting IMO, like how it is all done.

I still wouldn’t know how to roll a Docker container by myself, but at least with this I am able to actually add more services that I’ve been wanting to do for a while. Anyways, there is a couple of selfhosted services I have on my server.

koito

koito on the main screen
koito on the main screen
koito's version of spotify wrapped
koito's version of spotify wrapped

So Koito is a selfhosted music scrobbing server that makes use of some of the APIs that ListenBrainz has, and implements them just enough to make it work. Koito is very barebones, and there is nothing much to see here. It just gives you the stats and a small overview of your listening habits, and not much else. I kinda wish it was able to “recommend” me songs to listen next, based off that data, but it is selfhosted, therefore it isn’t really able to do that at the moment.

As mentioned earlier, Koito really only implements the bare essentials to make scrobbing working. Try doing anything else (like setting a song as “Loved” or requesting any data from the server) often does not work and will return a 404. Pano Scrobbler doesn’t really like Koito but it will still send songs to be logged (even the queue backlog feature in Pano Scrobbler works). To be honest, I kinda want another better solution that is more feature complete than Koito, but sadly this doesn’t really exist. And selfhosting the entirety of ListenBrainz seems to be more of a pain compared to Nextcloud, so for now I’ll probably keep on using Koito until then.

yamtrack

To be honest, I do like the idea of Letterboxd and other media tracking websites. The thing is that, to do all the things I wanted to do (for example, track game progress, log movies and TV shows I have watched), I would need to sign up to multiple websites to do so. This is annoying, and honestly really does suck. So I only kept Letterboxd, tracking whatever I watched there, but then I realized that I don’t really want to use it anymore at all, so we end up with me trying to find a selfhosted way to do this.

First of all, I found an app called Tonkatsu Box. It was a neat little app that was designed for tracking shows and movies, and even games, books, whatever. If it was a piece of media, then most likely Tonkatsu Box could handle it. But there was a flaw with this app. It does not have syncing, and while it supports over the network syncing with two apps open at the same time, this wasn’t acceptable to me1. I decided to try finding an alternative, something selfhostable, perhaps. So after a long time searching, I found Yamtrack to be a good option.

yamtrack on the main screen
yamtrack on the main screen
some movies view
some movies view

Yamtrack pretty much has the same features as Tonkatsu Box. It can do media tracking for anything, and it can get metadata and other information for these too. Sadly, the documentation on Github for this project is pretty poor. While there is a “documentation page” on Github, any documentation regarding setting up the compose file is nonexistent, from what I can tell. So I had to manually copy the compose file and add it to my existent one, and then proceeded to run it. The documentation also fails to mention on what port the hosted service would be, but I was able to figure out by the compose file that it would be hosted on port 8000, I originally wanted to change the port to something else, but Yamtrack wasn’t happy about it, so I will leave it as is for now.

After all that, I started adding my shows and movies from Letterboxd to here. Sadly, Yamtrack does not support any exported files from Letterboxd, so it’s up to you to manually add them to the library. This sucked ass and it was miserable, but I only have to do it once and never again. For most forms of media, it allows you to add a score to 0 to 10, add the status of the show (if you are planning to watch, dropped it, or currently watching it), as well as the start date and end date of when you first started watching and finished the show or whatever. You can also add notes to your watch entry, which is a nice to have.

Clicking on an entry, the website will show you the information of the show, what format, release date, and the runtime it has, and other similar movies to the one you just added. This works for TV shows, movies, games, and I assume other stuff as well.

Aside from that, Yamtrack doesn’t have much more than what I talked about. It is a simple selfhosted website that does what it was designed to be, a tracker for media that you can use and nothing else.

nextcloud

Nextcloud is probably the first thing I managed to run on Docker, and probably the most difficult program I ever set up before (even when using the AIO version). The documentation for running inside Tailscale was very difficult for no reason. The documentation also has changed over time, as people improved the process. This sucked, and getting it working took around 8 to 9 hours of my life. But I did it, and aside from one small issue when I upgraded my server from Fedora 40 to 422, I haven’t really encountered no issues so far. People do say that the AIO version is able to take care of itself most of the time, and I do see here why.

the dashboard
nextcloud's dashboard
the files view
nextcloud's file view

I think the best way to describe Nextcloud is that it is a monster. It has so much features that it may overwhelm the average person. For example, on my instance, I use Files, Photos, Mail (a mail client for testing how it works), Contacts, Calendar, Notes, Deck, Bookmarks, Nextcloud Countdown (a countdown timer to certain dates), Podcasts, Tasks and News. It is like 12 apps mushed into a single place, which is awesome. I can get more apps if I really wanted to, but I feel at this point it is enough for now, and all my needs are covered for the time being.

I feel that my Nextcloud setup is very jank and it could be better. For example, I use the guide provided by the Github page for Nextcloud, which puts Tailscale in a container, however there has been people debating that this is not really a great idea to be honest. Another thing to mention is that if something breaks, it is likely I wouldn’t know how to fix it. I also don’t have any redundancy for anything here, so if it were to die, a lot of stuff would be lost. I should get around to setting up some backup solution, but eehhh that would be future lug’s problem™3.

jellyfin

Originally I set up Jellyfin as a way to experiment how it worked. I didn’t know how to use Jellyfin in Docker, so I decided to use the bare metal version instead, that just installs like a normal program in Fedora. From there, the challenge was auto starting it, which I don’t remember what I did, but I ended up getting it working, so there is that.

jellyfin web ui, on the movies view
jellyfin web ui, on the movies view
the shows UI
a look at the shows view.

Anyways, for the longest time my Jellyfin instance really didn’t get used at all. My server has no GPU for video acceleration, therefore it would have trouble serving and transcoding video above certain resolutions. You can hear the fans speed up when I do open a video, and I feel that I should get a GPU for this thing soon.

As time went on, I started using it more and more. First as a way to watch some shows here and there, and then to watch downloaded Youtube videos. From what I am able to tell, the server does an okay job of playing back media, and it doesn’t really struggle if the media being played is under or at 1080p. Above that however? The playback starts to chug, slowing down and cutting out, since the integrated graphics are simply not enough for anything above 1080p. Fortunately, the solution is an easy fix: getting a dedicated GPU and hoping to god it works with Jellyfin. I don’t really know what GPU to use, but I am considering either one of the Intel Arc ones, or maybe some cheap used NVIDIA or AMD card.

I think the biggest issue with the Jellyfin instance is at this time is just how bad the storage situation is. Currently, the main storage drive (not for Jellyfin) is a 1TB laptop hard drive that is not screwed to anything, meanwhile my Jellyfin media is stored on another drive just sitting there on the computer case’s floor. If we were on any other year, I would simply just buy a new hard drive, but the year is 2026 and everything sucks, to the point that even the hard drives are starting to become unobtanium. I guess the alternative is using used drives, but I don’t particularly trust those to not break and explode.

The biggest issue with the setup I had was probably the fact I was running Jellyfin on bare metal, and not inside a container. This was fine until I started having issues with Jellyfin not starting up correctly, and to actually use Jellyfin, I would load up Cockpit (Red Hat’s server UI thing) and use the terminal there to open Jellyfin. This worked, but it kinda sucked because the moment that the Cockpit service went to sleep, Jellyfin would simply close out. So then I had the idea of setting Jellyfin up to run on boot with systemd, but then that didn’t really work because I think it was running it as like a root user, and it couldn’t see any files under the home directory. This was kinda the final straw so I decided to try get Jellyfin running under Docker, because I kinda knew it would be able to autostart with no issues.

Surprisingly doing this was easy, and I get the bonus of having Jellyfin containerized. There is a small issue however, which is that Jellyfin no longer wants to play ball with native media players on Android, but it is able to play via the HTML player inside the app. Maybe there is some codec silliness that I missed, but for now I think I’ll leave it as-is.

qbittorrent

screenshot of the qbittorrent web client
screenshot of the qbittorrent web client

QBittorrent is a torrenting program that you can also self host on a server if you really wanted to. It’s a nice way to torrent if you need to download something large or something where the download speed is very slow, and you don’t really want to keep your PC on. I’m currently using QBittorrent Nox since it gives me a WebUI where I can access pretty much everywhere, and like Jellyfin before, I’m currently running QBittorrent on bare metal and not in a container, since it would be pretty easy to do. I do plan to change this however, and I will get around to finally running it in Docker, but that will be something for later I think.

pihole

I think PiHole is among the first things most people selfhost. There is a good reason for it: you can block ads network wide, and generally reclaim control over your whole network. However when I tried selfhosting it, I found myself struggling with many things. First of all, is that PiHole conflicts with systemd’s resolve service, which handles DNS for the server itself, therefore it takes up the required port that PiHole uses to actually work. Another issue is that because I am running Fedora on my server, there seems to be some instructions I may have missed. One of the instructions was to work around systemd-resolve, which means you need to edit /etc/systemd/resolved.conf and then edit some lines to it. The thing is that, on Fedora, you’re not supposed to edit this file at all (according to this here), but honestly I am even more confused, and the fuckers from that forum were like “oh yeah just RTFM”. So I tried some things in order to get PiHole working, like changing the DNS port to something else, and while PiHole did kinda work and start up, I was never able to get my main computer to talk to it at all.

Looking more into the instructions, depending on the tutorial, some guides tell you yo disable SELinux and then set up stuff that way. Other guides tell you to do something completely different, and I end up being more confused. Honestly, I think I’ll simply hold off from PiHole until I have a computer turned router set up.

So Navidrome is a self hosted music server, and it allows you to play music anywhere and everywhere as long as you have an internet connection. Unlike video, transcoding audio is much easier, and even on my pretty old Dell, I would most likely have a decent experience. It also supports online radio, which is something I’ve been wanting to get into more for a while.

a screenshot of the navidrome web ui
a screenshot of the navidrome web ui

Navidrome offers a web UI, but this web UI is pretty ugly and kinda looks like ass. There are a bunch of client programs that you can get (there is a whole page you can look at too), and I will be talking about one of them, which is PsySonic. PsySonic is a program that can hook up to a Navidrome server, and at first glance, it looks pretty nice. It is pretty feature packed, it supports most of the features of what Navidrome has to offer, and it is just generally nice to use. It even has a Linux version which doesn’t feel half baked, which is always a plus in my book. I also like the pseudo-Spotify features that PsySonic offers, aka featuring albums in my library that I may not heard before, a “Because You Listened to X” panel, and an artist and song discovery section that allows you to again, find music you barely hear. I imagine this would be awesome for people who actually have massive libraries of hundreds of thousands of songs, but even for someone who has a modest library of like, 5000 songs, it is still really nice. I think the worst thing of PsySonic and Navidrome is that I assume it doesn’t use the default rating tags, so ratings show up empty handed. Another thing to keep in mind is that, like Spotify, you can’t really fine tune the shuffle mode, so the only way it allows you to do so is via a “Build a Mix”, which kinda sucks imo.

a screenshot of psysonic, a navidrome client
a screenshot of psysonic, a navidrome client

Meanwhile, on Android, Firmium is a music player made for Android (however it has support for multiple other platforms) which works fine, but it lacks a bunch of features. I cannot set a song to play next, which to me is a huge dealbreaker, hell, it is a feature that I have seen basicallyon every single music player since 2014 on Android. A thing I do like is the ability to build mixes according to some settings that you can choose, like BPM, or the genre, or whatever. It is actually a nice feature, and for whatever reason seems to be absent in 99% of local music players on Android.

a screenshot of firmium, another navidrome client (for android)
a screenshot of firmium, another navidrome client (for android)

Aside from that, I haven’t had the chance to use Navidrome more because the fact of the matter is that, I just like having my music locally quite a lot. Pretty much every device I own has a copy of my music library, but I been thinking that there will be a point in time where this would be simply infeasible. And for that, this is why I am starting with Navidrome. It just really works, even though Tailscale, and should work on any device, without having to deal with Syncthing and large amounts of storage.

stuff that i would like to selfhost

There is a bunch of other services that I would like to try selfhosting. Here are the following:

page updates:


  1. also my phone was never able to communicate to my pc ever so there’s that.↩︎

  2. where something related to networking that docker needed was apparently replaced with something else. I did manage to fix it however.↩︎

  3. the thing is that i don’t have much storage to go around anymore. with the current ai crisis ongoing, trying to buy storage at a cheap price is next to impossible at this time, i wish i locked in and bought shitloads of storage instead of buying bullshit that i would never use smh.↩︎