Backup Restore
Backups → Restore. Browse snapshots in any destination and restore an account or the whole system.
Browse
Pick a destination; the page lists every snapshot (newest first) with: timestamp, kind (account_full / system_backup), subject, size, restic snapshot id.
Filter by kind, by subject (for account_full), by date range.
Restore — account_full
Pick a snapshot, then choose:
- Target user — restore to the same user (overwrite), to a new user (preserve original), or to an existing different user (uncommon; usually for forensic investigation).
- Components — restore everything, or pick subsets (files only, databases only, mailboxes only, DNS only).
- Dry run — see what would be touched without writing.
The agent restores in the same per-stage order the backup ran: files first, databases second, mailboxes third, DNS records last. Each stage is idempotent at the file or row level.
Restore — system_backup
System restores are typically performed on a freshly-bootstrapped panel host. Sequence:
Provision a clean Debian 13 host and run the standard
bash install.sh.Configure access to the backup destination (or copy credentials over).
On the new panel host:
jabali destination create --type s3 --name recovery ... jabali system restore --snapshot <id> --destination recoveryThe restore covers all 7 stages: panel-DB × 3, OS users, Stalwart state, Kratos state, hosted sites, config snapshot, plus the wrapping restic snapshot integrity check.
After completion, run
jabali repair --diagnoseto surface any drift between restored state and the fresh host (typically only IP-related mismatches if the new host has a different IP).
Round-trip restore was live-verified on 192.168.100.150.
Operator-only safety rails
- A restore into an existing user requires typing the user’s username as confirmation.
- A
system_backuprestore into a non-empty panel database (i.e. not a fresh host) requires--force-overwrite. The default refuses to clobber. - Every restore writes one
backup.restoreaudit row plus per-stage rows.
What restore does not do
- Re-issue Let’s Encrypt certificates — they are restored from the snapshot. Run
jabali ssl renew <domain>for any cert whose expiry is near. - Reconcile listen IPs — if the new host has different IPs than the snapshot’s host, the operator must update IP Addresses before the reconciler succeeds.
- Restart third-party services not under the panel’s control.
CLI
jabali account restore --user <new-id> --snapshot <id> --destination recovery
jabali system restore --snapshot <id> --destination recovery