Backup and Restore
Use two backup layers. A configuration export is portable and convenient, while a filesystem snapshot is required to recover operational history and media.
What Each Backup Contains
| Backup | Includes | Does not include |
|---|---|---|
| Settings > Backup & Restore export | Global settings, templates, streamers and filters, engines, platform settings, notification channels/subscriptions, job and pipeline presets, users and password hashes | Recording media, session/job history, logs, refresh-token sessions |
| Filesystem backup | Whatever you copy from DATA_DIR, CONFIG_DIR, OUTPUT_DIR, and optionally LOG_DIR | External upload destinations and notification services |
Sensitive Export
The configuration export can contain platform cookies, notification credentials, channel settings, user metadata, and password hashes. Encrypt it, restrict access, and do not attach it to a public issue.
Configuration Export
In the web interface, open Settings > Backup & Restore and download an export. The API equivalents are GET /api/config/backup/export and POST /api/config/backup/import.
Import supports two modes:
mergeupdates matching entities and keeps entities absent from the file.replaceremoves existing managed configuration not present in the import. Treat this as destructive and test it on a disposable instance first.
An export is useful for migration and source-controlled review after secrets are removed, but it is not a database backup.
Consistent Filesystem Backup
For the standard Docker layout:
- Download a fresh configuration export.
- Disable new recording work or schedule a maintenance window.
- Run
docker compose stopso SQLite and active media files are consistent. - Snapshot or copy
DATA_DIR,CONFIG_DIR,OUTPUT_DIR, the.envfile, anddocker-compose.yml. IncludeLOG_DIRonly when required by your incident-retention policy. - Restart with
docker compose up -dand verify liveness.
Protect .env and backup media with the same or stronger controls as the live service. Keep at least one backup outside the host and test its integrity.
Restore Drill
- Provision a clean host with enough space and the same pinned Rust-Srec version.
- Keep the service stopped while restoring the saved directories to the same absolute paths and permissions.
- Restore
.envand Compose configuration. Do not generate a newJWT_SECRETduring a like-for-like restore unless invalidating all access tokens is intended. - Start the service and check
/api/health/live. - Sign in, check authenticated
/api/health/ready, inspect streamers and sessions, and play or checksum representative media. - Test one noncritical live recording and its pipeline.
Record the restore time and the point-in-time loss observed. Those measurements are your actual recovery time and recovery point.