#deployment #traefik #config #deployer

bin+lib rolling-deployer

A tool for deploying new versions of traefik configs

9 releases

0.2.18 Jun 17, 2025
0.2.17 Jun 4, 2025

#238 in Unix APIs

Download history 577/week @ 2025-05-31 105/week @ 2025-06-07 111/week @ 2025-06-14 21/week @ 2025-06-21 3/week @ 2025-06-28

471 downloads per month

MIT license

51KB
1K SLoC

Rust 1K SLoC // 0.1% comments JavaScript 182 SLoC // 0.2% comments

Rolling Deployer for Docker Compose Services

Project Brief

This project provides a robust deployer for Docker Compose services that use volume mounts. It enables rolling upgrades and safe rollbacks of containerized applications by versioning configuration directories and updating the docker-compose volume source. The deployer requires a docker-compose.yml file for your service, and manages config updates by switching the mounted config directory to the desired version.

  • Rolling upgrades: Deploy a new config version by specifying a git tag; the deployer clones the config repo at that tag, updates the compose volume, and restarts the service with zero downtime.
  • Rollbacks: Instantly revert to a previous config version by specifying an older tag; the deployer switches the config mount and restarts the service.
  • Requirements: You must have a valid docker-compose.yml file for your project. The deployer updates the config volume in this file.

Usage

With CLI arguments only

deployer --tag v1.2.3 --name my-project \
  --repo-url https://github.com/org/repo.git \
  --mount-path /etc/myapp/config \
  --clone-path /opt/configs \
  --compose-file ./docker-compose.yml

With .env file integration

You can provide configuration via a .env file (default: .env). CLI flags always override .env values.

Example .env:

REPO_URL=https://github.com/org/repo.git
CLONE_PATH=/opt/configs
MOUNT_PATH=/etc/myapp/config
COMPOSE_FILE=./docker-compose.yml
NAME=my-project
SOCKET_PATH=/var/run/docker.sock

Then run:

deployer --tag v1.2.3

Or override any value:

deployer --tag v1.2.3 --name another-project

How Rollbacks and Upgrades Work

  • Upgrade: The deployer clones the config repo at the specified tag into a versioned directory, updates the docker-compose volume to point to this directory, and runs docker compose up -d --force-recreate for the service.
  • Rollback: Specify an older tag to revert; the deployer switches the config mount to the previous version and restarts the service.
  • Cleanup: Old config directories are automatically cleaned up (keeping the last 3 versions).

Development

Release a new version:

git ci -am "Updated version"; cargo release patch --execute --all --no-confirm; git push origin HEAD; git push --tags

Dependencies

~8–19MB
~249K SLoC