Topic

Self-Hosting

Lessons from running my own services: Traefik, Umami analytics, CI runners, and this blog itself. What works, what breaks, and where to start.

4 Posts · Updated May 22, 2026 · All Topics

What
Running your own services instead of renting someone else's
You need
A server (an old PC or a small VPS is plenty), a domain, patience
Best for
Privacy, control, and actually learning how things work
Not for
Set-and-forget people: you are the admin now

Start here

New to this? Read these in order.

  1. 1
    I Replaced Nginx Proxy Manager with Traefik

    Start with the front door: a reverse proxy with automatic TLS.

  2. 2
    Umami v3.1.0 Self-Hosted Analytics: Let's Take a Look

    Add your first real service: privacy-friendly analytics.

  3. 3
    Self-Hosting a Forgejo Runner for Codeberg Actions

    Level up: self-host the CI that ships everything.

Posts about Self-Hosting

More on Self-Hosting

You’re reading a self-hosted blog right now. The analytics behind it: self-hosted. The CI that deploys it: self-hosted. At some point “I could just run that myself” became my default reaction to every SaaS pricing page.

Why Bother?

Three reasons, honestly.

Your data stays yours. No third party gets to log my visitors, read my drafts, or train on my stuff. For a blog that cares about privacy that’s not a nice-to-have, it’s the whole point.

No subscription creep. Every hosted tool is another monthly fee that doubles once you’re locked in. A small server has one price and runs everything.

You learn things. Networking, TLS, backups, containers. Not from a course, but because your own stuff breaks and you have to fix it. That knowledge compounds.

The Stack Behind This Blog

The whole setup is a handful of Docker Compose files on one server.

At the front sits Traefik as the reverse proxy. It terminates TLS with wildcard Let’s Encrypt certificates and routes every subdomain to the right container based on labels in the Compose files. I replaced Nginx Proxy Manager with it and haven’t looked back.

Behind it: this blog as a plain nginx container serving static files, a small gateway for the contact form, and Umami for analytics. Cookieless, privacy-friendly, and the dashboard is genuinely nice. The numbers you see in the Popular Posts section come straight from it at build time.

Even the legal side of running a site like this from Germany turned into its own adventure. Privacy policy, imprint, a contact form required by law: I wrote up that whole compliance sprint, including how to avoid putting your home address on the internet.

And the deploys? A self-hosted Forgejo runner picks up every push to this blog’s Codeberg repo, builds the site, and ships it to the server. My CI minutes are unlimited because they run on my hardware.

The Honest Part

Self-hosting means you’re on call. Nobody else patches your services, rotates your certificates, or notices that a disk is filling up. When something breaks on a Tuesday night, that’s your Tuesday night.

Backups are not optional. Test your restores, not just your backups. And expose as little as possible to the internet: every open port is a door someone will eventually knock on.

If that sounds like too much, it might be. There’s no shame in paying for hosted services. But don’t decide before you’ve tried it.

Where to Start

Small. One old PC or the cheapest VPS you can find, Docker on top, and one service you actually want to use. A wiki, an RSS reader, an ad blocker like Pi-hole, whatever scratches an itch.

Get that one service running, put a reverse proxy in front of it, and let it run for a month. If you enjoyed the process, congratulations: your server will never be empty again.