version: '3.8' services: mem0: image: mem0/mem0-api-server:latest container_name: nanobot-mem0 ports: - "0.0.0.0:8000:8000" networks: - default environment: # Use Z.AI (compatible with OpenAI API) - OPENAI_API_KEY=${MEM0_OPENAI_API_KEY:-} - OPENAI_API_BASE=${MEM0_OPENAI_API_BASE:-https://api.z.ai/api/coding/paas/v4/} # Log environment variables for debugging - OPENAI_API_KEY_SET=${MEM0_OPENAI_API_KEY:+true} - OPENAI_API_BASE_SET=${MEM0_OPENAI_API_BASE:+true} volumes: - mem0-data:/data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/docs"] interval: 30s timeout: 10s retries: 5 start_period: 60s deploy: resources: limits: cpus: '1.0' memory: 1G reservations: cpus: '0.25' memory: 256M logging: driver: "json-file" options: max-size: "10m" max-file: "3" nanobot: build: context: . dockerfile: Dockerfile image: nanobot:latest container_name: nanobot # Persist config and workspace across container restarts volumes: - nanobot-config:/root/.nanobot # Expose the gateway port ports: - "${NANOBOT_PORT:-18790}:18790" networks: - default # Environment variables for configuration environment: # LLM Providers (using NANOBOT_PROVIDERS__ prefix) - NANOBOT_PROVIDERS__ZAI__API_KEY=${NANOBOT_PROVIDERS__ZAI__API_KEY:-} - NANOBOT_PROVIDERS__ZAI__API_BASE=${NANOBOT_PROVIDERS__ZAI__API_BASE:-https://api.z.ai/api/coding/paas/v4/} - NANOBOT_PROVIDERS__OPENROUTER__API_KEY=${NANOBOT_PROVIDERS__OPENROUTER__API_KEY:-} - NANOBOT_PROVIDERS__ANTHROPIC__API_KEY=${NANOBOT_PROVIDERS__ANTHROPIC__API_KEY:-} - NANOBOT_PROVIDERS__OPENAI__API_KEY=${NANOBOT_PROVIDERS__OPENAI__API_KEY:-} - NANOBOT_PROVIDERS__GEMINI__API_KEY=${NANOBOT_PROVIDERS__GEMINI__API_KEY:-} - NANOBOT_TOOLS__WEB__SEARCH__API_KEY=${NANOBOT_TOOLS__WEB__SEARCH__API_KEY:-} - MEM0_URL=${MEM0_URL:-http://mem0:8000} - MEM0_API_KEY=${MEM0_API_KEY:-} - NANOBOT_CHANNELS__TELEGRAM__ENABLED=${NANOBOT_CHANNELS__TELEGRAM__ENABLED:-false} - NANOBOT_CHANNELS__TELEGRAM__TOKEN=${NANOBOT_CHANNELS__TELEGRAM__TOKEN:-} - NANOBOT_CHANNELS__TELEGRAM__ALLOW_FROM=${NANOBOT_CHANNELS__TELEGRAM__ALLOW_FROM:-} - NANOBOT_PORT=${NANOBOT_PORT:-18790} - NANOBOT_AGENTS__DEFAULTS__MODEL=${NANOBOT_AGENTS__DEFAULTS__MODEL:-zai/glm-4.7} command: ["gateway"] depends_on: mem0: condition: service_started restart: unless-stopped # Resource limits (adjust based on your needs) deploy: resources: limits: cpus: '2.0' memory: 2G reservations: cpus: '0.5' memory: 512M # Health check healthcheck: test: ["CMD", "nanobot", "status"] interval: 30s timeout: 10s retries: 3 start_period: 40s # Logging configuration logging: driver: "json-file" options: max-size: "10m" max-file: "3" volumes: nanobot-config: driver: local name: nanobot-config mem0-data: driver: local name: nanobot-mem0-data networks: default: name: nanobot-network driver: bridge