VisitorPortal does not include a full monitoring or alerting system. Operators must connect it to their own monitoring stack.
Service names depend on the Compose file:
- Development (
docker-compose.yml): web serviceweb. - Demo (
docker-compose.demo.yml): web serviceapp. - Production (
docker-compose.prod.yml): web serviceapp.
Shared service names:
queue: Laravel queue worker.scheduler: Laravel scheduler worker.db: MariaDB.gotenberg: PDF renderer.mailhog: demo/development mail testing only.
- HTTP check:
GET /up. - Docker container state and Docker health status.
- App health:
php artisan visitorportal:health app. - Queue health:
php artisan visitorportal:health queue. - Scheduler health:
php artisan visitorportal:health scheduler. - Queue backlog and failed jobs.
- Scheduler heartbeat freshness.
- Disk usage for database and storage volumes.
- SMTP delivery.
- Database backups and restore tests.
- Retention dry-runs.
Docker Compose does not restart a container only because it is unhealthy. Observe health status through monitoring and alerting.
Development:
docker compose exec web php artisan visitorportal:health app
docker compose exec queue php artisan visitorportal:health queue
docker compose exec scheduler php artisan visitorportal:health schedulerDemo:
docker compose --env-file .env.demo -f docker-compose.demo.yml exec app php artisan visitorportal:health app
docker compose --env-file .env.demo -f docker-compose.demo.yml exec queue php artisan visitorportal:health queue
docker compose --env-file .env.demo -f docker-compose.demo.yml exec scheduler php artisan visitorportal:health schedulerProduction:
docker compose -f docker-compose.prod.yml exec app php artisan visitorportal:health app
docker compose -f docker-compose.prod.yml exec queue php artisan visitorportal:health queue
docker compose -f docker-compose.prod.yml exec scheduler php artisan visitorportal:health schedulerFor stricter storage permission checks in demo or production, run app health as the web server user when the container permits it:
docker compose --env-file .env.demo -f docker-compose.demo.yml exec --user www-data app php artisan visitorportal:health app
docker compose -f docker-compose.prod.yml exec --user www-data app php artisan visitorportal:health appDevelopment:
docker compose logs -f web
docker compose logs -f queue
docker compose logs -f schedulerDemo:
docker compose --env-file .env.demo -f docker-compose.demo.yml logs -f app
docker compose --env-file .env.demo -f docker-compose.demo.yml logs -f queue
docker compose --env-file .env.demo -f docker-compose.demo.yml logs -f schedulerProduction:
docker compose -f docker-compose.prod.yml logs -f app
docker compose -f docker-compose.prod.yml logs -f queue
docker compose -f docker-compose.prod.yml logs -f schedulerThe queue worker is required for notifications and background jobs.
Check failed jobs:
php artisan queue:failedRestart workers after deployments:
php artisan queue:restartRecommended worker command:
php artisan queue:work --sleep=3 --tries=3 --timeout=120 --max-time=3600 --max-jobs=1000 --memory=128DB_QUEUE_RETRY_AFTER must be greater than the worker timeout. The Docker default is 180.
The scheduler is required for reminders, monitor auto generation, recurring visits, completion tasks, retention jobs and health heartbeat updates.
List tasks:
php artisan schedule:listRun once:
php artisan schedule:runDocker uses the scheduler service with php artisan schedule:work.
Visit retention dry-run:
php artisan visits:purge-expired --dry-runTechnical retention dry-run:
php artisan privacy:purge-technical-data --dry-runRetention output contains aggregate counts only. It must not be treated as a replacement for backup, database, Docker, host, reverse-proxy or SIEM retention policies.
Backups must cover:
- MariaDB data.
backend/storageor the equivalent Dockerapp_storagevolume.- Production
.envsecrets stored securely outside the application checkout. - Uploaded branding and welcome-monitor assets.
Test restores regularly. A backup that has never been restored is not an operationally verified backup.
Container status:
docker compose ps
docker compose --env-file .env.demo -f docker-compose.demo.yml ps
docker compose -f docker-compose.prod.yml psApp does not become healthy:
- Check
apporweblogs. - Check database health and credentials.
- Confirm
APP_KEYis set. - Confirm writable
storageandbootstrap/cache. - On first demo start, allow time for migrations and seed data.
Queue health is stale:
- Confirm the
queueservice is running. - Inspect failed jobs.
- Check SMTP connectivity if mail jobs fail.
Scheduler health is stale:
- Confirm the
schedulerservice or cron entry is running. - Check
schedule:listand scheduler logs.
Port conflicts in the demo:
- Change
APP_PORTorMAILHOG_PORTin.env.demo. - Restart the demo.
Reset the local demo:
sh reset-demo.sh