Encrypted Backup and Restore
Security Center creates encrypted, hotel-scoped recovery archives. Each archive includes database records, referenced private files, and a checksum used before restore.

Daily workflow
- Let the scheduler run
hotel:backup --type=fullevery day. - Download completed archives from Security Center and copy them to encrypted off-server storage.
- Watch failed runs and never treat a log row as a valid backup unless its status is completed.
- Run a restore drill on staging after major upgrades and at least once per quarter.
Manual verification
php artisan hotel:backup --type=full
php artisan schedule:listRestore requires Owner access and the exact confirmation word RESTORE. The app validates the archive checksum, encryption envelope, format version, and hotel identity before writing anything. Restore is intentionally non-destructive to unrelated hotels.
Operational safeguards
- Archives remain on the private local disk and are served only by an authenticated permission-checked download route.
- The application encryption key is required to decrypt archives. Store the production
APP_KEYin a separate secret manager. - Do not copy
.hotelbak.encfiles intopublicor public object-storage buckets. - Database-provider snapshots remain a recommended second layer for disaster recovery.