Skip to content

bocklucas/dvb-made-easy

Repository files navigation

DVB Made Easy

CI Latest Release Docker Image License: MIT GitHub Stars

Go Version SvelteKit Tailwind CSS Docker Storage: Local & SMB Storage: S3 & Azure Storage: WebDAV & SFTP Storage: Dropbox & GDrive

A lightweight, self-hosted web UI for restoring Docker volume backups created by offen/docker-volume-backup.

DVB Made Easy — Full Walkthrough

Note

This project was co-authored with Claude and Anti-Gravity.

Warning

Early-Stage Software — Functional and used in real environments, but you may encounter rough edges. This tool interacts directly with Docker volumes and container lifecycles — back up your data independently before relying on it for critical restores. Test against non-production volumes first. Bug reports welcome at Issues.

Caution

No built-in authentication. Requires direct access to the Docker socket (/var/run/docker.sock), which grants full control over the Docker daemon (effectively root on the host).

  • Never expose this application to the public internet.
  • Secure it behind a VPN or authenticating reverse proxy (Authelia, Authentik, Cloudflare Access, etc.).

Table of Contents


Features

  • Flexible Project Import — Paste a docker-compose.yml, import from a Git repository (HTTPS tokens / SSH keys), or connect to Portainer to auto-discover stacks.
  • Encrypted Passphrase Storage — Volume and project-wide GPG passphrases are persisted in an AES-256-GCM encrypted manifest that survives container restarts.
  • Automated Volume Restore — Restore into the original volume or create a new one (e.g. {volume}_restored_{timestamp}) for safe inspection before replacing production data.
  • Swarm & Compose Orchestration — Scales down Swarm services or stops Compose containers before restoring, then brings everything back up automatically.
  • Real-Time Progress — Server-Sent Events stream live percentages, logs, and container state transitions to the UI.
  • Multi-Backend Storage — Local directory, SMB/CIFS, AWS S3 / MinIO, WebDAV (Nextcloud), SFTP, Azure Blob, Dropbox, and Google Drive.
  • Sidecar Backup Generator — A configuration wizard that generates and injects the offen/docker-volume-backup sidecar service into your compose file, with schedule, retention, encryption, and storage settings.

Screenshots

Dashboard — All your projects at a glance

Dashboard

Project Detail — Volumes, passphrases, and storage configuration

Project Detail

Browse Backups — List available backups per volume with one-click restore

Browse Backups

Setup Wizard — Choose your import method (Paste, Git, or Portainer)

Setup Method Paste Compose Auto-Detected Storage

Restore Progress — Real-time streaming of every step

Restore Progress

Compose Restore — Select a backup point to restore all volumes at once

Compose Restore


Quick Start

Single command — no cloning required:

curl -sL https://raw.githubusercontent.com/bocklucas/dvb-made-easy/main/docker-compose.prod.yml -o docker-compose.yml && docker compose up -d

Or run directly without a compose file:

docker volume create dvb-restore-staging

docker run -d -p 7331:7331 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dvb-config:/app/config \
  -v dvb-restore-staging:/staging \
  ghcr.io/bocklucas/dvb-made-easy:latest

Then open http://localhost:7331.

Tip

If you get a "permission denied" error for the Docker socket, add your Docker group ID:

docker run -d -p 7331:7331 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v dvb-config:/app/config \
  -v dvb-restore-staging:/staging \
  --group-add $(getent group docker | cut -d: -f3) \
  ghcr.io/bocklucas/dvb-made-easy:latest

Local Development (Docker Compose)

git clone https://github.com/bocklucas/dvb-made-easy.git
cd dvb-made-easy

export DOCKER_GID=$(getent group docker | cut -d: -f3)
docker compose up -d

Local Development (No Docker)

Prerequisites

  • Go 1.26+
  • Node.js 22+
  • Access to a local Docker daemon (/var/run/docker.sock)

1. Start the Go Backend

go run cmd/server/main.go --port 7331 --config-dir ./config-dev --staging-dir ./staging-dev

2. Start the Frontend Dev Server

cd web
npm install
npm run dev

Open http://localhost:5173 — the Vite dev proxy forwards /api requests to the Go backend on port 7331.


Security Model

Encrypted Manifest

  • A 32-byte key is generated on first start and saved as /app/config/.key (mode 0600).
  • All credentials (SMB, Git tokens, GPG passphrases) are encrypted with AES-256-GCM and stored in manifest.enc.
  • Back up your .key file — without it, the manifest cannot be decrypted.

Docker Socket Access

  • The app needs /var/run/docker.sock to inspect containers and run extraction helpers. Docker socket access is equivalent to root on the host.
  • No built-in authentication — restrict access to a trusted local network, VPN, or authenticating reverse proxy.

FAQ & Troubleshooting

"permission denied" on /var/run/docker.sock Set the DOCKER_GID environment variable before running docker compose up, or add --group-add when using docker run.

How do I restore into a different volume name? Select New Volume Mode during the restore flow. It defaults to {volume_name}_restored_{timestamp} but can be customized to any name.

How does GPG decryption work? The UI shows a lock icon when it detects .gpg files. You can store the passphrase in the encrypted manifest or enter it at restore time. The helper container handles decryption automatically.

About

Self-hosted web UI for one-click Docker volume backup restores. Automates decryption, scaling, extraction & rollback for offen/docker-volume-backup archives. Supports S3, Azure, SMB, SFTP, WebDAV, Dropbox & Google Drive.

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors