services: db: image: postgres:16 restart: always environment: POSTGRES_DB: litellm POSTGRES_USER: llmproxy POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -d litellm -U llmproxy"] interval: 1s timeout: 5s retries: 10 litellm: image: ghcr.io/cabinlab/litellm-claude-code:latest ports: - "4000:4000" # REQUIRED: Set LITELLM_MASTER_KEY environment variable # See docs/SECURITY.md for details volumes: # Mount config for easy model updates - ./config:/app/config:ro # Mount provider code for development - ./providers:/app/providers:ro # Docker volume for persistent Claude CLI authentication # The CLI stores OAuth tokens in ~/.claude/.credentials.json # This volume persists across container restarts - claude-auth:/home/claude/.claude env_file: - .env depends_on: db: condition: service_healthy restart: unless-stopped volumes: postgres_data: claude-auth: