Backup Restore
Last updated
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 recovery -
The 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