Docs Guides
Backups
Encrypted snapshots of volumes, databases and folders to your own S3-compatible bucket.
Backups use restic under the hood. Snapshots are encrypted on your server before upload, deduplicated, and stored in a bucket you own. Backups are part of the Team plan and above.
Add a destination
Any S3-compatible storage works: AWS S3, Backblaze B2, Cloudflare R2, Wasabi, MinIO and others. Add the endpoint and an access key under Backups → Destinations, or from the CLI:
$ fwoop backups destinations add acme-backups --endpoint https://s3.example.com --bucket acme-backups
Access key ID: AKIA…
Secret access key: ••••••••
✓ Wrote and deleted a test object
Use a bucket in a different provider or region from the servers it protects.
Create a backup plan
backups:
postgres-main:
source: service:postgres
target: role=db
destination: acme-backups/postgres
schedule: "30 2 * * *"
keep: { daily: 7, weekly: 4, monthly: 12 }
verify: weekly
| Source | What gets backed up |
|---|---|
service:<name> | A consistent dump if the service is Postgres, MySQL, MariaDB or Redis; otherwise its volumes |
volume:<name> | A Docker volume |
path:/srv/data | A folder on the host, with optional include and exclude patterns |
Encryption keys
When you create a plan, Fwoop generates a repository key and asks you to download a copy. It’s stored sealed in your project’s secrets so scheduled runs can use it. Keep your copy somewhere safe: without the key, nobody can read the snapshots, including us.
Verification
After every run, the agent checks the snapshot’s integrity. With verify: weekly (or daily), it also restores the latest snapshot into a temporary container and checks that it can be read. Failures alert the plan’s owner.
Restore
$ fwoop backups snapshots postgres-main
a91f3c2e today 02:30 2.41 GB verified
7c02d4b1 yesterday 02:30 2.40 GB verified
$ fwoop backups restore postgres-main a91f3c2e --to server:db-02
You can restore a whole source, one database, or single files with --path.
Restoring without Fwoop
Snapshots are standard restic repositories. With your key, the restic CLI can list and restore them directly:
$ export RESTIC_REPOSITORY=s3:s3.example.com/acme-backups/postgres
$ export RESTIC_PASSWORD_FILE=./postgres-main.key
$ restic snapshots
$ restic restore a91f3c2e --target ./restore