name: ${COMPOSE_PROJECT_NAME:-hermes}-dev services: backend: build: context: . target: development working_dir: /workspace/backend command: [ "sh", "-c", "alembic upgrade head && exec uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --no-proxy-headers", ] environment: HERMES_APP_ENV: development HERMES_DATABASE_HOST: postgres HERMES_DATABASE_PORT: 5432 HERMES_DATABASE_NAME: ${POSTGRES_DB:-hermes} HERMES_DATABASE_USER: ${POSTGRES_USER:-hermes} HERMES_DATABASE_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} HERMES_DATABASE_ECHO: ${HERMES_DATABASE_ECHO:-false} HERMES_COOKIE_SECURE: "false" HERMES_SESSION_LIFETIME_DAYS: ${HERMES_SESSION_LIFETIME_DAYS:-7} HERMES_SESSION_IDLE_MINUTES: ${HERMES_SESSION_IDLE_MINUTES:-30} HERMES_LOGIN_FAILURE_LIMIT: ${HERMES_LOGIN_FAILURE_LIMIT:-5} HERMES_LOGIN_FAILURE_WINDOW_MINUTES: ${HERMES_LOGIN_FAILURE_WINDOW_MINUTES:-15} HERMES_LOGIN_BLOCK_MINUTES: ${HERMES_LOGIN_BLOCK_MINUTES:-15} HERMES_LOGIN_ADMISSION_INTERVAL_MS: ${HERMES_LOGIN_ADMISSION_INTERVAL_MS:-250} HERMES_TRUSTED_PROXY_NETWORKS: ${HERMES_TRUSTED_PROXY_NETWORKS:-[]} volumes: - ./backend:/workspace/backend ports: - "127.0.0.1:${BACKEND_PORT:-8000}:8000" depends_on: postgres: condition: service_healthy healthcheck: test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/v1/health', timeout=2)", ] interval: 10s timeout: 3s retries: 5 start_period: 15s frontend: image: node:22.23.1-alpine working_dir: /workspace/frontend command: ["sh", "-c", "npm ci && npm start -- --host 0.0.0.0"] environment: HERMES_PROXY_TARGET: http://backend:8000 volumes: - ./frontend:/workspace/frontend - frontend_node_modules:/workspace/frontend/node_modules ports: - "127.0.0.1:${FRONTEND_PORT:-4200}:4200" depends_on: backend: condition: service_healthy healthcheck: test: [ "CMD", "node", "-e", "fetch('http://localhost:4200').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))", ] interval: 10s timeout: 3s retries: 10 start_period: 30s postgres: image: postgres:17-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-hermes} POSTGRES_USER: ${POSTGRES_USER:-hermes} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?Set POSTGRES_PASSWORD in .env} volumes: - postgres_dev_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 5s timeout: 3s retries: 10 start_period: 10s volumes: frontend_node_modules: postgres_dev_data: