Files
compose-farm/docs/reddit-post.md

2.2 KiB

Title options

  • Multi-host Docker Compose without Kubernetes or file changes
  • I built a CLI to run Docker Compose across hosts. Zero changes to your files.
  • I made a CLI to run Docker Compose across multiple hosts without Kubernetes or Swarm

I've been running 100+ Docker Compose stacks on a single machine, and it kept running out of memory. I needed to spread stacks across multiple hosts, but:

  • Kubernetes felt like overkill. I don't need pods, ingress controllers, or 10x more YAML.
  • Docker Swarm is basically in maintenance mode.
  • Both require rewriting my compose files.

So I built Compose Farm, a simple CLI that runs docker compose commands over SSH. No agents, no cluster setup, no changes to your existing compose files.

How it works

One YAML file maps stacks to hosts:

compose_dir: /opt/stacks

hosts:
  nuc: 192.168.1.10
  hp: 192.168.1.11

stacks:
  plex: nuc
  jellyfin: hp
  grafana: nuc
  nextcloud: nuc

Then just:

cf up plex        # runs on nuc via SSH
cf apply          # makes config state match desired state on all hosts (like Terraform apply)
cf up --all       # starts everything on their assigned hosts
cf logs -f plex   # streams logs
cf ps             # shows status across all hosts

Auto-migration

Change a stack's host in the config and run cf up. It stops the stack on the old host and starts it on the new one. No manual SSH needed.

# Before
plex: nuc

# After (just change this)
plex: hp
cf up plex  # migrates automatically

Requirements

  • SSH key auth to your hosts
  • Same paths on all hosts (I use NFS from my NAS)
  • That's it. No agents, no daemons.

What it doesn't do

  • No high availability (if a host goes down, stacks don't auto-migrate)
  • No overlay networking (containers on different hosts can't talk via Docker DNS)
  • No health checks or automatic restarts

It's a convenience wrapper around docker compose + SSH. If you need failover or cross-host container networking, you probably do need Swarm or Kubernetes.

Happy to answer questions or take feedback!