Back up
Back up all of the following as one recovery set:- PostgreSQL, including deployment and audit tables;
- every referenced external-storage object at its exact provider version/generation, with size and SHA-256;
- the
casebender_secretvolume or externally managed license secret; .env, externally managed encryption keys, and the exactAUDIT_INTEGRITY_SECRETused by the restored audit database;- custom TLS trust and integration configuration; and
- the exact pinned image manifest and Compose release.
app/db installations may store attachments in miniodata and the
license key in casebender_secret, while the signed bundle stores local files
in casebender_data only for historical/single-node layouts and the license key
in .env. New production installations require external storage. Back up the
legacy source layout before changing it. See
Migrate a Legacy Docker Compose Installation.
Encrypt recovery sets, restrict access, store a copy outside the Docker host,
and record a checksum.
Example PostgreSQL backup:
AUDIT_INTEGRITY_SECRET independently of PostgreSQL
breaks verification of existing chained audit records.
Create the database-linked object manifest and test an isolated exact-version
restore with scripts/storage/verify-backup-restore.ts. Follow
Storage Backup and Restore; a database
dump and an eventually consistent bucket copy taken at unrelated times are not
a valid recovery point.
Restore rehearsal
At least quarterly:- provision an isolated recovery network;
- restore the database, object storage,
.env, and encryption material; - start the same pinned CaseBender version;
- run
./casebender preflight; - verify users, organizations, cases, attachments, API-key status, and audit chain integrity;
- record actual recovery point and recovery time.