When I first started self-hosting services, I thought I would be able to easily set up a few containers and access them without trouble. I decided that if and when I needed to learn more complex setups, I would be able to do that with relative ease.
But as I continued to wade into the realm of self-hosted apps, I've realized that while getting started is relatively easy, things get a lot more complex as you go. I've also realized that there are certain things the self-hosting community can gloss over and over-simplify when taking certain pre-existing knowledge for granted.
How to make services accessible from outside your home network
The solutions can be complex and overwhelming
I've held off on setting up access to my self-hosted containers from outside my home network, but recently started trying out different solutions. After all, I've been reading threads for months on the different methods you can use, such as a reverse proxy or tunnel.
It's when I started to actually dive into the different methods that I realized it's a lot more complicated than I expected, with tons of networking jargon that a newbie will have to learn if they don't already have prior knowledge. My attempts at setting up a DDNS on my Synology NAS did not work out due to issues with getting a certificate from Let's Encrypt.
By following a tutorial, I managed to set up access to my NAS using Tailscale — and then realized that I'd need to rebuild my containers with Tailscale sidecars if I wanted to access these services using my tailnet. This is a daunting prospect since I'm only getting to grips with the syntax used in Docker Compose files.
When I looked further into reverse proxies and tunnels, I realized just how many solutions are available and that I would need to determine the best one for my specific needs. This means I've had to really slow down and take my time figuring out the different technologies. After hours of research over multiple weeks, I've only made marginal progress. I also keep changing my mind on which solution to use based on new discoveries I make while reading up about the topic.
The nuances and inconsistencies of different platforms
Small differences add up
When I first started self-hosting, I settled on Docker containers as the most user-friendly way to get started. This allowed me to follow tutorials and use the example configuration files provided in the app documentation. However, I soon started realizing that just because I'm using the Docker platform, it doesn't mean the interface is the same across different devices.
I got started with Docker Desktop, which features a graphical user interface (GUI) that makes things much easier for me. I only later discovered that most of the people I know who self-host use the command-line interface (CLI) instead. But even when using graphical interfaces, there are differences. Spinning up containers on my Windows desktop and Synology NAS follow different steps and have different requirements.
The operating system you use will also have an effect on what you can do, depending on what packages are installed. It also affects the exact commands you can use, with many apps providing steps aimed at Linux users.
And that's just when it comes to using a specific platform. When it comes to the different methods you use for self-hosting, such as using a VM or a bare metal server, more nuances come into play. If I take Home Assistant as an example, hosting it in a container disables certain features, such as add-ons.
The ease of using existing hardware for self-hosting
It's not just about what you have lying around
I have been guilty of this one. When people are starting out with self-hosting, it's often recommended that they use hardware they already have. This includes repurposing old laptops or old PC components. But what a person can actually use will depend on their own skills, context, and budget.
For example, due to power outages in my country, I could only start using my NAS regularly once I had a portable power station in place that could keep it powered on and protect it from surges. Even though I have now finally started moving my self-hosted services to my NAS, its low RAM is a hurdle that means I can't host all the apps I would like on it.
I have some old laptops, but I would first need to check out how to remove their batteries, measure their power consumption, and install a new OS to see if they're viable solutions. For frequent tinkerers and PC builders, this might not seem like much of a hurdle. But they're challenges that many newbies will face.
The truth is that the right hardware depends on your situation and what exactly you want to host. You will be unable to use certain solutions if you don't have the skills or the budget for upgrades and additional components. This doesn't mean you shouldn't try out self-hosting, but it's something to keep in mind.
Responsible backups
Control over your data also means responsibility for it
One of the benefits of self-hosting is that you can safeguard your privacy by having control over your own data. But there's a caveat: because you're self-hosting services, there's no customer support there to help you when something goes wrong, and you experience data loss.
This means that you need to ensure you have multiple backups of your services and their data. Following the 3-2-1 backup rule is one way to safeguard your data, but implementing it comes with significant effort. It's one of the reasons why I haven't fully broken away from Google One despite having an Immich instance.
The technical knowledge required
Not everyone has the same skill set
This is an oversimplification that is echoed in most of my points, but I thought I'd state it outright. While it's easy to get started with self-hosting, to get the most out of the practice, you will need technical knowledge. This knowledge will greatly determine which services you can use, what solutions you can use for accessing them, and how much you need to rely on documentation.
I've written about many self-hosted services this year, but I've tried out and failed to implement many more. My lack of technical knowledge means that I rely heavily on documentation and example files. If there's an error or a lot of context left out, that can make the difference between whether I get a service working or not.
No one hides the fact that self-hosting involves learning, but I do think we over-simplify how much learning is involved if you're not already a coder or work in IT. Even as I've expanded my knowledge over the months, I am nowhere close to feeling comfortable with my abilities. Every time I think I have something figured out, I realize how much I actually don't know. There are many things you can only learn by doing, and my experience with self-hosting is that the theoretical gets much more complex in practice.
It's still worth trying out self-hosting
If self-hosting were easy, everyone would do it. But this doesn't mean that it isn't worth trying out and expanding your skill set. However, it's important to realize from the outset that it might not be as simple as you envisioned. Even though I was ready to face the challenges of self-hosting, the realities turned out to be a lot more complex than I had anticipated.
