Backup and restore
Panel Comments backups use the .pcbak format. The payload is a ZIP containing a manifest, checksummed JSON Lines table streams, and the instance master key. The complete ZIP is encrypted and authenticated in chunks with Sodium secretstream; the password key uses Argon2id. Database credentials are excluded so restoration can use different credentials.
Infrastructure configuration is also excluded. Preserve panel-config.php separately. A private Cloudflare OAuth client saved through Tools → Optimization is installation-local and must be entered again after restoring to a different installation; existing Cloudflare rules continue operating independently until removed or repaired.
The default destination is panel-content/backups/*.pcbak.php. Its PHP guard returns an empty 404 before the encrypted bytes when stored below the website directory. Backups written to an external path may use the ordinary .pcbak extension. Both guarded and legacy unguarded files can be restored.
Administration panel
Open Tools → Backups to create an encrypted backup, download it, delete stored copies, or upload and restore a backup. Panel Comments never stores the backup password. Restoring requires typing RESTORE, creates an encrypted pre-restore safety backup first, replaces the current data, and signs out the current session.
Keep downloaded copies somewhere other than the comments server. Losing both the instance master key and every encrypted backup makes encrypted email and integration data unrecoverable.
Command line
Create a backup:
PANEL_BACKUP_PASSWORD='a long unique secret' php bin/panel backup:create /safe/path/comments.pcbak
The export uses one repeatable-read transaction for a consistent InnoDB snapshot. Store the printed SHA-256 value separately and copy the file off the comments server.
Restore into an installed instance whose database user can modify all Panel Comments tables:
PANEL_BACKUP_PASSWORD='a long unique secret' php bin/panel backup:restore /safe/path/comments.pcbak --yes
Restore validates authenticated encryption, the archive manifest, the exact table set, and every payload checksum before changing data. It creates a new encrypted pre-restore safety backup unless --no-safety-backup is supplied. Table replacement is transactional for InnoDB, the restored master key is activated atomically, and the cache is cleared.
After restore, run:
php bin/panel doctor
php bin/panel cron --budget=50
Test restore procedures on a separate database regularly. A backup that has never been restored is only a hypothesis.