Data

Backups

Encrypted backups of your apps' data and databases to S3-compatible storage, on a schedule, with one-click restore.

Set up storage

On the server's Backups page:

  1. Storage: connect any S3-compatible bucket: AWS S3, Cloudflare R2, Backblaze B2, MinIO and others. Connecting tests it: the panel writes, reads, lists and deletes a test object.
  2. Recovery key: shown once, when you turn backups on. Write it down. Backups are encrypted with it before they leave the server, and it's the only way to read them on a new server.
  3. Schedule: a daily backup of every app at the hour you pick, keeping as many as you choose.

Back up everything backs up every app, plus the panel's own database and key, so a new server can be restored from scratch.

What a backup holds

Back up now, on a project's Backups page, takes a snapshot of the app's data folder:

  1. Every SQLite file, found by its header whatever its name, is copied with SQLite's online backup API, which is safe while the app writes. The copy must pass PRAGMA integrity_check.
  2. PostgreSQL, MySQL and MongoDB are dumped with the app's own login.
  3. The archive is encrypted on the server and uploaded to your bucket.

The list shows every backup, what it holds (SQLite files checked, a PostgreSQL, MySQL or MongoDB dump) and its size.

Restore

Restore puts a backup back:

  1. It unpacks the backup next to data/ first, so a broken backup changes nothing.
  2. It stops the app, swaps the folders and loads the database dump.
  3. It starts the app again.

The replaced data stays next to it as data.before-restore-<time>. For MySQL and MongoDB, that folder also holds a dump of the database as it was.

Encryption

Backups are encrypted on the server before they leave it, with AES-256-GCM and a new key for each file, derived from your recovery key. Your storage provider only ever sees ciphertext.

The panel keeps an encrypted copy of the recovery key so scheduled backups can run. If the server is lost, the copy you wrote down is the only way to read the backups on a new one.

An app without a backup for over a day raises an alert.

Moving data in

Import, on a project's Backups page, brings in a data folder from another server and goes through the same checks as a restore. See Moving from another server.