Troubleshooting¶
Check service health¶
Run the built-in health check script:
Or check each service manually:
curl http://localhost:3001/health # Backend
curl http://localhost:3000/ # Frontend
curl http://localhost:3002/health # Azure module (if enabled)
View logs¶
# All services
docker compose -f docker-compose.generated.yml logs -f
# Specific service
docker compose -f docker-compose.generated.yml logs -f backend
# Last 100 lines
docker compose -f docker-compose.generated.yml logs --tail=100 backend
Common issues¶
Database connection failed¶
Symptom: Backend health check fails with a database error. Logs show connection refused or password authentication failed.
Steps:
-
Confirm the database container is running:
-
Verify
DATABASE_URLorPOSTGRES_*variables in.envare correct. -
Check database logs:
Module not starting¶
Symptom: A module container exits immediately after starting.
Steps:
-
Check the module is set to
enabled: trueinstrawly-deployment.yml. -
Check that
CREDENTIALS_ENCRYPTION_KEYis set and matches the backend's value, so the module can decrypt the credentials stored in the database. (Cloud provider credentials themselves are entered in the UI, not in.env.) -
View the module logs:
Port already in use¶
Symptom: Error: bind: address already in use when starting services.
Steps:
-
Find what is using the port:
-
Either stop the conflicting process, or change the port in
strawly-deployment.yml: -
Regenerate and redeploy:
-
If you changed the backend port, also update
CORS_ORIGINand any frontend environment variables that reference the backend URL.
Migrations failing¶
Symptom: The migrations container exits with an error and the backend does not start.
Steps:
-
Check migration logs:
-
Common causes: database is not yet reachable (timing issue — re-running usually resolves it), or
DATABASE_URLis incorrect. -
Re-run the stack:
Frontend cannot reach the backend¶
Symptom: The UI loads but shows errors or empty data. Browser console shows CORS errors or network failures.
Steps:
-
Confirm the backend is healthy:
curl http://localhost:3001/health -
Check
CORS_ORIGINin.envmatches the URL you are using to access the frontend. -
Regenerate and redeploy after any
.envchange:
Reset the database¶
This deletes all data permanently
Only do this if you need a clean slate. There is no undo.
Take a backup first:
docker exec strawly-postgres pg_dump -U strawly strawly \
| openssl enc -aes-256-cbc -pbkdf2 -salt \
-out backup-before-reset-$(date +%Y%m%d-%H%M%S).sql.enc
Then reset:
docker compose -f docker-compose.generated.yml down -v
docker compose -f docker-compose.generated.yml up -d
The -v flag removes Docker volumes, including the PostgreSQL data volume. Migrations and the seeder run automatically on the next startup, restoring system roles and the admin account from ADMIN_EMAIL/ADMIN_PASSWORD in .env. Re-seed the module registry so the UI shows your enabled modules:
Demo data is not restored automatically. Run the demo seed again if needed: