Updating Catalyst
Prerequisites
Section titled “Prerequisites”- The panel is running from the bundled Docker stack for the in-panel updater; a standalone install uses the manual path below.
- A pre-update database backup — this is the rollback for everything except node agents (backups).
- Administrator access to Admin → System (
admin.write).
The order (always)
Section titled “The order (always)”- Read the release notes. Note breaking changes, migration steps, and minimum versions.
- Back up the database (admin backups).
- Update the panel (below). Database migrations run automatically at backend startup.
- Verify the panel: log in, open a server console, check a backup listing.
- Update nodes one batch at a time (updating a node).
Update the panel from the UI
Section titled “Update the panel from the UI”When Catalyst runs from the bundled Docker stack, the panel updates itself.
- Open Admin → System and find the Auto Updater section. It shows the Current version, the Latest version, and an Update status badge. If a release is available it reads Update available; otherwise Up to date.
- Select Trigger Update. A Panel update dialog opens and streams the live log: Downloading update, then Restarting services. The panel goes down briefly and reconnects on its own; the page reloads into the new version when it finishes.
- If the dialog shows Update failed, open the panel’s System Errors page (or collect a diagnostics bundle) for the reason before retrying.
The button is only enabled when the panel detects it is running in Docker and a newer release exists. On a standalone install the section shows Auto-update is only available when running in Docker. Please update Catalyst manually. — use the manual path below.
Automatic updates
Section titled “Automatic updates”The Auto Updater section also controls the panel’s own automation, and these settings are stored in the database — they apply immediately, with no redeploy:
- Panel update automation — poll for new releases.
- Install panel updates automatically — apply a release without confirming. Leave this off when you want to read the release notes first.
- Check for updates — how often the panel polls (1 hour to 24 hours).
- Check now — poll immediately, for when you do not want to wait.
AUTO_UPDATE_ENABLED, AUTO_UPDATE_AUTO_TRIGGER, and AUTO_UPDATE_INTERVAL_MS
only seed these values on the first read; once you save a change in the panel,
the panel wins.
Automatic node updates are opt-in per node in the same section — see updating a node.
Update the panel manually
Section titled “Update the panel manually”From the directory that holds your stack (catalyst-docker/):
cd catalyst-dockerbash update.sh # refreshes compose/nginx/TLS stack files, keeps .envdocker compose pull # fetch the new imagesdocker compose up -d # recreate containers; migrations run at startupupdate.sh --dry-run shows what it would change before touching anything.
update.sh upgrades the stack files only — the docker compose pull step
is what actually moves you to the new image.
If you run the installer with --update from the parent directory, it delegates
to the same script:
bash install.sh --updateWatch the backend logs until migrations finish (docker compose logs -f backend).
- Pin production to release tags, not
main. Trackmainonly in a lab. - If the panel fails to start after an update, read the container logs before doing anything — most failures are a migration waiting on a lock or an env variable renamed in the release notes.
Rollback
Section titled “Rollback”- Panel: restore the database backup, then restart the previous images.
- Nodes: reinstall the previous agent build on the affected node.
- After any rollback, repeat the four verification checks above.
Recovering from a failed migration
Section titled “Recovering from a failed migration”The backend runs prisma migrate deploy on every container start
(catalyst-backend/docker-entrypoint.sh). If a migration fails, the entrypoint
logs migrate deploy failed, refuses a destructive db push (unless
ALLOW_DATA_LOSS=1 is set) and starts the backend anyway — which then errors at
runtime on the missing schema. Recover in this order.
- Take a dump first, even if the panel is down — the pre-update backup is the supported rollback (disaster recovery).
- Read the failure.
Terminal window docker compose logs backend | grep -A 20 -i migration - Inspect the migration table for the row that never finished:
Terminal window docker compose exec catalyst-postgres psql -U catalyst -d catalyst_dbA row withSELECT migration_name, started_at, finished_at, rolled_back_atFROM "_prisma_migrations"ORDER BY started_at DESCLIMIT 5;finished_atNULL androlled_back_atNULL is the failed migration. - Fix the cause, then re-run. Most failures are a transient lock, a
version/env mismatch, or a full disk. Once fixed, recreating the backend
re-runs the deploy:
Terminal window docker compose up -d backenddocker compose logs -f backend - If it still fails, restore the pre-update dump and redeploy the previous release. That is the rollback the panel supports.
Related
Section titled “Related”- Panel and node update order: this page and updating a node.
- Pre-update database dump and restore: disaster recovery.
- Backup schedule and storage: backups.
- Update failures at runtime: troubleshooting.
