docker compose up -d postgres localstackWait until both are healthy (about 10 seconds):
docker compose psAWS_REGION=us-east-1 \
AWS_ACCESS_KEY_ID=test \
AWS_SECRET_ACCESS_KEY=test \
SECRETS_MANAGER_ENDPOINT=http://localhost:4566 \
S3_ENDPOINT=http://localhost:4566 \
DB_SECRET_NAME=securetask/db \
JWT_SECRET_NAME=securetask/jwt \
./gradlew :api:bootRunReady when you see: Started SecureTaskApplication
./gradlew :bff:bootRunReady when you see: Tomcat started on port 8081
Register an account — the first user becomes ADMIN.
| Service | URL | Use for |
|---|---|---|
| BFF | http://localhost:8081 | Browser, all lab exercises |
| API | http://localhost:8080 | Direct curl / Postman (JWT Bearer) |
./gradlew :api:test(Docker must be running — tests use Testcontainers for PostgreSQL.)
# Stop Spring Boot apps: Ctrl+C in each terminal# Stop Docker services:
docker compose downIf you see Port 8080 (or 8081) was already in use, a previous run is still alive.
Kill whatever is on those ports:
lsof -ti:8080 | xargs kill -9 2>/dev/null
lsof -ti:8081 | xargs kill -9 2>/dev/nullThen start normally again.