Backup & restore
Back up the configuration, database, and media together. The database contains recording details and user access; the media files contain the recordings themselves.
| What to save | Contents |
|---|---|
| Configuration | server/.env, your config.toml, and any Compose overrides. Keep the existing SESSION_SECRET. |
| Database | Schedules, recording details, download progress, accounts, invitations, sessions, and dashboard system settings. |
| Storage | Recordings, previews, and the .replayvod-storage identity file at the storage root. |
Store a separate copy of your media even when you use S3. A bucket used as the primary recording store is not itself a backup.
Database
Section titled “Database”SQLite
Section titled “SQLite”Stop the recorder before copying the database. If SQLite’s -wal and -shm files remain beside it, keep them with the copy.
The supplied Compose file stores data in a Docker volume at /app/data, rather than a data/ directory on the host. To copy it from the SQLite container, run these commands from the ReplayVOD install directory:
mkdir -p backup/datadocker compose --env-file server/.env --profile sqlite stop replayvod-sqlitedocker compose --env-file server/.env --profile sqlite cp replayvod-sqlite:/app/data/. ./backup/data/docker compose --env-file server/.env --profile sqlite start replayvod-sqliteThis copies the entire data directory, including local recordings. Copy backup/ to your backup destination and save the configuration files too.
For a source install or custom bind mount, stop the server and copy the directory containing SQLITE_PATH with your usual backup tool.
Postgres
Section titled “Postgres”For the supplied PostgreSQL Compose profile, stop the recorder while taking the database and media backup:
docker compose --env-file server/.env --profile postgres stop replayvod-postgresdocker compose --env-file server/.env --profile postgres exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" -d "$POSTGRES_DB"' > replayvod.sqlBack up the media and configuration before starting replayvod-postgres again. For an external PostgreSQL server, use pg_dump with that server’s connection settings.
For local storage, copy the whole storage directory, including .replayvod-storage. The default Compose volume is mounted at /app/data; source installs default to ./data.
For S3, back up or replicate the bucket’s objects, including the identity marker. Keep that backup separate from automatic deletions in the primary bucket.
Finished recordings don’t change, so incremental backups usually need to copy only new recordings. Keep the database backup from the same backup run so recording details match the saved files.
Restore
Section titled “Restore”- Install the same ReplayVOD version used for the backup. Keep the recorder stopped while restoring.
- Restore
server/.env,config.toml, and any Compose overrides. Preserve the originalSESSION_SECRET. - Restore the SQLite files or import the PostgreSQL dump into an empty database.
- Restore the media and
.replayvod-storagemarker to their configured locations. For Docker, restore them into the volume mounted at/app/data. - Start ReplayVOD, sign in, and play an existing recording.
The database and storage marker must belong to the same installation. If the dashboard reports a mismatch, check that you restored the matching database and storage. See Storage is not attached.
The EventSub signing secret is stored in the database and returns with that backup. ReplayVOD checks its Twitch subscriptions again after startup.