Skip to content

GUI-based Backup & Restore for danbyte environments #27

Description

@deku-m

Summary

Add a native, GUI-driven backup and restore system for full danbyte environments, covering database, media/files, and configuration — with selectable scope profiles, scheduling, and remote storage targets. Removes the need for external pg_dump/shell-script workflows (a common pain point in NetBox-style tools).

Motivation

Self-hosted IPAM/DCIM tools rarely solve backup/restore inside the product itself. Admins are left stitching together cron jobs, pg_dump, and manual file archiving. This feature makes disaster recovery, migration, and staging clones a first-class GUI operation.

Scope

Backup components

Component | Contents -- | -- Database | PostgreSQL dump (schema + data) Media/files | Uploaded images, attachments, documents Config | env vars, custom fields, plugin configuration, webhook/API token references (not secrets)

Backup profiles

  • Full — database + media + config
  • Config only — config + schema, no data (for cloning a setup)
  • Database only — data without media (fast, small snapshots)
  • Custom — per-component checkboxes

Scheduling

  • Cron expression or simple dropdown (daily/weekly/monthly + time)
  • Each schedule bound to its own backup profile (e.g. daily "database only" → local, weekly "full" → S3)
  • Retention policy: max count or max age

Remote storage targets

  • Abstracted via a StorageBackend interface (Upload, Download, List, Delete)
  • Initial implementations: Local disk, S3-compatible (AWS S3, MinIO, Backblaze B2)
  • Future: SFTP, WebDAV

Restore flow

  • List of available backups (local + remote) with timestamp, profile type, size
  • Restore preview: summary of what will be overwritten (e.g. "this will overwrite X devices, Y sites, N media files")
  • Restore to same instance, or download-only for manual restore elsewhere
  • Explicit confirmation step (destructive action warning)

Execution model

  • Async, job-queue based (not synchronous in an HTTP request) — media archiving can be slow
  • Job status surfaced in GUI with step-level progress (dumping database → archiving media → uploading to remote)
  • Success/failure notifications via existing Slack/Teams alerting integration

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

Status
Todo

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions