name: benevoles services: db: image: postgres:16-alpine environment: POSTGRES_USER: ${POSTGRES_USER:-benevoles} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-benevoles} POSTGRES_DB: ${POSTGRES_DB:-benevoles} ports: - "5432:5432" volumes: - db_data:/var/lib/postgresql/data - ./docker/postgres-init:/docker-entrypoint-initdb.d:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-benevoles}"] interval: 5s timeout: 5s retries: 10 backend: build: ./backend command: uv run uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload environment: DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-benevoles}:${POSTGRES_PASSWORD:-benevoles}@db:5432/${POSTGRES_DB:-benevoles} TEST_DATABASE_URL: postgresql+psycopg://${POSTGRES_USER:-benevoles}:${POSTGRES_PASSWORD:-benevoles}@db:5432/benevoles_test ENVIRONMENT: development JWT_SECRET: ${JWT_SECRET:-dev-only-change-me} TZ: Europe/Paris ports: - "8000:8000" depends_on: db: condition: service_healthy volumes: - ./backend:/app - venv:/app/.venv frontend: build: ./frontend command: npm run dev -- --host --port 5173 environment: # mock = jeu de démonstration en mémoire (défaut, aucun backend requis). # http = API réelle : renseigner aussi VITE_EDITION_ID (UUID d'une édition # existante, p. ex. après `docker compose run --rm backend uv run python -m app.seed`). VITE_API_MODE: ${VITE_API_MODE:-mock} VITE_EDITION_ID: ${VITE_EDITION_ID:-} # Cible du proxy `/api` de Vite à l'intérieur du réseau compose. VITE_API_TARGET: http://backend:8000 ports: - "5173:5173" depends_on: - backend volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules volumes: db_data: venv: frontend_node_modules: