backupd
The declarative S3-compatible backup daemon for Linuxbackupd lets you define backup plans in a single YAML file - sources, destination, encryption, retention, tags, and hooks - and handles the rest. Incremental by default, encrypted at rest, and scheduled without extra tooling.
Key Features¶
-
๐ Incremental by Default
Rsync-style delta algorithm uploads only changed blocks, keeping repeated backups cheap on large datasets.
-
๐ฆ Zero Runtime Dependencies
A single static Go binary - no agent, no database, no interpreter.
-
๐ Encrypted at Rest
AES-256-GCM encryption with Argon2id key derivation; dedup blocks and archives are stored unreadable without the passphrase.
-
๐๏ธ S3-Compatible Storage
AWS S3, MinIO, DigitalOcean Spaces, Backblaze B2 - anything with an S3 API.
-
๐งฉ Multi-Source
File trees, PostgreSQL, MySQL, MongoDB, SQLite, Docker volumes, and Kubernetes PVCs in one plan.
-
โฐ Built-In Scheduling
Embedded cron daemon, or export native systemd timers and services.
-
๐งน Automatic Retention
keep-last, daily, weekly, and monthly policies prune old snapshots for you.
-
๐ Hooks
Pre-backup, post-backup, and on-failure commands for Healthchecks.io pings, notifications, and more.
-
โ Verifiable
Snapshot integrity verification and restore from any snapshot, anytime.
-
๐ข Rate Limiting
Per-plan transfer limits keep backups from saturating slow or shared links.
-
๐งช Check & Dry-Run
backupd checkvalidates configs;run --dry-runshows exactly what would be uploaded without writing a byte.
When Should I Use backupd?¶
- Servers and VPSes: if you need reliable backups of
/etc, web roots, application data, or databases on a schedule, backupd replaces ad-hoccron+tar+scppipelines. - Databases: if you need consistent logical dumps of PostgreSQL, MySQL, MongoDB, or SQLite - including the database and its files - in one place.
- Container workloads: if you run Docker volumes or Kubernetes PVCs and want their contents in the same backup stream as everything else.
- Offsite storage: if you want backups in S3-compatible object storage (MinIO at home, B2/Spaces/S3 in the cloud) with encryption applied before upload.
- Notification and monitoring: if you want Healthchecks.io pings, Slack/Discord alerts, or email on every success and failure via hooks.
- Retention discipline: if you want keep-last + daily + weekly + monthly pruning so backups never silently accumulate unbounded.
Quick Example¶
# ~/.backupd.yaml
plans:
- name: server
schedule: "0 3 * * *" # every day at 03:00
sources:
- type: file
path: /etc
exclude: ["*.log", ".cache"]
- type: database
adapter: postgres
dsn: "postgres://user:pass@localhost:5432/mydb"
destination:
type: s3
bucket: my-backups
endpoint: s3.amazonaws.com
region: us-east-1
access-key: ${AWS_ACCESS_KEY_ID}
secret-key: ${AWS_SECRET_ACCESS_KEY}
encryption:
passphrase: ${BACKUP_PASSPHRASE}
retention:
keep-last: 30
keep-daily: 7
keep-weekly: 4
backupd run server # first run backs everything up
backupd history server # watch snapshots accumulate
backupd restore server <id> --target /tmp/restore # restore any snapshot
Next Steps¶
- Installation - get the binary
- Quick Start - your first backup in five minutes
- Configuration - full config reference
- Examples - real-world setups for servers, databases, and containers