# Adds the development container to the stack defined in ../compose.yaml. # Merged by devcontainer.json; not useful on its own. services: app: build: context: .. dockerfile: .devcontainer/Dockerfile command: sleep infinity ports: - "8000:8000" volumes: - ..:/workspaces/v2x-server:cached # Keep the Linux venv out of the macOS/Windows bind mount. Without this, # host-side tooling and platform-specific wheels collide. - venv:/workspaces/v2x-server/.venv environment: APP_ENV: local DEBUG: "true" DATABASE_URL: mysql+asyncmy://v2x:v2xpassword@mysql:3306/v2x?charset=utf8mb4 TEST_DATABASE_URL: mysql+asyncmy://v2x:v2xpassword@mysql:3306/v2x_test?charset=utf8mb4 # Validated against the `iss` claim -- must match the URL the browser used # to obtain the token, not the one this container dials. KEYCLOAK_ISSUER: http://localhost:8080/realms/v2x # Where this container actually reaches Keycloak for discovery + JWKS. # KC_HOSTNAME_BACKCHANNEL_DYNAMIC makes discovery hand back a jwks_uri on # this same host, so the fetch stays on the compose network. KEYCLOAK_INTERNAL_URL: http://keycloak:8080 KEYCLOAK_REALM: v2x KEYCLOAK_AUDIENCE: v2x-api KEYCLOAK_SWAGGER_CLIENT_ID: v2x-swagger CORS_ORIGINS: '["http://localhost:3000","http://localhost:8000"]' depends_on: # Migrations need a live database, so wait for MySQL properly. mysql: condition: service_healthy # Keycloak is only contacted lazily, on the first token validation. Not # blocking on its health keeps a slow or failed realm import from # preventing the devcontainer from opening at all. keycloak: condition: service_started volumes: venv: