version: '3.8' services: db: image: pgvector/pgvector:pg16 hostname: gmail-mcp-db restart: unless-stopped environment: POSTGRES_DB: gmail_mcp POSTGRES_USER: gmail_mcp POSTGRES_PASSWORD: gmail_mcp ports: - "5433:5432" volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U gmail_mcp"] interval: 5s timeout: 5s retries: 5 app: build: . restart: unless-stopped ports: - "3847:3847" environment: DATABASE_URL: postgresql://gmail_mcp:gmail_mcp@gmail-mcp-db:5432/gmail_mcp PORT: "3847" BASE_URL: "${BASE_URL:-http://localhost:3847}" GOOGLE_CLIENT_ID: "${GOOGLE_CLIENT_ID}" GOOGLE_CLIENT_SECRET: "${GOOGLE_CLIENT_SECRET}" ANTHROPIC_API_KEY: "${ANTHROPIC_API_KEY}" PERSONAL_TOKEN: "${PERSONAL_TOKEN}" PERSONAL_EMAIL: "${PERSONAL_EMAIL}" EMBEDDING_PROVIDER: "${EMBEDDING_PROVIDER:-transformers}" OLLAMA_URL: "${OLLAMA_URL:-http://host.docker.internal:11434}" OLLAMA_EMBED_MODEL: "${OLLAMA_EMBED_MODEL:-nomic-embed-text}" OLLAMA_LLM_MODEL: "${OLLAMA_LLM_MODEL:-qwen3.5:latest}" extra_hosts: - "host.docker.internal:host-gateway" depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "node", "-e", "fetch('http://localhost:3847/health').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))"] interval: 60s timeout: 10s retries: 3 start_period: 60s volumes: - model_cache:/root/.cache volumes: pgdata: model_cache: