# Production environment - resource limits, logging, restart policy services: grist-mcp: image: ghcr.io/xe138/grist-mcp-server:latest ports: - "${PORT:-3000}:3000" volumes: - ./config.yaml:/app/config.yaml:ro environment: - CONFIG_PATH=/app/config.yaml - EXTERNAL_PORT=${PORT:-3000} restart: unless-stopped deploy: resources: limits: memory: 512M cpus: "1" reservations: memory: 128M logging: driver: "json-file" options: max-size: "50m" max-file: "5" healthcheck: test: ["CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:3000/health')"] interval: 30s timeout: 10s retries: 3 start_period: 60s