version: '3.8' services: web: build: . ports: - "8000:8000" environment: DATABASE_URL: postgresql+asyncpg://postgres:mysecretpassword@db:5432/fastapi_db command: sh -c "SESSION_SECRET_KEY=$(python -c 'import uuid; print(uuid.uuid4().hex)') uvicorn src.main:app --loop uvloop --workers 4 --host 0.0.0.0 --port 8000" depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000"] interval: 30s timeout: 10s retries: 3 start_period: 10s cleaner: build: context: . dockerfile: Dockerfile.cleaner environment: DATABASE_URL: postgresql+asyncpg://postgres:mysecretpassword@db:5432/fastapi_db depends_on: db: condition: service_healthy db: image: postgres:16-alpine environment: POSTGRES_DB: fastapi_db POSTGRES_USER: postgres POSTGRES_PASSWORD: mysecretpassword command: ["postgres", "-c", "max_connections=1000"] volumes: - db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d fastapi_db"] interval: 5s timeout: 5s retries: 5 volumes: db_data: