Documentation
Back up and restore
What to back up on a self-hosted Docustay, a script that does it, and how to restore it on a new machine.
A self-hosted Docustay keeps its state in three places. Back up all three, together, or the backup may not restore.
| What | Where | Why it matters |
|---|---|---|
| The database | the db container (volume dbdata) |
People, templates, documents, settings, the audit trail. |
| The file store | the storage container (volume filedata) |
Uploaded files and signed PDFs. |
The app data volume and .env |
volume appdata and the file docustay/.env |
The certificate that seals signed PDFs, the key that protects stored passwords, and the secrets behind sign-in. Without them a restored copy cannot open what it stored. |
Back up
Run this from the docustay folder. It writes one dated folder.
set -eu
d="backup-$(date +%Y%m%d-%H%M)"; mkdir -p "$d"
# 1. the database, as one consistent file
docker compose exec -T db pg_dump -U docustay -Fc docustay > "$d/db.dump"
# 2. the file store and the app data volume, as archives
for v in filedata appdata; do
docker run --rm -v "docustay_$v:/v:ro" -v "$PWD/$d:/out" alpine tar czf "/out/$v.tgz" -C /v .
done
# 3. the settings file
cp .env "$d/env"; chmod 600 "$d/env"
echo "backed up to $d"
Copy the folder somewhere that is not this machine. The folder holds secrets, so keep it as private as the install itself.
Restore on a new machine
- Install Docker and get the Docustay folder (
git clone, thencd docustay). - Put the saved settings file back:
cp backup-…/env .env - Start only the database and the file store, so nothing writes yet:
docker compose up -d db storage
- Load the database:
docker compose exec -T db pg_restore -U docustay -d docustay --clean --if-exists < backup-…/db.dump
- Load the two volumes:
for v in filedata appdata; do
docker run --rm -v "docustay_$v:/v" -v "$PWD/backup-…:/in:ro" alpine sh -c "cd /v && tar xzf /in/$v.tgz"
done
- Start everything and check it:
docker compose up -d, then rundocker compose psand open the app. Every service should beUp, andappshould say(healthy).
Test the restore
A backup you have not restored is a guess. Once, on a spare machine, do the restore above and open a signed document. Do it again after a major upgrade.
How often
Daily is a good start for the database. The file store changes only when documents are made or signed, so the same schedule is enough. Keep at least the last seven.