Loading repository data…
Loading repository data…
Holo795 / repository
Self-hosted backup & restore manager for Coolify — back up apps, services, volumes, bind mounts and databases to local, S3 or SSH/SFTP, deduplicated and encrypted with restic. Goes beyond Coolify's built-in database-only backups: full restore, restore-to-new, missed-backup alerts and multi-server.
A transparent discovery signal based on current public GitHub metadata.
This score does not audit code, security, maintainers, documentation quality, or suitability. Verify the repository and its current documentation before adoption.
Back up and restore everything in Coolify — not just databases. Apps, docker‑compose services, named volumes, host bind mounts and databases, across multiple Coolify instances and servers, without ever restarting your running services.
CBM is a self‑hosted control panel + lightweight agents. It gives you consistent, scheduled backups with multiple destinations (local / SSH‑SFTP / S3), incremental & deduplicated storage via restic, one‑click restore (in place or as a brand‑new resource), and alerts when something fails, goes missing, or never ran.
⚠️ Backups are only as good as their restores. Always test that you can actually restore a snapshot before relying on it. See Known limitations.
| Overview | Resources | Snapshots & restore |
|---|---|---|
| Destinations (restic) | Users & roles | Settings (email · alerts) |
|---|---|---|
| Command palette | Mobile |
|---|---|
Coolify ships scheduled database backups — and that's it. Everything else your stack needs to actually come back to life isn't covered. CBM backs up the whole resource.
| Coolify built‑in backups |
|---|
| CBM |
|---|
| Scheduled database dumps (Postgres/MySQL/MariaDB/Mongo) | ✅ | ✅ |
| Redis / KeyDB / Dragonfly | ❌ | ✅ (live RDB) |
| Application data (named volumes) | ❌ | ✅ |
| Docker‑compose services (every volume + each internal DB) | ❌ | ✅ |
| Host bind mounts (data in host folders) | ❌ | ✅ |
| Capture env vars so a snapshot restores standalone | ❌ | ✅ |
| No restart of the running resource during backup | n/a | ✅ |
| Incremental + deduplicated + encrypted storage (restic) | ❌ | ✅ |
| Restore to a new resource (clone, re‑pin commit/image) | ❌ | ✅ |
| Restore onto a fresh / different Coolify (source can be gone) | ❌ | ✅ |
| Multiple destinations (local / SSH‑SFTP / S3, jump host) | partial | ✅ |
| Multi‑server Coolify instances | n/a | ✅ |
| Alerts on failed / missing / overdue backups | ❌ | ✅ |
| Reconciliation (detect backups deleted at the destination) | ❌ | ✅ |
| Disaster recovery — back up CBM itself, restore it elsewhere | ❌ | ✅ |
pg_dump/mysqldump/
mongodump); Redis‑family stores via a live RDB export. For volumes, the agent briefly
freezes (docker pause) only the containers writing to a volume, copies it, and resumes
them — the container keeps its state and uptime, never stopped or recreated.Restore → new works onto a fresh or different Coolify even when
the source is gone — CBM recreates the projects/environments and re‑injects the config. See
docs/disaster-recovery.md.AGENT_CONCURRENCY); and you
can set per‑container pre/post‑backup commands (e.g. quiesce an app, flush a cache).Controller (web panel + API + scheduler + metadata DB)
▲ pull (outbound HTTPS) │ reads resources via the Coolify API (×N instances)
Agents (one per Docker host) ── talk to the local Docker socket
│ push artifacts
Destinations: local folder · SSH/SFTP (+ jump host) · S3 · tar or restic engine
CBM runs from published images: ghcr.io/holo795/cbm-controller and
ghcr.io/holo795/cbm-agent.
Option A — Docker Compose (anywhere):
curl -fsSLO https://raw.githubusercontent.com/Holo795/CBMCoolifyBackup/main/docker-compose.yml
curl -fsSLO https://raw.githubusercontent.com/Holo795/CBMCoolifyBackup/main/packages/controller/.env.example
mv .env.example .env
# Edit .env: set BETTER_AUTH_URL, a long BETTER_AUTH_SECRET, and a base64 MASTER_KEY:
# node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
docker compose up -d
Option B — on Coolify itself: add this repo as an application (Dockerfile
Dockerfile.controller) or a docker‑compose resource, attach a Postgres, and set the same
env vars. The controller runs database migrations automatically on start.
Minimum env: DATABASE_URL, BETTER_AUTH_SECRET, BETTER_AUTH_URL, MASTER_KEY. Full
reference in docs/configuration.md.
Keep your
MASTER_KEYsafe. It encrypts every stored secret (and, with restic, your backups). Lose it and encrypted data is unrecoverable.
Open your BETTER_AUTH_URL and register. The first account becomes the administrator,
then public sign‑up closes automatically — no seeding, no default password. To add teammates,
invite them from Users with a role (admin / operator / viewer); see
docs/accounts.md. For password reset and verification emails, configure
SMTP in Settings → Email (docs/email.md).
In the UI: Coolify instances → Connect (base URL + an API token). Then Reveal install command on the instance card and run the one‑liner on each Docker host you want to back up:
curl -fsSL https://your-controller/install.sh | CBM_TOKEN=cbm_… sh
It starts the agent container with the Docker socket mounted and a persistent /backups
volume. The agent auto‑detects which Coolify server it serves. Re‑running the command
reconfigures in place.
Full walkthrough: docs/installation.md.
npm install
docker compose -f docker-compose.dev.yml up -d # controller Postgres on :5544
cp packages/controller/.env.example packages/controller/.env # edit secrets
npm run db:push --workspace @cbm/controller
npm run dev --workspace @cbm/controller # http://localhost:3000
npm run lint && npm run typecheck && npm test # the CI checks, repo‑wide
The dev compose also starts Mailpit (a catch‑all SMTP
inbox on :8025) so you can test the email flows locally — see docs/email.md.
Detailed docs live in /docs:
Being upfront so you don't lose data by surprise.
MASTER_KEY (falls back to BETTER_AUTH_SECRET).