Upgrading
ParishCRM releases are tagged (vX.Y.Z) and published as both a git tag and
a container image (ghcr.io/<owner>/<repo>:vX.Y.Z). Upgrading means moving
both the database schema and the running container to a new tag together.
- Back up the database. Always, before any upgrade that includes a schema migration.
- Restart the container on the new image tag — pull
ghcr.io/<owner>/<repo>:vX.Y.Zand recreate the container (or however your platform rolls out a new image). The container runsprisma migrate deploybefore the server starts, applying any new migrations (a no-op if there are none). - If you set
MIGRATE_ON_START=false, run migrations yourself from a source checkout at the same tag before step 2:Never useTerminal window git fetch --tags && git checkout vX.Y.Z && npm cinpx prisma migrate deployprisma db pushormigrate devagainst a real deployment — onlymigrate deploy. - On Railway, change the app service’s image tag (Settings → Source) and redeploy.
- Check
<your-url>/api/healthreturns200after the restart.
What to keep unchanged
Section titled “What to keep unchanged”ENCRYPTION_KEY*andAUTH_SECRETmust stay exactly the same across upgrades. RotatingENCRYPTION_KEY*is a deliberate, separate procedure (see Environment Variables → Encryption key rotation) — not something that happens incidentally during a version upgrade.- Any custom
THEME_*/CHURCH_*/APP_*values you’ve set — a version upgrade never resets configuration.
Release notes
Section titled “Release notes”Check the project’s CHANGELOG.md for what changed in each release —
notable user-facing changes are also surfaced in-app under Help → What’s
New after you sign in (see Help and What’s New).
If something goes wrong
Section titled “If something goes wrong”- If
prisma migrate deployfails partway, don’t try to hand-edit migration state — restore the pre-upgrade database backup and get back to a known state before retrying. - If you need to buy time on a risky upgrade step (e.g. a long migration), put the site into maintenance mode first so users see a clear “we’ll be back shortly” page instead of errors.