mirror of
https://github.com/basnijholt/compose-farm.git
synced 2026-03-04 01:52:03 +00:00
80 lines
2.2 KiB
Markdown
80 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```bash
|
|
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.
|
|
|
|
```yaml
|
|
# Before
|
|
plex: nuc
|
|
|
|
# After (just change this)
|
|
plex: hp
|
|
```
|
|
|
|
```bash
|
|
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.
|
|
|
|
## Links
|
|
|
|
- GitHub: https://github.com/basnijholt/compose-farm
|
|
- Install: `uv tool install compose-farm` or `pip install compose-farm`
|
|
|
|
Happy to answer questions or take feedback!
|