name: crm-ai-demo # 共享基础设施:postgres(带 pgvector) + redis # 应用层(Chatwoot / Twenty)用开源源码跑,不在此 compose 内。 # # 分库: # chatwoot — Chatwoot 业务数据(vector 扩展) # twenty — Twenty CRM 数据 # products — Bridge 客服知识库 kb_docs(vector 扩展) # Redis 分 db:chatwoot=db0, twenty=db1 # # 端口均暴露到宿主,供本地源码应用 / docker 内应用经 host.docker.internal 连接。 services: postgres: image: pgvector/pgvector:pg18 container_name: crm-postgres restart: always deploy: resources: limits: cpus: '0.5' memory: 512M ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_DB: postgres volumes: - pg-data:/var/lib/postgresql - ./infra/init-db.sh:/docker-entrypoint-initdb.d/init-db.sh:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 5s timeout: 5s retries: 10 redis: image: redis:8.8-alpine container_name: crm-redis restart: always deploy: resources: limits: cpus: '0.3' memory: 256M ports: - "6379:6379" volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 10 # Chatwoot → LLM → Twenty CRM 销售桥接(源码 Docker 构建) # 连同 compose 内的 postgres 共享网络;Chatwoot/Twenty 为独立 compose,经 host.docker.internal 访问。 bridge: build: ./bridge container_name: crm-bridge restart: always depends_on: postgres: condition: service_healthy deploy: resources: limits: cpus: '0.5' memory: 512M ports: - "4000:4000" environment: PORT: "4000" # 同 compose 网络,用容器名连 postgres(products 库存放客服知识库 kb_docs) PG_URL: "postgres://postgres:postgres@crm-postgres:5432/products" # Chatwoot / Twenty 为独立 compose,端口映射到宿主,容器经 host-gateway 访问 CW_BASE_URL: "http://crm-chatwoot-rails:3000" TWENTY_BASE_URL: "http://crm-twenty-server:3000" # AgentBot secret(HMAC 签名校验),由 register_agent_bot.js 生成 AGENT_BOT_SECRET: "REPLACE_WITH_AGENT_BOT_SECRET" # 本地开发跳过 HMAC 签名校验(容器间网络安全,Sidekiq body 编码存在差异) SKIP_AGENT_BOT_SIGNATURE: "true" # 业务数据 API(Mock 服务器,宿主 localhost:9505) INVENTORY_API_URL: "http://host.docker.internal:9505" ORDER_API_URL: "http://host.docker.internal:9505" extra_hosts: - "host.docker.internal:host-gateway" # 挂载源码与配置:改 server.js / *.config.json 后 docker restart crm-bridge 即可,无需 rebuild volumes: - ./bridge/server.js:/app/server.js:ro - ./bridge/index_kb.js:/app/index_kb.js:ro - ./bridge/register_agent_bot.js:/app/register_agent_bot.js:ro - ./bridge/chatwoot.config.json:/app/chatwoot.config.json:ro - ./bridge/llm.config.json:/app/llm.config.json:ro - ./bridge/twenty.config.json:/app/twenty.config.json:ro - ./bridge/kb.config.json:/app/kb.config.json:ro volumes: pg-data: redis-data: