No description
Find a file
hermes 0055925527
All checks were successful
CI / build (push) Successful in 1m5s
ci: re-run via runner pickup verification
2026-09-26 20:06:46 -07:00
.agents/skills chore: init gsd 2026-04-23 17:47:28 -07:00
.claude/skills fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
.forgejo/workflows Merge pull request 'Merge add-deploy-workflow -> main' (#57) from add-deploy-workflow into main 2026-09-12 18:02:58 +00:00
.husky Add CI/CD workflows, pre-commit hooks, and AGENTS.md 2026-03-21 13:56:55 -07:00
.qwen/skills fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
.windsurf/skills fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
agent feat: add encryption at rest for backup archives (#20) 2026-08-12 11:33:58 -07:00
backend fix #55: stop double-encoding settings values (UI passphrase = effective key) 2026-08-19 20:23:54 -07:00
docs feat: agent Dockerfile, backup/server modules, skills integration 2026-04-23 21:09:14 -07:00
public fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
skills fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
src fix #49: replace object-returning Zustand selector in AuthInitializer to stop React #185 boot crash 2026-08-14 04:20:55 -07:00
.env.sample.tailscale Implement incremental and delta backup support 2026-03-22 19:04:07 -07:00
.env.sample.zsus Apply changes from kilo-gsd.py run for Mark/docker_backup#51 2026-08-14 05:01:30 -07:00
.gitignore chore: gitignore .kilo/ working notes 2026-09-09 08:05:02 -07:00
.pre-commit-config.yaml chore: add pre-commit hooks to catch lint/type drift before push 2026-09-11 19:57:24 -07:00
.prettierrc fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
AGENTS.md OO design refactor: SOLID principles, strategy patterns, SRP splits 2026-04-16 16:21:12 -07:00
bun.lock feat: Complete GCS storage provider with types, backend, and UI changes 2026-05-25 15:41:49 -07:00
Cargo.lock fix(verify): make pytest and cargo test pass on this JS-only repo 2026-07-07 21:36:43 -07:00
Cargo.toml fix(verify): make pytest and cargo test pass on this JS-only repo 2026-07-07 21:36:43 -07:00
CHANGELOG.md feat: complete agent HTTP service architecture with auth and callbacks 2026-04-23 21:18:15 -07:00
components.json Initial commit: React + TypeScript + Vite setup with shadcn/ui 2026-03-21 13:53:13 -07:00
conftest.py fix(verify): make pytest and cargo test pass on this JS-only repo 2026-07-07 21:36:43 -07:00
CONTRIBUTING.md feat: complete agent HTTP service architecture with auth and callbacks 2026-04-23 21:18:15 -07:00
docker-compose-tailscale.yml fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
docker-compose.backup.yml fix #54: bind-mount Docker volumes dir in dev compose and document DOCKER_VOLUMES_HOST_PATH 2026-08-14 05:03:06 -07:00
docker-compose.podman.yml fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
docker-compose.zsus.yml fix #54: resolve Docker volume mountpoint via DOCKER_VOLUMES_HOST_PATH 2026-08-14 04:42:01 -07:00
Dockerfile Add Dockerfile symlink for NodeHub deployment 2026-04-11 07:43:38 -07:00
Dockerfile.frontend fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
Dockerfile.monolithic fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
eslint.config.js fix: exclude test files from tsconfig.app.json build, fix lint errors 2026-04-14 10:33:11 -07:00
GSD_AGENT_SPEC.md fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
index.html fix: web interface accessibility fixes and nodehub deployment support 2026-04-07 17:39:04 -07:00
lefthook.yml chore: add pre-commit hooks to catch lint/type drift before push 2026-09-11 19:57:24 -07:00
package-lock.json fix #33: resolve 9 HIGH/Critical dependency vulnerabilities 2026-05-18 17:50:40 -07:00
package.json fix(backend): repair broken test suite — 14 files / 54 tests now pass 2026-08-11 10:57:48 -07:00
page.png fix: exclude test files from tsconfig.app.json build, fix lint errors 2026-04-14 10:33:11 -07:00
postcss.config.js fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
PROJECT_SPEC.md feat: complete agent HTTP service architecture with auth and callbacks 2026-04-23 21:18:15 -07:00
pyproject.toml fix(verify): make pytest and cargo test pass on this JS-only repo 2026-07-07 21:36:43 -07:00
README.md fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
server.js fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
skills-lock.json feat: agent Dockerfile, backup/server modules, skills integration 2026-04-23 21:09:14 -07:00
tailwind.config.js fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
tsconfig.app.json fix: exclude test files from tsconfig.app.json build, fix lint errors 2026-04-14 10:33:11 -07:00
tsconfig.json fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
tsconfig.node.json Initial commit: React + TypeScript + Vite setup with shadcn/ui 2026-03-21 13:53:13 -07:00
vite.config.ts fix #12: pending GSD pipeline changes 2026-05-17 14:15:59 -07:00
vitest.config.ts fix: exclude test files from tsconfig.app.json build, fix lint errors 2026-04-14 10:33:11 -07:00

Docker Volume Backup Manager

A self-hosted web application for managing Docker and Podman volume backups across multiple hosts. Features multi-target storage (S3, GCS, Azure, local, etc.), scheduled backups, remote agent deployment, job monitoring, and anomaly detection.

Features

  • Multi-Host Backup — Deploy lightweight agents to remote Docker hosts and manage backups from a central UI
  • Multiple Storage Targets — S3, GCS, Azure Blob, local filesystem, WebDAV, Dropbox, Box, Google Drive, SFTP, rsync
  • Scheduled Backups — Cron-based scheduling with full, incremental, and delta backup types
  • Job Monitoring — Real-time progress tracking with WebSocket updates
  • Anomaly Detection — Automatic detection of backup failures, size anomalies, and missed schedules
  • Webhooks & Notifications — Slack, Discord, email alerts for backup events
  • RBAC — Role-based access control (admin, operator, viewer)
  • API Keys — Programmatic access to all functionality
  • Podman Support — First-class support for rootless Podman

Architecture

┌─────────────┐     HTTP/WebSocket      ┌──────────────┐
│   React UI  │ ◄─────────────────────► │   Backend    │
│  (Vite)     │                         │  (Fastify)   │
└─────────────┘                         └──────┬───────┘
                                               │
                          ┌────────────────────┼────────────────────┐
                          │                    │                    │
                          ▼                    ▼                    ▼
                   ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
                   │   Agent 1   │    │   Agent 2   │    │   Agent N   │
                   │ (Host A)    │    │ (Host B)    │    │ (Host C)    │
                   └──────┬──────┘    └──────┬──────┘    └──────┬──────┘
                          │                    │                    │
                          ▼                    ▼                    ▼
                   ┌─────────────┐    ┌─────────────┐    ┌─────────────┐
                   │   Target    │    │   Target    │    │   Target    │
                   │  (S3/etc)   │    │  (S3/etc)   │    │  (S3/etc)   │
                   └─────────────┘    └─────────────┘    └─────────────┘
  • Frontend: React 19 + TypeScript + Vite + Tailwind CSS + shadcn/ui
  • Backend: Fastify + Prisma + PostgreSQL + Redis (BullMQ)
  • Agent: Node.js HTTP service that runs on Docker hosts, executes backups locally, uploads directly to targets

Quick Start

# Clone the repository
git clone <repo-url>
cd docker_backup

# Start everything
docker compose up -d

# Access the UI at http://localhost:5173
# Default login: admin / admin

Manual Setup

Backend:

cd backend
cp .env.example .env
npm install
npm run db:generate
npm run db:migrate
npm run dev

Frontend:

npm install
npm run dev

Agent (on remote Docker host):

cd agent
npm install
npm run build
node dist/agent.js --server http://backup-server:3001 --name "production-host-1"

Or deploy via Docker:

docker run -d --name backup-agent \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  -e SERVER_URL=http://backup-server:3001 \
  docker-backup-agent:latest

Environment Variables

Backend

Variable Required Default Description
DATABASE_URL Yes - PostgreSQL connection string
REDIS_URL Yes - Redis connection string
JWT_SECRET Yes - Secret for JWT signing
PORT No 3001 API server port
AGENT_SECRET No auto Shared secret for agent auth

Frontend

Variable Required Default Description
VITE_API_URL No /api Backend API base URL

Agent

Variable Required Default Description
SERVER_URL Yes - Backup server URL
AGENT_NAME No hostname Agent display name
AGENT_PORT No 2376 HTTP service port

Documentation

Project Structure

docker_backup/
├── src/                    # Frontend (React + Vite)
│   ├── components/         # UI components
│   ├── pages/              # Route pages
│   ├── store/              # Zustand state management
│   ├── lib/                # API client, utilities
│   └── types/              # TypeScript definitions
├── backend/                # Backend API (Fastify)
│   ├── src/
│   │   ├── api/routes/     # REST endpoints
│   │   ├── core/           # Business logic
│   │   │   ├── storage/    # Storage adapters (S3, local, etc.)
│   │   │   ├── agent/      # Agent management
│   │   │   └── jobs/       # Job queue processing
│   │   └── prisma/         # Database schema
│   └── prisma/
│       └── schema.prisma   # Database schema
├── agent/                  # Backup agent
│   ├── src/
│   │   ├── agent.ts        # Entry point
│   │   ├── server.ts       # HTTP service
│   │   ├── backup.ts       # Backup execution
│   │   └── client.ts       # Server API client
│   └── Dockerfile
├── docs/                   # Documentation
└── compose.yaml            # Docker Compose stack

License

MIT