I am a big fan of self-hosted apps, which are a bit different from the desktop apps I talk about in a previous post. Self-hosted apps are web based applications that you run on your own server. The “server” can be just about any computer you have access to.
Self-hosted apps are an alternative to the cloud based services that you sign up for and simply access with a username & password. The “cloud” just means it’s running on someone else’s computer, where they take care of installing and maintaining the software to host that service you are using, such as Google Photos or Apple iCloud. If that cloud service is free, it’s possible that you are the product. Perhaps the company is using your data to profit in some manner, or they are making money by showing you advertisements while you are using the service.
Why Self-Host Apps?
My first self-hosted app was way back in 2001, when my high school buddies and I scraped together spare parts for a Counter-Strike server, which we hosted in a nearby colocation facility. Colocation is like a hotel for computers, where you send them your computer and they plug it in for you - providing you with fast internet and reliable power. We called our clan clandomo.com, affectionately named after the ubiquitous Domo of the era. The server grew to be quite popular over the year we ran it. I have many fond memories gaming with real life friends and strangers over the internet on that server. On occasion we would get together for a LAN party, which was always a blast. We are well into our 30s now, but still get together for a good old fashioned LAN when we can!
We opted for a colocation facility since home internet connections at the time had very limited bandwidth. I was lucky enough to have a particularly fast ADSL line at home, which if memory serves was 1.5 Mbps down and 256 Kbps up. Our parents would not have been too pleased if we slowed down the home internet connection with a server we wanted to keep running 24/7.
For some reason my Dad still has the ADSL modem, 20+ years later
I still remember marveling at result of running the dslreports.com speedtest the first time I ran it on the colocated server, which was so fast it broke the UI!
The server hosting fee was about $70 per month, which we fortunately never had to pay due some sort of billing error by the vendor. I still remember the day I showed up at the datacenter to pick up the server when we decided to take it down. I was about 16 years old at the time. They had me sign in, show my drivers license, gave me the rack location, power drill to unscrew the mounting bolts, and let me do my thing. I couldn’t believe they were actually letting me go inside to retrieve the server myself! It was so cool seeing the inside of a datacenter for the first time, I couldn’t help but snap a few pictures which I’m sure was against the rules.
So why did we bother with self hosting that Counter-Strike server? It was certainly a lot of effort, and there were alternatives available at the time. Game Server hosting companies existed that you could rent a Counter-Strike server from, where they manage running the hardware and software for you and simply give you RCON access and maybe a way to upload config files. For a fast paced first-person shooter, minimizing the lag between you and the server is very important, so we needed the server to be located geographically close to us. Hosting it on our own hardware allowed us to ensure the server had adequate resources for a consistent experience, avoiding any potential overselling the hosting companies were known to do. It also allowed us to run whatever else we wanted to on the server, such as an FTP server to share files or a web server to host our website.
That’s really what it comes down to with the reason for self-hosting, it’s all about having control. You get to control what software you run, how you run it, and most importantly: you control your data. Why is that so important? If you don’t control the data, the company that does control it may do things with your data that you do not agree with, or restrict your access to the data. Some recent examples include:
- PlayStation is erasing 1,318 seasons of Discovery shows from customer libraries
- Dropbox spooks users with new AI features that send data to OpenAI when used
- Google Photos does not allow users to extract location metadata
For the streaming services in particular, the media available to you at any given time is contingent upon business negotiations and contract renewals that are completely out of your control. For this reason, I never warmed up to the idea of subscribing to a music streaming service. I prefer to own digital copies of the music, which I store on my own hard drive. That way, some company can’t decide to reach into my music library and remove something due to licensing changes.
Self-hosting is certainly not without any downsides, however. The biggest of which is the time investment required to not only get things set up, but also the ongoing maintenance burden of keeping everything up to date and running smoothly. There’s no comparison to the ease of a cloud based solution, where a corporation with vast resources can worry about security, backups, and availability so that you don’t have to. With self-hosting, all of those become your problem to deal with. That’s part of the fun though!
Things have gotten easier to self-host over the years, but it’s still not something I would suggest to others unless they have the desire and curiosity to treat it as a hobby. I thoroughly enjoy tinkering with my self-hosted apps and infrastructure, so it’s a time commitment I’m willing to take on. Even though a lot of self-hosted apps are open source and completely free to use, I like supporting the indie developers and I encourage others to do the same. It takes a lot of time and effort to create and maintain these apps, I feel that it’s only fair to compensate the developers in some way for creating something I found useful, whether it’s financially or through code contributions.
My Favorite Self Hosted Apps
- Music Streaming - I was a long time user of Subsonic, but stopped being maintained in 2019. The Subsonic API however, lived on, becoming a de facto standard in the self-hosted music streaming world, with a variety of server & client apps in the ecosystem. On my Android phone, I was a long time user of DSub, but sadly it is no longer maintained, at least the version available through the app store. After trying a number of Subsonic alternatives, I’ve settled on gonic, airsonic-refix,and Symfonium as my new favorites. I plan on talking more about why I chose these in a future blog post.
- Photos - I’ve been trying to wane myself off of the various Google services I’ve become dependent upon, and as an alternative to Google Photos I’ve been using PhotoPrism. It offers a lot of Google Photos type of features like being able to visualize pictures on a map, searching for things like “car”, and facial recognition. Immich is another popular up and comer in this space which I am interested in trying out.
- Document Syncing and Editing - As an alternative to Google Drive and Google Docs, I switched to using Nextcloud. This provides me with the ability to keep files in sync across multiple devices, access my documents over the web when needed, and even edit documents from my phone using Collabora Office. For editing these files locally on my desktop computer, I use the LibreOffice suite of desktop apps as an alternative to Microsoft Office.
- Audiobooks - I recently started using Audiobookshelf as an alternative to Audible. It’s very polished and easy to use, and the accompanying Android app is equally as slick. It can be a challenge to find retailers that allow you to purchase audiobooks that are not encumbered by DRM, which is a requirement to play it through a self-hosted app like Audibookshelf. The benefit here is that you are not forever tied to a particular audiobook ecosystem.
- Game Servers - I’ve run a variety of multiplayer game servers over the years such as DayZ, Team Fortress 2, Valheim, and Minecraft. The LinuxGSM project is a wonderful community and set of tools that makes it easy to run a variety of game servers on the Linux operating system.
- Home Automation - For all of my home automation needs, Home Assistant is an incredibly powerful open source self-hosted app. If you have smart home devices such as light switches, outlets, doorbells, etc it allows you to set up “if this, then that” type of actions. For example, if the doorbell rings after sunset, then automatically turn on the porch lights. Or if I unlock the front-door at night, turn on the entry lights. Having all of your smart devices connected and managed by a central hub like this unlocks a lot of potential uses. They’ve added a ton of capabilities in 2023 around Voice Control. Sacrificing my privacy for convenience never sat well with me, and I’m looking forward to eliminating all of the Amazon Echo devices in my home in favor of a local self-hosted alternative.
- Website Hosting - I use the Nginx as the web server for all of my self-hosted apps. Nearly all of them have a built in web server, but putting Nginx in front of it makes it easy for me to use custom domain names and SSL certificates. I also use Nginx for hosting my own custom websites. For analyzing the access logs to gain insight about who is visiting my web pages, I use the GoAccess log analyzer. Ironically, I’m not self-hosting this blog you are reading :)
- Text-Based Chat - For those that are old enough to remember IRC, or Internet Relay Chat, it’s still around! The Lounge is a great web based IRC client. IRC holds a special place in my heart in a world of walled gardens of chat like Facebook Messenger, Instagram, WhatsApp, iMessage, Discord, Slack, Mattermost, and Google Chat. I miss the days of universal chat apps like Trillian and Gaim (which eventually turned into Pidgin) where you didn’t have to worry about what service your friends happened to use, you could use them all from one app. Imagine that! The web used to be a much more open & interconnected place.
- Voice-Based Chat - Prior Discord, there was a variety of apps that gamers used for voice chat over the years such as Roger Wilco, Ventrilo, and Teamspeak. I am certain there are plenty of folks still relying on those alternatives, for specific capabilities their community relies on that Discord simply does not offer. One of my favorites was always Mumble, primarily due to its simplicity. After my gaming communities switched over to Discord, I found myself missing the high audio quality that Mumble had to offer. Perhaps if we paid enough for Nitro Boosts, we could achieve the same audio quality. I do like a lot of features in Discord that Mumble does not have such as custom emojis, rich media embeds, persistent chat, and video streaming. I am hoping a self-hosted feature rich alternative to Discord will emerge at some point. There are certainly some contenders in this space, but nothing that seems to tick all the boxes yet.
- Monitoring - The Uptime Kuma app makes it easy to monitor all of my various self-hosted services. It’s more of a novelty for me to have this monitoring, since I don’t run anything mission critical. It proves to be useful once in a while though.
- File Upload - For a self-hosted alternative to an image hosting site like imgur, I’ve found zipline to be useful. I’ve found so many free image hosting websites come and go over the years, I prefer to host my own images. In 2023, imgur announced it was removing old and unused photos, prompting the Archive Team to mobilize and preserve as much imgur content as possible before it was gone forever. The Something Awful goons even got their own effort going to preserve their wealth of culture that had accumulated on imgur over the years and copy it to somewhere they had control over it.