No description
|
|
||
|---|---|---|
| .agents/skills | ||
| .claude/skills | ||
| .forgejo/workflows | ||
| .husky | ||
| .qwen/skills | ||
| .windsurf/skills | ||
| agent | ||
| backend | ||
| docs | ||
| public | ||
| skills | ||
| src | ||
| .env.sample.tailscale | ||
| .env.sample.zsus | ||
| .gitignore | ||
| .pre-commit-config.yaml | ||
| .prettierrc | ||
| AGENTS.md | ||
| bun.lock | ||
| Cargo.lock | ||
| Cargo.toml | ||
| CHANGELOG.md | ||
| components.json | ||
| conftest.py | ||
| CONTRIBUTING.md | ||
| docker-compose-tailscale.yml | ||
| docker-compose.backup.yml | ||
| docker-compose.podman.yml | ||
| docker-compose.zsus.yml | ||
| Dockerfile | ||
| Dockerfile.frontend | ||
| Dockerfile.monolithic | ||
| eslint.config.js | ||
| GSD_AGENT_SPEC.md | ||
| index.html | ||
| lefthook.yml | ||
| package-lock.json | ||
| package.json | ||
| page.png | ||
| postcss.config.js | ||
| PROJECT_SPEC.md | ||
| pyproject.toml | ||
| README.md | ||
| server.js | ||
| skills-lock.json | ||
| tailwind.config.js | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
| vitest.config.ts | ||
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
Docker Compose (Recommended)
# 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
- API Reference — Complete REST API documentation
- Architecture — System design and data flow
- Podman Setup — Rootless Podman deployment
- Tailscale VPN — Secure private networking
- Contributing — Development guidelines
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