Self-hosting with Docker Compose: Leaving Yunohost
I have always been intrigued by self-hosting. It is powerful to be able to take your data into your own hands. I’ve accomplished this in different ways over the years, starting from installing stuff with some barely passible notes and moving up to reproducible environments. The previous iteration of my self-hosting was facilitated by YunoHost. YunoHost, a mashup of “Y U No Host?”, is an operating system built for easy self-hosting management. I believe it is a great option for beginners with its web management UI. But it also has a full CLI tool that does everything the web UI can do. With YunoHost you can easily set up multiple domains on the same server and install Let’s Encrypt certificates with a few button clicks. It also has great app discovery. You can search for apps by name or keyword. Plus you can browse based on different categories. If you want to check out the app list before installing, you can find the full list on the YunoHost website. With many of the popular apps, YunoHost offers LDAP integration which allows you to have one login across all your applications.
But what’s with the glowing review of YunoHost when this post’s title is about leaving YunoHost? I truly do like YunoHost and believe it is a great system. I even participated in the community a little by submitting patches and bugs as well as updates for some apps. I would still recommend YunoHost for people that are new to self-hosting and want to tinker with their server. However, YunoHost is not without flaws. I have had several bad app updates, one leaving my personal wiki completely unusable. Thankfully YunoHost makes backups before any app updates so you can quickly revert back to a known working state. I also started having problems with the Let’s Encrypt integration and had to use the command-line tool to bypass their checks. This might have been resolved by a fresh install, but I wasn’t sure I wanted to go that far. Another issue I faced was with the built-in authentication blocking some routes of an app that needed special authentication for an e-reader device. I also wanted to get faster app updates for some of the apps that I have come to depend on. Not only updates but there were also several apps outside of the YunoHost ecosystem that I wanted to use. For a time I used the YunoHost domain system and a “redirect app” to integrate apps running in Docker containers on the server.
As I’ve come to rely on a self-hosted system more and more over the years I have turned my attention to resiliency. With power outages and poor internet speeds, I wanted to split out some of my most important services to a VPS while keeping the less important and data heave apps locally. In addition to these concerns, I wanted to have a reproducible system where I can moves apps between servers and survive potential disasters. I have heard the phrase “treat your servers like cattle and not pets” and it has really resonated with me. I didn’t want to build a pet system that I couldn’t recover from its loss. Instead, I want cattle systems where the loss of one could easily be replaced. To facilitate this I built a new self-hosting system with Ansible and Docker Compose. I’ll provide more details on this system in a future blog post.