Back up first
Regardless of install method, snapshot your data before upgrading:Composer install
For a bare-metal / Composer deployment, update the code, dependencies, database, and compiled assets, then restart the background workers.1
Enable maintenance mode
Take the app offline so no telemetry is processed against a half-migrated schema:
2
Pull the latest code
3
Update dependencies
Update PHP and frontend dependencies:
4
Run database migrations
Apply any new schema changes:
In an automated deploy pipeline, use
php artisan migrate --force to run migrations without the interactive confirmation prompt.5
Clear cached state
Flush stale cached config, routes, views, and events so the new version’s values are used:
6
Rebuild frontend assets
7
Restart background workers
Queue workers and Reverb hold the old code in memory until restarted. Restart them so they pick up the new version:Your process manager (Supervisor) will automatically start fresh workers. Restart the Reverb process the same way if it is supervised.
8
Bring the app back online
Docker install
For a Docker deployment, pull the latest code, rebuild the image, and recreate the containers. Because the app, worker, scheduler, and Reverb all share the same image, rebuilding once updates every service.1
Pull the latest code
If you deploy from a prebuilt image registry instead of building locally, pull the new image directly with
docker compose pull and skip the --build flag in the next step.2
Rebuild and restart the containers
3
Run database migrations
Migrations do not run automatically on rebuild. Apply them inside the app container:
4
Clear cached state
After updating
- Confirm the dashboard loads and the connection indicator shows real-time updates are live.
- Send a test event from a monitored app and verify it appears.
- Check the logs for migration or worker errors — see Troubleshooting.
