2.4 KiB

Docker Compose Personal Stack

DISCLAIMER: this is still a huge work in progress.

Goal

This repository aims to have a small stack of self hosted programs that are accessible through a single endpoint, the reverse proxy (Caddy) in the caddy-docker-proxy folder, that exposes whatever pieces of the stack you decide to have accessible from the outside, with or without using a domain.

Why not Docker Swarm? Or k8s?

As clearly explained on the Docker Swarm Rocks website, Docker Swarm Mode feels a bit left behind. I tried myself to build my stack on top of it, but it didn't feel as refined as the plain Docker itself. I'm still keeping an eye on the Awesome Swarm repository in case some new interesting tools come up.

Kubernetes has simply too much overhead for a small home lab like mine. I'm using a couple of air-gapped ARM64 boards, some mini PCs and a small Cloud VPS to achieve my needs, and at the time of writing k8s would add too much complexity to the stack. The only thing that would make me change idea would be a need for autoscaling, but I'm still far from that situation.

How do I use this?

The caddy-docker-proxy is the first container that should be started, after running $ docker network create caddy to ensure the external network exists on the system. The Caddyfile included and mounted in /etc/caddy/Caddyfile is used in this case to give access to the air-gapped comtainers running on different machines on the same network. An example is found in the Caddyfile, where the Memos container is exposed. As you can see, this is a borderline situation where some people may prefer having service discovery with either Swarm or Kubernetes, but in my experience this is still not enough to call for that.

Conclusion (for now):

This approach worked without any major issue in the last years, and it has been reliable for many projects that I will add to this repository. Maybe someone else can find it useful for their projects, and if so I'm happy for you. I'll make sure to link as many references I followed as I can inside the individual Compose files.