{"repo": "bobo070314/igp-infrastructure", "files": {"docker/docker-compose.yml": {"660099d122ad51345a1e3464f5510a4e6509a818": {"t": 1785746992.6153007, "n": 5124, "h": "4d355ce843b50109", "c": "# IGP 国际集团 — Docker Compose 部署方案\n#\n# 对标:OpenClaw \"一台Ubuntu + Docker长期运行\"\n# 方案:docker-compose.yml + .env + 生产级安全加固\n#\n# 服务构成:\n# openclaw-gateway → 主 Gateway(端口 18791,国际版)\n# igp-api → IGP HTTP API + 硅胶体记忆(端口 8080)\n# cloudflared → Cloudflare Tunnel(可选,见 cloudflare/)\n# postgres → 记忆持久化(可选,生产环境)\n# metamcp → MCP 聚合代理(可选,见 metamcp/)\n#\n# 使用方式:\n# docker compose up -d # 启动全部服务\n# docker compose exec openclaw-gateway openclaw onboard # 首次配置\n# docker compose logs -f # 查看日志\n# docker compose down # 停止\n\nversion: \"3.8\"\n\nx-logging: &default-logging\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nservices:\n # ====================================================================\n # 1. 主 Gateway — 集团总部神经中枢\n # ====================================================================\n openclaw-gateway:\n image: openclaw/openclaw:latest\n container_name: igp-gateway\n restart: unless-stopped\n # 生产建议:固定 tag,不要用 latest\n # image: openclaw/openclaw:2026.7.1\n ports:\n # 只绑定 127.0.0.1,不暴露公网\n - \"127.0.0.1:18791:18789\"\n environment:\n - NODE_ENV=production\n # Gateway Token — 来自 .env\n - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN:?err}\n # 模型 API Key\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?err}\n # 可选 fallback\n # - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}\n # - OPENAI_API_KEY=${OPENAI_API_KEY:-}\n volumes:\n # 状态持久化 — 指向宿主机 data 目录\n - ./data/gateway:/home/node/.openclaw\n # 配置文件\n - ./config/openclaw.json:/app/openclaw.json:ro\n # 工作区\n - ./workspace:/workspace\n shm_size: \"1gb\"\n mem_limit: \"4g\"\n mem_reservation: \"2g\"\n cpus: \"2.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD\", \"node\", \"openclaw.mjs\", \"gateway\", \"--version\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 60s\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n cap_add:\n - NET_BIND_SERVICE\n user: \"node:node\"\n\n # ====================================================================\n # 2. IGP API — 自研 HTTP API + 硅胶体记忆\n # ====================================================================\n igp-api:\n build:\n context: .\n dockerfile: Dockerfile.igp-api\n container_name: igp-api\n restart: unless-stopped\n ports:\n - \"127.0.0.1:8080:8080\"\n environment:\n - PYTHONUNBUFFERED=1\n - PYTHONIOENCODING=utf-8\n volumes:\n - ./data/igp:/app/data\n # 映射 IGP 代码\n - ../../family-corp-teams/v5/v6:/app/v6:ro\n mem_limit: \"1g\"\n mem_reservation: \"512m\"\n cpus: \"1.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://localhost:8080/health')\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n depends_on:\n openclaw-gateway:\n condition: service_healthy\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n user: \"node:node\"\n\n # ====================================================================\n # 3. Cloudflare Tunnel — 园区围墙(可选)\n # 启用方式: 设置 CF_TUNNEL_TOKEN 环境变量\n # ====================================================================\n cloudflared:\n image: cloudflare/cloudflared:latest\n container_name: igp-cloudflared\n restart: unless-stopped\n command: tunnel --no-autoupdate run\n environment:\n - TUNNEL_TOKEN=${CF_TUNNEL_TOKEN:-}\n profiles:\n - tunnel\n mem_limit: \"128m\"\n cpus: \"0.25\"\n logging: *default-logging\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n\n # ====================================================================\n # 4. PostgreSQL — 生产级持久化(可选)\n # ====================================================================\n postgres:\n image: postgres:16-alpine\n container_name: igp-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: ${PG_USER:-igp}\n POSTGRES_PASSWORD: ${PG_PASSWORD:?err}\n POSTGRES_DB: ${PG_DB:-igp_memory}\n volumes:\n - ./data/postgres:/var/lib/postgresql/data\n profiles:\n - prod\n mem_limit: \"512m\"\n cpus: \"1.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U ${PG_USER:-igp}\"]\n interval: 10s\n timeout: 5s\n retries: 5\n\n # ====================================================================\n # 5. MetaMCP — MCP 聚合代理(可选)\n # ====================================================================\n metamcp:\n image: metamcp/metamcp:latest\n container_name: igp-metamcp\n restart: unless-stopped\n ports:\n - \"127.0.0.1:12008:12008\"\n environment:\n - MCP_ENDPOINT=http://igp-api:8080/mcp\n profiles:\n - full\n mem_limit: \"256m\"\n cpus: \"0.5\"\n logging: *default-logging\n depends_on:\n igp-api:\n condition: service_healthy\n\nvolumes:\n gateway-state:\n igp-data:\n pg-data:\n\nnetworks:\n default:\n driver: bridge\n ipam:\n config:\n - subnet: 172.20.0.0/16\n"}, "13cc751354c0f383bdd9f6ead46f78b1119546e8": {"t": 1785769578.7305145, "n": 5124, "h": "4d355ce843b50109", "c": "# IGP 国际集团 — Docker Compose 部署方案\n#\n# 对标:OpenClaw \"一台Ubuntu + Docker长期运行\"\n# 方案:docker-compose.yml + .env + 生产级安全加固\n#\n# 服务构成:\n# openclaw-gateway → 主 Gateway(端口 18791,国际版)\n# igp-api → IGP HTTP API + 硅胶体记忆(端口 8080)\n# cloudflared → Cloudflare Tunnel(可选,见 cloudflare/)\n# postgres → 记忆持久化(可选,生产环境)\n# metamcp → MCP 聚合代理(可选,见 metamcp/)\n#\n# 使用方式:\n# docker compose up -d # 启动全部服务\n# docker compose exec openclaw-gateway openclaw onboard # 首次配置\n# docker compose logs -f # 查看日志\n# docker compose down # 停止\n\nversion: \"3.8\"\n\nx-logging: &default-logging\n driver: \"json-file\"\n options:\n max-size: \"10m\"\n max-file: \"3\"\n\nservices:\n # ====================================================================\n # 1. 主 Gateway — 集团总部神经中枢\n # ====================================================================\n openclaw-gateway:\n image: openclaw/openclaw:latest\n container_name: igp-gateway\n restart: unless-stopped\n # 生产建议:固定 tag,不要用 latest\n # image: openclaw/openclaw:2026.7.1\n ports:\n # 只绑定 127.0.0.1,不暴露公网\n - \"127.0.0.1:18791:18789\"\n environment:\n - NODE_ENV=production\n # Gateway Token — 来自 .env\n - OPENCLAW_GATEWAY_TOKEN=${OPENCLAW_GATEWAY_TOKEN:?err}\n # 模型 API Key\n - DEEPSEEK_API_KEY=${DEEPSEEK_API_KEY:?err}\n # 可选 fallback\n # - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}\n # - OPENAI_API_KEY=${OPENAI_API_KEY:-}\n volumes:\n # 状态持久化 — 指向宿主机 data 目录\n - ./data/gateway:/home/node/.openclaw\n # 配置文件\n - ./config/openclaw.json:/app/openclaw.json:ro\n # 工作区\n - ./workspace:/workspace\n shm_size: \"1gb\"\n mem_limit: \"4g\"\n mem_reservation: \"2g\"\n cpus: \"2.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD\", \"node\", \"openclaw.mjs\", \"gateway\", \"--version\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 60s\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n cap_add:\n - NET_BIND_SERVICE\n user: \"node:node\"\n\n # ====================================================================\n # 2. IGP API — 自研 HTTP API + 硅胶体记忆\n # ====================================================================\n igp-api:\n build:\n context: .\n dockerfile: Dockerfile.igp-api\n container_name: igp-api\n restart: unless-stopped\n ports:\n - \"127.0.0.1:8080:8080\"\n environment:\n - PYTHONUNBUFFERED=1\n - PYTHONIOENCODING=utf-8\n volumes:\n - ./data/igp:/app/data\n # 映射 IGP 代码\n - ../../family-corp-teams/v5/v6:/app/v6:ro\n mem_limit: \"1g\"\n mem_reservation: \"512m\"\n cpus: \"1.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD\", \"python\", \"-c\", \"import urllib.request; urllib.request.urlopen('http://localhost:8080/health')\"]\n interval: 30s\n timeout: 10s\n retries: 3\n start_period: 30s\n depends_on:\n openclaw-gateway:\n condition: service_healthy\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n user: \"node:node\"\n\n # ====================================================================\n # 3. Cloudflare Tunnel — 园区围墙(可选)\n # 启用方式: 设置 CF_TUNNEL_TOKEN 环境变量\n # ====================================================================\n cloudflared:\n image: cloudflare/cloudflared:latest\n container_name: igp-cloudflared\n restart: unless-stopped\n command: tunnel --no-autoupdate run\n environment:\n - TUNNEL_TOKEN=${CF_TUNNEL_TOKEN:-}\n profiles:\n - tunnel\n mem_limit: \"128m\"\n cpus: \"0.25\"\n logging: *default-logging\n security_opt:\n - no-new-privileges:true\n cap_drop:\n - ALL\n\n # ====================================================================\n # 4. PostgreSQL — 生产级持久化(可选)\n # ====================================================================\n postgres:\n image: postgres:16-alpine\n container_name: igp-postgres\n restart: unless-stopped\n environment:\n POSTGRES_USER: ${PG_USER:-igp}\n POSTGRES_PASSWORD: ${PG_PASSWORD:?err}\n POSTGRES_DB: ${PG_DB:-igp_memory}\n volumes:\n - ./data/postgres:/var/lib/postgresql/data\n profiles:\n - prod\n mem_limit: \"512m\"\n cpus: \"1.0\"\n logging: *default-logging\n healthcheck:\n test: [\"CMD-SHELL\", \"pg_isready -U ${PG_USER:-igp}\"]\n interval: 10s\n timeout: 5s\n retries: 5\n\n # ====================================================================\n # 5. MetaMCP — MCP 聚合代理(可选)\n # ====================================================================\n metamcp:\n image: metamcp/metamcp:latest\n container_name: igp-metamcp\n restart: unless-stopped\n ports:\n - \"127.0.0.1:12008:12008\"\n environment:\n - MCP_ENDPOINT=http://igp-api:8080/mcp\n profiles:\n - full\n mem_limit: \"256m\"\n cpus: \"0.5\"\n logging: *default-logging\n depends_on:\n igp-api:\n condition: service_healthy\n\nvolumes:\n gateway-state:\n igp-data:\n pg-data:\n\nnetworks:\n default:\n driver: bridge\n ipam:\n config:\n - subnet: 172.20.0.0/16\n"}}}}