deploy-manager is a deployment system for computer farms and distributed environments: a control plane plus on-host agents for centralized control over distribution, installation, configuration, and updates across many machines—with explicit versioning, auditability, and safe staged rollouts on stateful hosts.
Licensed under the MIT License. Repository: github.com/yukels/deploy-manager.
On a fleet of high-performance servers, two questions must stay obvious: what version is running? and who changed what? Task runners and SSH-heavy workflows can run steps, but they rarely become the source of truth for intended vs. actual versions, per-host status, and rollout policy.
Here, version deployment is a first-class domain: immutable artifacts, a manager for intent and history, a broker for delivery, and agents that pull packages and report health, version probes, and step-level audit.
Control plane (orchestration, persistence, UI) is separated from the farm (per-host execution).
- CI builds versioned artifacts into an artifact repository (e.g. Artifactory), often with dev / staging / production repos; versions promote between stages by policy.
- Deployment Manager — REST API (+ UI in a full stack); stores rollouts, hosts, platforms, and status in a SQL database.
- RabbitMQ — commands and state between manager and agents.
- Deploy Agent (each host) — subscribes, downloads artifacts, installs
.debpackages, runs post-install health / version checks, emits audit for each step.
- Rollout — intent: scope, pins, who/when/status.
- Platform — per-host architecture/configuration; per-component env drives install-time config (e.g.
.debpost-install). Same component version, different effective config when hosts differ. - Host groups — hosts may sit in many groups; rollouts target all, canary, or a platform / group slice.
- RolloutStatus — headline outcome per host × component.
- Audit — granular steps (e.g. download → install → validate): time, duration, parameters, errors.
- Baseline the machine (OS, network, storage).
- Install Deploy Agent.
- Register with Platform (required) and groups—not hostname-only.
- Rollout: manager resolves versions against the correct Artifactory stage; agent installs and validates; on failure, rollback to last known-good pins where supported.
- Inspect status + audit for operations and incidents.
Ongoing host APIs typically include register, detach/attach, move between pools/fleets, and update platform when reality changes. The agent is versioned like any other component.
Ship self-contained .deb artifacts (Go, C++, Python, …). The agent stays agnostic of language; e.g. Conda setup lives in the Python package. Services: REST health / version; utilities: CLI switches. Checks run after install and on a schedule; drift is reported when pins and probes disagree.
Implementation is primarily Go (e.g. Gin HTTP, MySQL, RabbitMQ, JWT, JFrog client, AWS SDK for audit/publish paths—see go.mod).
PRs welcome; keep changes aligned with the manager / agent / artifacts / broker split.


