Diving into self-hosting

I've tumbled deep down the rabbit hole of self-hosting/home servers. As far as rabbit holes go (do they go on infinitely?), this has turned out to be an educational and fun one. What began with self-hosting our photos for our family has turned into an all-out slew of installing applications to try them out, explore, and come back with a cohesive system.

There are a lot of tutorials on getting started in this domain, so I won't turn this post into that; more so, I'll share what has been fun to explore and what tools I ended up using.

The current state of things ended up like this:

  • Running a Beelink SER8 with an added 1TB NVMe drive (for a total of 2TB internal space) running Arch Linux.
  • An external Samsung SSD I got on sale (2TB)
  • An external keyboard and monitor for when I don't want to be using the CLI via SSH
  • The following programs:
    • Actual - Budgeting software
    • Audiobookshelf - Podcast and Audiobook manager
    • Booklore - Ebook manager
    • Bookstack - Low-resource wiki
    • Caddy - Router
    • Ghost - Blog/CMS
    • Jellyfin - Media streaming
    • Paperless-NGX - Document management
    • Umami - Analytics for public sites
    • Homepage - Internal bookmarks for running programs

I use all of the above with varying degrees of frequency, with Immich, Actual, and Ghost being the most frequent. I really like Paperless-NGX—a program that allows you to scan, perform OCR, and tag and file away paper documents.

It took about a month of puttering on and off in the evenings to get things working. As is my custom with these kinds of tinkery projects, I just set sail with an idea and chase it across the horizon until everything works. Sometimes this would get frustrating, and other times it was surprisingly easy.

Along the way I learned more about Docker, which had previously been a black box, as well as systemd timers, cloudflared, and a backup program called Restic, which took some time to wrap my head around. Which leads me to backups:

Backing up

Several weeks went by where I was actually using the above programs, filling them with data, before I thought about building a backup plan. This became a little scary, so I spent some time investigating Restic. In short, it allows you to sync files from Location A to another "repository," Location Z. What's more, you can remotely access those files by "mounting" the repo, and then explore and interact with the directory as if it were locally available (it's not). I think it can do a lot more, but I haven't needed anything beyond what I've gotten set up.

Hobby Satisfaction

There is undoubtedly a satisfaction to self-hosting. During my research, I occasionally came across people (usually on r/self-hosted) asking how much time/money people were saving running their own server. Most times the replies were along the lines of "I have spent more time & money than I have saved."

Running your own server is undoubtedly a tinkerer's wonderland. There's no shortage of things to try and tune, as well as necessary tasks like keeping things up to date and being wary of falling behind on security updates.

With that said, I've managed to host two Ghost sites, which saves me paying $9 a month through Ghost's hosting, or for a Hetzner or the like hosting option. If I continue using just Immich to host photos, I would be saving upward of ten to twenty dollars a month on something like iCloud storage or Google Storage.

That might seem insignificant to some (especially when contrasting it with the amount of time spent learning and setting up a home server), but saving somewhere around $50 or so dollars yet also understanding and operating the system that manages your own data is a sort of combined satisfaction that I haven't really experienced before.

More important than any monetary savings is a satisfaction that comes with knowing how a system that benefits you (and a few friends and family perhaps) operates under the hood. I've figured out a few more things about Docker, systemd, Arch Linux along the way, also sparking curiosity about databases.

A word of warning

As much as I’ve enjoyed this process, I’m aware of at least some of the risks. The reality is that I could lose all my data. I could even have a backup on Backblaze or Hetzner and that could disappear too. I can’t hold a candle to iCloud’s reliability. I could spill water on my server, have a power outage that zaps the computer into oblivion, so on and etc.

On top of that, exposing services to the internet is a bit scary if you don’t know the full expanse of what might be involved in securing a service. I felt I did my due diligence here, but I also imagine it won’t take much to prove me wrong there.

Returning from the rabbit-hole

There are a few avenues I still want to explore - a few apps I want to try and different Linux distributions. I’m very interested in nix/os (but it seems I would need to divide myself in two so that one life can spend its waking hours comprehending that world) as well as several other programs I haven’t tried setting up (Vaultwarde, Forgejo, Komodo, Navidrome).

Moving on from this project is difficult—there’s a lot more I could do, a seemingly infinite number of tweaks and turns to dials and knobs. I’ve mostly left this working and abstained from installing more applications just because I (and the server) have the bandwidth to do it.

If you get a chance to run a home server, I’d recommend it. MiniPCs and Raspberry Pi’s are available and affordable. Understand the risks and do your due diligence. Information is widely accessible on how to get things set up. I used Claude plenty of times to help with learning how to dump databases, writing scripts to back things up (please, make sure you audit and review all code you use from LLMs) and to do general debugging when necessary.