Skip to main content

Updating

Upgrading

git pull
docker compose up -d --build

Migrations are applied automatically by the one-shot migrate service before the app restarts, so there is no separate migration step.

The update banner

Administrators see an in-app banner when a newer release is published on GitHub.

VariableEffect
APP_VERSIONThe version reported as current. Usually stamped at build from the release tag. Falls back to package.json, then to dev, which disables the banner.
DISABLE_UPDATE_CHECKSet true to disable the banner and the GitHub poll entirely.

Set DISABLE_UPDATE_CHECK=true for deployments that should make no outbound calls.

Backups

Two volumes hold state, and both are needed for a usable restore. A database dump alone restores records whose attachments are gone.

Database:

docker compose exec -T postgres pg_dump -U warpdrive warpdrive \
| gzip > backup-$(date +%F).sql.gz

Files live in the miniodata volume; back that up alongside the database.

Test a restore before you need one.

Logs

docker compose logs -f app # the application
docker compose logs -f worker # mailbox sync, imports, scheduled sends
docker compose logs -f ws # realtime
docker compose logs -f caddy # TLS and routing

worker is the one people forget. Background work (mailbox sync, CSV imports, scheduled sends) runs only there. An import stuck at "uploaded" or mail that never arrives is usually a worker that is not running, not an application fault.

Reaching Postgres

Postgres is deliberately not published to the host in production:

docker compose exec postgres psql -U warpdrive

MinIO's S3 API is reachable through Caddy at https://s3.<APP_DOMAIN>, because the browser needs it for presigned uploads. Its admin console stays internal, so forward a port temporarily to reach it.

Health

curl -fsS https://<APP_DOMAIN>/api/health # -> {"ok":true}