# ============================================================================= # 开发环境编排 (Dev Branch Environment) # 特性: # 1. 独占系统业务库 (5433:5432) 与专属数据卷 # 2. 独占对话记录、工作区及日志目录 (./data/dev) # 3. 共享连接知识库服务 (shuimu-kb-shared:5432) # ============================================================================= name: agent-dev services: system-db: image: pgvector/pgvector:pg16 container_name: shuimu-context-pg-dev command: ["postgres", "-c", "shared_buffers=256MB", "-c", "max_connections=100"] environment: POSTGRES_USER: ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}} POSTGRES_PASSWORD: ${CONTEXT_DB_PASSWORD:-${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}} POSTGRES_DB: ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}} ports: - "127.0.0.1:${CONTEXT_DB_PUBLISH_PORT:-${SYSTEM_DB_PUBLISH_PORT:-5433}}:5432" volumes: - dev-context-pgdata:/var/lib/postgresql/data - ./deploy/postgres/context_init.sql:/docker-entrypoint-initdb.d/01-init.sql:ro healthcheck: test: ["CMD-SHELL", "pg_isready -U ${CONTEXT_DB_USER:-${SYSTEM_DB_USER:-app}} -d ${CONTEXT_DB_NAME:-${SYSTEM_DB_NAME:-agent_system_dev}}"] interval: 5s timeout: 5s retries: 20 restart: unless-stopped networks: - dev-net cursor-agent: image: alpine:latest container_name: shuimu-cursor-agent-dev command: ["sh", "-c", "echo 'Dev Agent Runner is standby' && sleep infinity"] environment: CURSOR_RUNNER_ADDR: ":18765" DATA_DIR: /app/data/workspaces ports: - "127.0.0.1:${CURSOR_RUNNER_PORT:-18765}:18765" volumes: - ./data/dev/workspaces:/app/data/workspaces restart: unless-stopped networks: - dev-net pi-agent: build: context: . dockerfile: deploy/pi-agent/Dockerfile image: shuimu-pi-agent:dev container_name: shuimu-pi-agent-dev environment: PORT: 18865 DATA_DIR: /app/data/workspaces MINIMAX_ENDPOINT_URL: ${MINIMAX_ENDPOINT_URL:-https://api.minimaxi.com/v1} MINIMAX_API_KEY: ${MINIMAX_API_KEY:-} MINIMAX_MODEL_ID: ${MINIMAX_MODEL_ID:-MiniMax-M2.7-highspeed} MINIMAX_API_TYPE: ${MINIMAX_API_TYPE:-openai-compatible} MINIMAX_PROVIDER: minimax TAVILY_API_KEYS: ${TAVILY_API_KEYS:-} RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-} ports: - "127.0.0.1:${PI_AGENT_RUNNER_PORT:-18865}:18865" volumes: - ./data/dev/workspaces:/app/data/workspaces - ./data/dev/agent_sessions:/root/.pi/agent/sessions - ./deploy/pi-agent/runner.mjs:/app/runner.mjs:ro - ./deploy/pi-agent/extensions:/app/extensions:ro tmpfs: - /tmp healthcheck: test: ["CMD-SHELL", "curl -f http://127.0.0.1:18865/health || exit 1"] interval: 10s timeout: 5s retries: 5 restart: unless-stopped networks: - dev-net app: build: context: . dockerfile: deploy/app/Dockerfile container_name: shuimu-agent-app-dev depends_on: system-db: condition: service_healthy environment: ENV: dev HTTP_ADDR: ":${HTTP_PORT:-8080}" HTTP_PORT: "${HTTP_PORT:-8080}" HTTP_HOST: "0.0.0.0" AGENT_BACKEND: ${AGENT_BACKEND:-pi-agent} AGENT_TIMEOUT: ${AGENT_TIMEOUT:-30m} MAX_CONCURRENT_AGENTS: ${MAX_CONCURRENT_AGENTS:-8} DATA_DIR: /app/data # 独占业务与对话库 APP_DB_DSN: postgres://${SYSTEM_DB_USER:-app}:${SYSTEM_DB_PASSWORD:-dev_secret_db_pass}@system-db:5432/${SYSTEM_DB_NAME:-agent_system_dev}?sslmode=disable # 共享知识库 POSTGRES_SHARED_KB_DSN: postgres://${KB_DB_USER:-regkb}:${KB_DB_PASSWORD:?KB_DB_PASSWORD is required}@shuimu-kb-shared:5432/${KB_DB_NAME:-regulations}?sslmode=disable CURSOR_RUNNER_URL: http://cursor-agent:18765 PI_AGENT_RUNNER_URL: http://pi-agent:18865 PI_AGENT_RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-} PI_AGENT_PROVIDER: ${PI_AGENT_PROVIDER:-minimax} PI_AGENT_MODEL: ${PI_AGENT_MODEL:-MiniMax-M2.7-highspeed} RUNNER_AUTH_TOKEN: ${RUNNER_AUTH_TOKEN:-} EMBEDDING_ENDPOINT_URL: ${EMBEDDING_ENDPOINT_URL:-} EMBEDDING_MODEL: ${EMBEDDING_MODEL:-bge-m3} EMBEDDING_API_KEY: ${EMBEDDING_API_KEY:-} RERANKER_ENDPOINT_URL: ${RERANKER_ENDPOINT_URL:-} RERANKER_MODEL: ${RERANKER_MODEL:-bge-reranker-v2-m3-free} RERANKER_API_KEY: ${RERANKER_API_KEY:-} ADMIN_USERNAME: ${ADMIN_USERNAME:-admin} ADMIN_PASSWORD: ${ADMIN_PASSWORD:-admin-secret-password-123} AUTH_REGISTRATION_ENABLED: ${AUTH_REGISTRATION_ENABLED:-true} AUTH_REQUIRE_APPROVAL: ${AUTH_REQUIRE_APPROVAL:-false} CORS_ALLOWED_ORIGINS: ${CORS_ALLOWED_ORIGINS:-} ALLOW_IN_MEMORY: ${ALLOW_IN_MEMORY:-false} CACHE_ENABLED: ${CACHE_ENABLED:-true} INTENT_V2_SHADOW: ${INTENT_V2_SHADOW:-false} INTENT_V2_DECISION: ${INTENT_V2_DECISION:-false} INTENT_V2_DECISION_TIER: ${INTENT_V2_DECISION_TIER:-none} WORKFLOW_INTENTS_ENABLED: ${WORKFLOW_INTENTS_ENABLED:-true} MULTI_INTENT_ENABLED: ${MULTI_INTENT_ENABLED:-true} SEMANTIC_FALLBACK_ENABLED: ${SEMANTIC_FALLBACK_ENABLED:-false} ports: - "${APP_PUBLISH_HOST:-127.0.0.1}:${HTTP_PORT:-8080}:${HTTP_PORT:-8080}" healthcheck: test: ["CMD", "curl", "-fsS", "http://127.0.0.1:${HTTP_PORT:-8080}/api/v1/health"] interval: 10s timeout: 5s retries: 6 start_period: 20s volumes: # 独占对话记录与环境数据 - ./data/dev:/app/data - dev-aux-sqlite-data:/var/lib/feishu - ./.regulations:/app/.regulations:ro restart: unless-stopped networks: - dev-net - shared-net networks: dev-net: name: chat-agent-dev-net driver: bridge shared-net: name: chat-agent-shared-net external: true volumes: dev-context-pgdata: name: agent-dev-context-pgdata dev-aux-sqlite-data: name: agent-dev-aux-sqlite-data