Skip to main content
A restore replaces the current database entirely. Schedule a maintenance window, confirm which Compose project you are pointing at, and take a fresh pre restore backup before you start.
Migrations are forward only. Starting a newer application image against an older restored database applies the pending migrations, which is fine, but starting an older image against a newer database is not supported. Restore the code revision that matches the archive. See Upgrade and roll back.

Restore into a running stack

The pg_restore --list at the top is the important line. It reads the archive before anything is dropped, so a corrupt file fails while the current database is still intact. Starting the stack applies any migrations the checked out application version requires.

Restore into a fresh host

Same sequence, with two steps in front.
1

Bring up an empty stack

Install asobeast normally and let it boot once, so the volumes and the schema exist. See Self host with Docker Compose.
2

Check out the matching code revision

Use the revision the archive was taken from, or a newer one. Never an older one.
3

Run the restore block above

Then verify as below.
Use a fresh AUTH_SECRET on the new host only if you accept that every session is invalidated. Account records come from the archive either way.

After a restore

Check three things, in this order. pipeline.lastDailyRunAt lives in Redis rather than in PostgreSQL, so after a restore onto a fresh Redis it starts empty and fills on the next run. That is expected and is not data loss. See Health checks and monitoring.

If the restore fails

Keep the applications stopped. Read docker compose logs postgres, then restore the pre restore archive you took at the start before reopening service.

Back up PostgreSQL

Where the archive comes from.

Troubleshooting

Symptoms after a restore.
Last modified on July 31, 2026