Pull-based GitOps-style Docker Compose deployer: polls a (private) Git repo, detects changed stacks and reconciles only the affected
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Go 97.0%
Other 3.0%
2 1 1

Clone this repository

https://tangled.org/aottr.dev/compose-sync https://tangled.org/did:plc:rhp3vjdtrl5auwyyl6xnin6a/compose-sync
git@tangled.org:aottr.dev/compose-sync git@tangled.org:did:plc:rhp3vjdtrl5auwyyl6xnin6a/compose-sync

For self-hosted knots, clone URLs may differ based on your setup.

Download tar.gz
README.md

compose-sync#

A tool to automatically sync and deploy Docker Compose stacks from a git repository, with multi-host support.

Overview#

compose-sync pulls changes from a git repository containing Docker Compose files and only deploys stacks that:

  1. Have changed since the last pull
  2. Are assigned to the current host

Repository Structure#

Your git repository should have the following structure:

stacks/
    traefik/compose.yml
    uptime-kuma/compose.yml
    home-assistant/compose.yml
    ...

inventory.yml

The inventory.yml file at the root contains all hosts and their assigned stacks. For example:

hosts:
  vps-1:
    - traefik
    - uptime-kuma
  nas-1:
    - home-assistant
    - nextcloud

This format is compatible with Ansible inventory structures and provides a centralized view of all host assignments.

Installation#

go install github.com/aottr/compose-sync@latest

Alternatively build from source#

  1. Clone this repository
  2. Build the application:
    go build -o compose-sync
    

Configuration#

  1. Copy config.yml.example to config.yml
  2. Edit config.yml and set repo_path to the local path of your git repository

Usage#

Basic Usage#

./compose-sync

This will:

  • Detect the current hostname
  • Pull the latest changes from git
  • Find changed stacks
  • Deploy only changed stacks assigned to this host

Dry Run#

To see what would be deployed without actually deploying:

./compose-sync -dry-run

Custom Config Path#

./compose-sync -config /path/to/config.yml

How It Works#

  1. Host Detection: The tool uses the system hostname to identify the current host
  2. Stack Assignment: Reads inventory.yml to determine which stacks should be deployed on this host
  3. Change Detection: Compares git commits before and after pulling to find changed stacks
  4. Selective Deployment: Only deploys stacks that both changed AND are assigned to this host

Requirements#

  • Go 1.21 or later
  • Git
  • Docker and Docker Compose
  • A git repository with the structure described above

License#

MIT