Homelab Stack
A collection of Docker Compose configurations for self-hosted services: Forgejo for git, Caddy for reverse proxy and TLS, and a growing set of productivity tools that run entirely on hardware I own.
Running your own infrastructure is one of those things that sounds more complicated than it is. The main barrier is inertia, not technical complexity. Once the first service is running behind a reverse proxy with automatic TLS, adding the second one takes ten minutes.
What runs here
The stack started with Forgejo (self-hosted git, a Gitea fork) and Caddy (reverse proxy with automatic Let’s Encrypt certificates). From there it expanded to include task tracking, a private read-it-later service, and this site’s deploy pipeline.
Everything runs as Docker containers, managed by Compose files. Secrets are handled via environment variables sourced from files that stay off the repository.
The philosophy
Self-hosting is not about distrust of commercial services in the abstract. It is about control. If I run it, I decide when it updates, what data it stores, and what it costs. The answer to “what happens to my data if this service shuts down” is always “I still have it.”
It is also faster, for most things. A service running on hardware in the same room has latency that cloud services cannot match.
What I learned
Caddy is one of the best pieces of infrastructure software I have used. The configuration is human-readable, TLS is automatic, and the error messages are helpful. I moved to it from nginx years ago and have not looked back.
The main operational lesson from running your own stuff: monitoring matters more than uptime. Services will go down. Knowing they went down before a user tells you is the difference between a minor incident and an embarrassment.