One Year of Data Hoarding

More than a year has passed since I set up my very own media server. Here’s a non-exhaustive list of stuff that I made my media server do:

Download torrents (duh)

…also known as The Thing That Everybody Does But No-one Talks About™. With a total size of 18TB (as reported by df), my media pool is almost full (luckily I still have space for a couple more disks). qBittorrent1 reports a whopping number of 713 downloaded torrents, most of which are either movies or TV series. Also present are ebooks, audiobooks, manga/comics and anime. Before anyone makes the piracy argument, reports that I spent $5197.74 on physical media, and that’s just stuff I remembered to log there.

This proved quite fatal to the router, which was not happy with me seeding that much. To make ends meet I lowered the number of maximum connections and active torrents. Don’t be like me and remember to check on your router’s well-being every once in a while if you plan on seeding enormous amounts of data.

There are many setups for downloading media, such as Sonarr and Radarr, which can monitor when certain series or movies appear on your favorite trackers, and download them automatically in your preferred quality/location/etc. While it sounds fun to have, I was perfectly content with qBittorrent’s basic RSS downloader. Most self-respecting trackers provide you with some torrent bookmark/RSS feed functionality. Using qBittorrent’s regex matching, I even managed to place different types of content in separate locations.

What I do like about tools like the above is the ability to upgrade your download. For example, say a new movie comes out on streaming services—WEB-DL/WEBRIP releases will start showing up on torrent trackers. You download the film, maybe you also watch it, everything’s peachy. However, months later physical Blu-rays are released, superior in quality to streaming services. If using the manual method, you probably won’t notice and still keep the inferior copy of the film. Sonarr/Radarr can automatically upgrade your release to a superior one. This is configurable, so you can easily set a cap like 1080p if you don’t have the ability to play 4K.

Downloading stuff in the right location at the cost of a single click? Done… mostly ✅. There’s room for improvement but I feel it’s still unwarranted.

I swear this is just Linux distributions

I swear this is just Linux distributions

Stream movies/TV series/other video content

Getting to the media in media server, probably the most important thing is actually serving the content. I use Plex for this, mostly due to the high availability of client applications on various platforms—seriously, there are Plex apps for just about any device.

Out of the box, it does a good job at matching most media, with little need of adjustment. Various agents can be plugged into Plex so you can benefit from things like automatic subtitle downloading or metadata scraping from different places.

Plex has some stats on by default, but if you want detailed information on who streamed what and when, Tautulli is an amazing web application tracking that and much more.

If you use Plex on a decent enough player (such as the Nvidia Shield TV) you can play 4K Blu-ray remuxes with embedded PGS subtitles without the need of transcoding. In other words, your only bottleneck becomes the data transfer rate.

For anime I maintain a separate library managed with the Hama agent which does a better job at scraping anime metadata than the default TV agents.

If you don’t care for Plex or want an open source alternative, give Emby (partially closed-source) or Jellyfin (Emby fork, fully open-source) a try.

Stream audiobooks

Reading is cool, but what about long commutes or walks that make reading books difficult, and you’re up for a bigger challenge than a podcast.

From what I found, audiobook self-hosted servers are quite scarce. After some search I settled on Booksonic which is also open-source. It’s a Subsonic fork with a few adjustments to make audiobook listening more accessible. It comes with a neat web player and Android app which also allows for offline listening. Booksonic also supports podcasts, however all the stuff that I listen to is free and available on tons of podcast apps.

Serve books

Most of the reading I do nowadays is on my Kindle, so serving ebooks through my media server wasn’t that high of a priority. However, there are plenty of choices: LazyLibrarian, calibre-web or Ubooquity (which we’ll come back to later). I run calibre-web, but most of the times I just get what I need from libgen, pass it through Calibre to add page numbers, convert to a compatible format if applicable, then send the book to my Kindle.

…and comics

Here we return to Ubooquity, which can be used together with the Kuboo Android app, provided OPDS feeds are enabled on the server. This makes for a really enjoyable reading experience on mobile. Downloading comics for offline reading is also supported.

…and manga?

I never was keen on reading manga, probably because I was always more fascinated by the colors in Western comic books (manga are usually in black-and-white). However, I’ve been tinkering with learning Japanese over the past few months, and an important part of language immersion is reading. What better stuff to start with than manga, which also has visual cues to help you understand the stories better.

Since manga and comics share the same structure (files with pictures), Ubooquity would work here too. However, there are choices for self-hosted manga servers:

There’s Komga, written in Kotlin, which also has a Tachiyomi2 plugin. It supports OPDS and you can set a custom base URL if reverse proxying is your thing.

Mango is another choice. It’s developed in Crystal3, and has a built-in MangaDex downloader. It’s not as feature-rich as Komga, but it should be enough for most users.

Block ads

Because Pi-hole isn’t just for PIs, why not pop a container of this as well. It doesn’t use much of… anything, and it will make your life better, especially on devices not mature enough to have their own software-based ad-blockers.

Pi-hole has blocked 1750 out of 4094 DNS requests from my Huawei phone over the past 24 hours. That’s almost half. Imagine how many ads you’re inadvertently loading on your phone, either through playing games or reading the news. It still irks me to see ads when disconnecting from my home network, but I’ll get around proxying my DNS requests sooner or later.

Host dedicated servers for games

More than ten years ago, one of Apple’s catchphrases was there’s an app for that. This decade, swap app for Docker container and the saying couldn’t be more true. Really, it has never been easier to try out software without the risk of breaking stuff up, or the chore of having to set up dependencies yourself, filling your box with packages and libraries with limited usefulness.

itzg/minecraft-server is probably the coolest Minecraft server container, as you can have a Minecraft server of your desired flavor and version with one command. I hosted a server to play with friends for a couple of months last year and it was a blast. With some plugins and addons you can make everything look really professional. Of course, it’s Java Minecraft so it’s gonna tear up your CPU and RAM, so make sure you got some to spare prior to starting this up.

Another game I didn’t think I’d get to play anymore was Star Wars: Jedi Academy. This was actually my first foray into online gaming back in 2007 and helped build up some really amazing memories. Unsurprisingly, the multiplayer scene is mostly dead, with servers few and far between which are comprised of mostly bots. A lot can be said about Jedi Academy (and its precursor Jedi Outcast), but the short version is that both games were developed by the now defunct4 Raven Software on the Quake III engine, which was widely licensed at the time. The games were heavily popularized by the modding scene, with custom maps, skins, weapons and game modes being created in large numbers.

Third-party content for the game is still being supported, such as OpenJK which aims to fix bugs and improve performance of the game, while also porting it to other platforms like Linux and macOS. The multiplayer mod I played on most back in the day was JA+, but like most content related to the game, it’s dead now. Luckily, a new mod with the same goals is still being actively maintained (as of 2020). Well, not really, all the links there are dead too, but you can still get the code and build it yourself 🤷.

But since this is about Docker, jediholo/openjkded is a container that sets up a Jedi Academy OpenJK server, complete with a healthcheck script and various configuration options. As opposed to games like Minecraft, you need the game assets (which are not free) to run a multiplayer server. I’m pleased to report that 17 years later, this game is still fun, can run on a mean ultrawide 3440x1440 resolution without appearing stretched (thanks to OpenJK), and can still make your modern PC stutter if paired with the right mods.

To sum up, my media server experience has been pretty good. No hardware failures yet, and everything’s been up almost 24/7. I definitely recommend building your own thing as opposed to getting NAS-like devices. You get to choose what hardware/software you put into the thing, and in most cases you’d end up cheaper than getting a NAS.

Here are some stats and a picture of The Thing itself:

Blue spikes are the Minecraft server, red spikes are me occasionally running VMs

Blue spikes are the Minecraft server, red spikes are me occasionally running VMs

This maps nicely to the graph above, for the most part

This maps nicely to the graph above, for the most part

More space is always required

More space is always required

I dub thee fatman

I dub thee fatman

  1. I love qBittorrent. It’s free, open-source and does not serve you ads or mine cryptocurrency without your knowledge. ↩︎

  2. Tachiyomi is a free and open-source manga reader for Android. In fact, it’s so open-source that you can’t even get it from the Play Store. It has a boatload of features and plugins: you can read manga online, read local manga, read manga from your self-hosted manga server (😉😉), and much more. You can grab releases from the official GitHub repo. ↩︎

  3. It’s like Ruby, but compiled! And in active development. On a more serious note, it has potential, promising C-like speeds while maintaining a Ruby-like syntax. ↩︎

  4. Actually, their output over the past decade is comprised solely of Call of Duty titles. Sort of like a punishment from Activision for making games that didn’t sell well. This video provides some context. ↩︎