The Selfhosting Experience

I've been running my own server for about 2.5 years now and have gained a lot of experience in the process. Since a friend of mine asked about my setup and some tips, I thought it would be best to publish another blog post on this topic. This is one of my more tech-savvy posts, so feel free to skip it if you're not interested (as if I have any say in this...). I'll keep this entry updated as long as I'm willing to.

Me, sometime at the beginning of 2022

Me, sometime at the beginning of 2022


Reasoning

Why would you actually want to host everything yourself in the first place? I mean, it's a lot of work, a ton of stress and requires constant maintenance?

What to keep in mind

Let me tell you this before you even start to think about starting your own server: It'll cost you a fuck ton lot of nerves and time. Don't go into this project thinking it will be easy and you will be done in no time. It requires a lot of troubleshooting, a lot of research and a huge pile of failures. You'll need discipline to stay on track.

You'll gain a considerable amount of technical knowledge, but you'll also need some basic networking skills. Take some time to study those basic abilities before you start this project. Stop browsing Reddit for the best dashboard theme if you cannot tell me how DHCP works.

Depending on your situation, there may be a lot of initial costs for the hardware you'll use. I was lucky enough to use my "old" gaming PC since I grew out of my gaming phase a long time ago. I know it isn't energy-efficient at all, but it works for now (you'll encounter this situation a lot during this or similar software projects).

You may also be able to start of pretty cheap for most projects. Like you could buy a Raspi Zero for about 17 Euros nowadays when starting off. It's not the most powerful device but you'll be able to host a few decent applications.

My setup

Homer dashboard tiling all of Tim's self-hosted services

I am currently using Ubuntu LTS, as it's a pretty reliable operating system for servers. There are countless alternatives like Debian or RockyLinux. However, if I had to restart this project from scratch, I'd probably go with OpenMediaVault this time.

I chose to run all my applications using Docker because I think it's the best way to run server applications. Docker allows us to package applications into containers, each containing the application code, runtime, libraries and dependencies needed to run the application consistently across different environments.

Since most self-proclaimed administrators choose to set up a dashboard to maintain a clear perspective on my applications, I opted not to include things like a search engine or third-party websites such as some social media sites, since I only use this dashboard for navigation and nothing else.

For maintenance and security, I also chose to host a Wireguard-VPN on a separate device, which allows me to access my server remotely without going directly over the internet. This improves our security drastically while also offering some way of maintenance should the main-machine go offline.

Media

Media-section icons on the dashboard: Plex, Calibre Web, Audiobookshelf

Plex

Plex is the media server I use. You point it at a folder of movies, shows or music, it scans everything, fetches metadata and artwork and lets you stream the whole library from any device with the Plex app. I bought Plex Pass at some point. Jellyfin and Emby are the open-source alternatives most people recommend, but I haven't moved over.

Calibre Web

A web frontend for a Calibre eBook library. Browse and read books in any browser, with metadata management and an integrated reader. Basically Plex but for books.

Audiobookshelf

Same idea as Calibre Web, but for audiobooks. Streams from any browser with bookmarks, chapter info and playback speed control. Multi-user support if you want to share a library. Works fine.

Server

Server-management section: Portainer, Nginx Proxy Manager, FileBrowser

Those applications are (in my opinion) essential for managing a server as they make life so so much easier.

Portainer

A web UI for Docker. You can technically do everything from the command line, but a dashboard for containers, images, networks and volumes saves a lot of time once you have more than a handful of services running. Also supports Docker Swarm and Kubernetes if you ever go that route.

Nginx Proxy Manager

A UI for Nginx reverse proxies. You point a domain at a container, click a button to get a Let's Encrypt certificate, done. The alternative is editing Nginx configs by hand, which is fine but tedious if you have a lot of services.

FileBrowser

A web-based file manager. Upload, download, edit and share files via browser, with user authentication and access permissions. I mostly use it inside my network or for sharing small media files and documents directly. Note: if you proxy it through Cloudflare you can't share files larger than 500MB.

Download

Download section: qBittorrent, JDownloader, MeTube, Deemix, Pyload

Making downloads on a home server offers several advantages over downloading directly on personal computers. Firstly, it offloads resource-intensive tasks like downloading large files or torrents, which can slow down or tie up local machines. It also centralizes management, allowing for continuous downloads even when individual computers are turned off. Additionally, a home server can automate downloads, manage storage more efficiently and provide a centralized location for accessing downloaded files from any device on the network, enhancing convenience and accessibility.

QBittorrend Web + VPN Killswitch

A web UI for the qBittorrent client, packaged with a VPN killswitch that drops all network traffic if the VPN dies. Don't use uTorrent or the original BitTorrent client, they're bloated adware now. Transmission is a fine alternative if qBittorrent isn't your thing.

J Downloader 2

A download manager for files from hosting and streaming sites. Handles parallel downloads, automatic captcha solving, link encryption and paused/resumed jobs.

MeTube

A web UI for youtube-dl. Paste a video URL, pick a quality, hit download. Makes the command-line tool accessible if you'd rather not touch a terminal.

Deemix

Downloads music from Deezer, including FLAC and high-quality MP3 if you have a paying account. Tags everything automatically with metadata. Active development stopped, but the tool still works at the time of writing.

Pyload

Another download manager. Queues files via HTTP, FTP and BitTorrent, supports captcha recognition and premium accounts on hosting sites and has a plugin architecture for whatever else you need. Works well together with the J-Downloader extension.

Stats

Stats section: Maloja, Tautulli, Uptime Kuma, Dashdot, Umami, GoatCounter

Maloja

Self-hosted Last.fm replacement. Tracks what you listen to, builds a profile over time and integrates with most music players via the standard scrobble API. My instance is here.

Tautulli

Statistics dashboard for Plex. Playback history, who watched what, server load, custom notifications. Worth running if you're admin of a Plex server with multiple users.

Uptime Kuma

Uptime monitor. You add a service, it pings on a schedule and tells you if it's down. Notifications go to email, Slack, Telegram, whatever. Status pages included, mine is here.

A note: I'm running Kuma on the same machine as everything else, except my VPN and my blog. This is dumb, because if the main server dies the uptime monitor dies with it and tells nobody. Don't do this.

Uptime Kuma dashboard listing the public services and their status

Kuma-UI of for my public services

Dashdot

A server dashboard with a glassmorphism design that genuinely looks great. Shows the usual metrics (CPU, memory, disk, network) and supports light and dark mode. Aimed at smaller VPS and home setups.

Dashdot dashboard in dark mode showing CPU, memory and network panels

Screenshot of the dashdot dark-ui

Umami

Privacy-focused web analytics. GDPR-friendly, no cookies, no personal data, no IP tracking. The dashboard covers the usual things: page views, bounce rates, traffic sources, devices, browsers, locations. Dark mode included. I use it to track stats for this blog, and it's the main reason I trust analytics on my own site at all.

Umami analytics dashboard, page 1: page views, top pages, referrers Page 1 of my umami-stats at the time of writing this post

Umami analytics dashboard, page 2 with a world map of visitor locations

Page 2, which even features a world-map

Goat Counter

A minimal open-source alternative to Umami. I'm running it in parallel so I can compare numbers and make sure neither tool is drifting wildly off. GoatCounter dashboard with pageview counts roughly matching the Umami numbers

Goatcounter-UI with (somewhat) matching stats

Social & News

Social and news section: TinyTinyRSS, RSS Bridge, ChangeDetection, Gotify

TinyTinyRSS

A self-hosted RSS reader. I got tired of checking 100 different social media sites every day, so I funnel everything I care about through TT-RSS instead. The setup takes a moment, but once it's running you get categories, filtering, search and sync across devices. Plenty of desktop and mobile clients can talk to it.

RSS Bridge

Generates RSS feeds for sites that don't offer one. Most sites used to have RSS and quietly killed it during the enshittification era; this puts it back. Works for a lot of social profiles, forums and other sites that locked their content down.

Change detection

Monitors web pages for changes and notifies you when something updates. I use it for sites that don't expose RSS and aren't covered by RSS Bridge. Configurable check intervals and notification channels.

Gotify

A small notification server. You push messages to it via REST API and it forwards them to your devices. I mostly use it for alerts coming out of other selfhosted services.

Great thing I'm writing this blog, as I completely forgot to set this up on my (not so new) phone, 8 months ago

Indexers

Indexer section: the Servarr stack with Sonarr, Radarr, Lidarr, Readarr, Prowlarr

The listed applications are hosted by me, but they are non-functional as no legal trackers for media sources were found. This fictional segment is included purely for stylistic purposes. I strongly advise against using illegal sources, as they violate copyright laws. I do not condone or support such actions and urge everyone to refrain from engaging in them.

digital

Servarr

The Servarr stack pairs with a download client (qBittorrent, SABnzbd, etc.) and a media server (Plex, Jellyfin, Emby) to fully automate fetching and organizing media. Each tool covers one content type.

  1. Sonarr:

    • Manages and automates TV show downloads.
    • Subscribes to TV series, searches for new episodes and downloads them automatically.
  2. Radarr:

    • Manages and automates movie downloads.
    • Adds movies to a watchlist, searches for available releases and downloads them via torrent or Usenet.
  3. Lidarr:

    • Manages and automates music downloads.
    • Adds artists and albums to a watchlist, searches for new releases and downloads music files.
  4. Readarr:

    • Manages and automates e-book downloads.
    • Tracks and downloads new releases from authors or series.
  5. Prowlarr:

    • Manages and automates TV show downloads from Usenet indexers.
    • Integrates with Usenet indexer services for automatic searches and manages download clients like SABnzbd or NZBGet.

Unofficial Servarr-Applications

  1. Overseerr:

    • Front-end for Plex/Sonarr/Radarr. Friends and family can request shows or movies and the request goes through to the *arr stack to fetch them automatically. Easily the best UI in this whole stack.
  2. Jackett:

    • Tracker proxy for Sonarr/Radarr.
    • Translates between the standard Torznab/Newznab API and the actual APIs of various trackers.
  3. Bazarr:

    • Subtitle automation for Sonarr/Radarr.
    • Pulls subtitles from various providers in whichever languages you configure.
    • Still haven't actually got it working properly, hmpf.

Cloud & Repositories

Cloud and repositories section: Vaultwarden, Gitea

Bitwarden (Vaultwarden)

A self-hosted, Bitwarden-compatible password manager. Encrypted storage for passwords, notes, cards, the standard set, plus 2FA, folder organization and audit logging. I'm only using this container as a backup right now.

Gitea

Self-hosted Git server. Lighter than GitLab and a lot less painful to maintain. Pull requests, issues, code review, webhooks. The source for this blog lives here.

Gaming

Gaming section: Minecraft plugin tiles for Player Analytics, Bluemap, Dynmap

Currently, all my gaming-related containers are just plugins used for my Minecraft server. However, none of them are active at the moment as my Minecraft server has been shut down by me. Nevertheless, I still wanted to list them.

Player Analytics

Tracks Minecraft player activity: logins, playtime, in-game actions, economy transactions, community interactions. Useful if you're running a server with a community and want to see what people are actually doing.

Bluemap

A web-based 3D map of your Minecraft world that updates in real-time as people build and explore (!!!). Players and admins can view it from any browser.

Dynmap

Like Bluemap but in 2D.

Some tips

Upscaled version of the xkcd Workflow comic about not touching a working system

Obligatory (somewhat) fitting xkxd comic regarding the working system

Resources

I completely relied on sources from the web when it came to gaining knowledge (and still do). So I'll link you some great resources, which helped me enormously.

Comments