- source-repos-internal/octo-deployment/docker/docker-compose.yaml
- source-repos-internal/octo-deployment/docker/nginx/conf.d/octo.conf.template
- source-repos-internal/octo-deployment/docker/nginx/conf.d/octo-shared.inc.template
- source-repos-internal/octo-deployment/docker/nginx/web/default.conf.template
- source-repos-internal/octo-deployment/docker/scripts/init-extra-dbs.sh
- source-repos-internal/octo-deployment/helm/octo/values.yaml
OCTO全组件服务清单
本文档从内部部署仓库(docker-compose.yaml + helm values.yaml + nginx配置)提取所有服务的硬事实。
功能描述基于服务名、端口、环境变量和路由配置推断,不确定处标注"待产品管家确认"。
数据源版本:docker-compose.yaml注释标记OOTB镜像(server:latest, web:latest, wukongim v2.2.4-20260313, mysql 8.0, redis 7-alpine, minio RELEASE.2025-04-22, docs-backend 0.8.0, docs-html v0.4.0, drive v0.5.0, doc-indexer v1.1.0, drive-indexer v0.1.0, tika 3.3.0.0, kafka 3.8.0, opensearch 2.17.0, postgres 16-alpine, fleet:latest, marketplace:latest, summary-api/worker:latest, speech/admin:latest)。
一、服务分组总览
| 分组 |
服务数量 |
开源已有 |
Profile开关 |
| 核心IM基础设施 |
5+3个init |
✅ |
默认启动(无profile) |
| Web前端/管理台 |
3 |
✅(web/admin) |
默认启动 |
| 智能摘要(Summary) |
2 |
❌内部独有 |
summary |
| 语音(Speech) |
2 |
❌内部独有 |
speech |
| 文档协同(Docs) |
2(+1preflight) |
❌内部独有 |
docs |
| 文档HTML渲染 |
2(+preflight+migrate) |
❌内部独有 |
docs-html(依赖docs) |
| 网盘(Drive) |
1(+config+preflight+migrate) |
❌内部独有 |
drive |
| 市场(Marketplace) |
1(+preflight) |
❌内部独有 |
默认启动(无profile) |
| 回路/多卡(Fleet) |
2(+preflight) |
❌内部独有 |
fleet(+fleet-db用内置PG) |
| 消息搜索(Search) |
4+init/ensure+工具 |
❌内部独有 |
search/search-producer/search-tools |
| 文档索引(Doc-Index) |
1+init/ensure |
❌内部独有 |
doc-index(依赖docs+search) |
| 网盘索引(Drive-Index) |
2+init/ensure |
❌内部独有 |
drive-index(依赖drive+search) |
| BotFather |
1(one-shot) |
✅ |
默认启动 |
| 合计 |
约40个容器(含init) |
8个核心 |
多个opt-in profile |
二、核心IM基础设施(开源已有,默认启动)
2.1 mysql
| 项目 |
值 |
| 镜像 |
mysql:8.0 |
| 容器端口 |
3306 |
| 宿主机端口 |
127.0.0.1:23306(loopback默认) |
| 存储卷 |
mysql-data → /var/lib/mysql |
| 依赖 |
无(启动最早) |
| 字符集 |
utf8mb4 / utf8mb4_general_ci |
| 初始化脚本 |
scripts/init-extra-dbs.sh(创建octo_summary/octo_speech/octo_docs/octo_marketplace+对应用户) |
| 功能 |
OCTO主关系型数据库,存储用户/消息/群组/Thread/Bot等核心IM业务数据;同时为summary/speech/docs/marketplace提供独立schema |
2.2 redis
| 项目 |
值 |
| 镜像 |
redis:7-alpine |
| 容器端口 |
6379 |
| 宿主机端口 |
127.0.0.1:26379(loopback默认) |
| 存储卷 |
redis-data → /data |
| 功能 |
缓存/会话/bot_task事件队列/分布式锁/搜索ETL游标锁 |
2.3 minio
| 项目 |
值 |
| 镜像 |
minio/minio:RELEASE.2025-04-22T22-12-26Z(pin版) |
| 容器端口 |
9000(API), 9001(Console) |
| 宿主机端口 |
127.0.0.1:29000(API), 127.0.0.1:29001(Console) |
| 存储卷 |
minio-data → /data |
| 功能 |
S3兼容对象存储,存放消息附件/头像/贴纸/文档/网盘/市场资源等所有文件;Console仅通过SSH隧道本地访问 |
2.4 wukongim
| 项目 |
值 |
| 镜像 |
wukongim/wukongim:v2.2.4-20260313(pin版) |
| 容器端口 |
5001(manager API), 5100(TCP长连接), 5200(WebSocket), 5300(monitor) |
| 宿主机端口 |
127.0.0.1:25001/25100/25200/25300(全部loopback默认) |
| 存储卷 |
wukongim-data → /root/wukongim |
| 配置 |
./configs/wk.yaml挂载,tokenAuthOn: true |
| 功能 |
即时消息核心长连接服务;客户端WS/TCP直连(经nginx /ws反代WS:5200);gRPC webhook回调octo-server:6979;manager API token鉴权 |
2.5 octo-server
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-server:latest |
| 容器端口 |
8090(REST API), 6979(gRPC webhook接收) |
| 宿主机端口 |
127.0.0.1:28081(REST直连,loopback默认) |
| 存储卷 |
./configs/octo-server.yaml→/home/configs/tsdd.yaml; server-logs→/home/logs |
| 依赖 |
mysql/redis/minio/wukongim/minio-init/preflight/search-producer-guard |
| 核心环境变量 |
TS_DB_MYSQLADDR, TS_DB_REDISADDR, TS_WUKONGIM_MANAGERTOKEN, TS_MINIO_*, OCTO_MASTER_KEY, NOTIFY_INTERNAL_TOKEN, TS_EXTERNAL_BASEURL, OCTO_SEARCH_BACKEND(disabled/es/zinc), SPEECH_SERVICE_URL, TS_KAFKA_ON/OFF/topic |
| 启动命令 |
["api"] |
| 功能 |
OCTO核心业务服务端:用户/群组/Thread/消息/Bot API/文件上传presigned URL/OIDC SSO/卡片消息/BotFather管理/webhook回调等所有IM业务逻辑;内置可选搜索producer(写入Kafka)和语音转写代理 |
2.6 nginx(Gateway层)
| 项目 |
值 |
| 镜像 |
nginx:1.27-alpine |
| 容器端口 |
80(HTTP), 443(HTTPS) |
| 宿主机端口 |
0.0.0.0:28080(HTTP), 28443(HTTPS) |
| 存储卷 |
nginx-logs→/var/log/nginx; certs; 配置模板 |
| 功能 |
薄入口网关:TLS终结、/ws→wukongim、/admin/→admin、/docs-collab→docs-backend WS、/docs-html/→docs-html、MinIO bucket路径直反代、/→web(厚路由层) |
2.7 minio-init(一次性)
| 项目 |
值 |
| 镜像 |
minio/mc:RELEASE.2025-04-16T18-13-26Z |
| 功能 |
创建octo-appIAM用户+策略、预创建13个MinIO bucket(file/chat/moment/sticker/report/chatbg/common/download/group/avatar/octo-docs-attachments/marketplace/octo-drive)、设置chat/file/moment/sticker/chatbg/common/avatar匿名download策略 |
2.8 preflight(一次性)
| 项目 |
值 |
| 镜像 |
busybox:1.36 |
| 功能 |
启动前检查OCTO_NOTIFY_INTERNAL_TOKEN和OCTO_WUKONGIM_MANAGER_TOKEN不为空/不是CHANGE_ME占位符,防止弱口令上线 |
2.9 botfather-robot(一次性)
| 项目 |
值 |
| 镜像 |
mysql:8.0 |
| 功能 |
首启动后设置MySQL中user.uid='botfather'的robot=1,启用BotFather slash命令注册;幂等 |
三、Web前端与管理台(默认启动)
3.1 web(octo-web)
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-web:latest |
| 容器端口 |
80(内置nginx) |
| 宿主机端口 |
127.0.0.1:28083(loopback默认,经网关80/443对外) |
| 依赖 |
octo-server(healthy) |
| 功能 |
Web SPA前端 + 厚应用路由nginx层:所有应用层API路由(/api/→server, /v1/→server, /summary/api/→summary-api, /market/api/→marketplace, /fleet/api/→fleet, /v1/drive/→drive, /api/v1/docs/→docs-backend, /docs-api/→docs-backend, /speech-admin/→speech-admin)+ SPA try_files fallback |
3.2 admin(octo-admin)
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-admin:latest |
| 容器端口 |
80 |
| 宿主机端口 |
127.0.0.1:28082(loopback默认) |
| 依赖 |
octo-server(healthy) |
| 环境 |
API_BACKEND=octo-server:8090 |
| 路由 |
nginx /admin/ 反代;/space重定向到/admin/space |
| 功能 |
OCTO管理后台(待产品管家确认:Space管理/用户管理/Bot管理等管理员功能) |
四、市场/技能市场(marketplace,默认启动,无profile)
4.1 marketplace
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-marketplace:latest |
| 容器端口 |
8092 |
| Profile |
默认启动(helm values.yaml: marketplace.enabled=false待确认,docker-compose无profile gating) |
| 依赖 |
mysql/redis/minio-init/octo-server/market-preflight |
| 数据库 |
MySQL octo_marketplace,用户marketplace |
| 对象存储 |
MinIO bucket marketplace |
| 路由 |
/market/api/ rewrite→:8092/api/;/market/healthz→:8092/healthz |
| 核心环境变量 |
MYSQL_DSN, AUTH_ENABLED=true, OCTO_API_URL, STORAGE_DRIVER=oss(MinIO), MAX_UPLOAD_MB=20 |
| 功能(产品管家确认) |
技能/插件市场服务:核心是技能包+专家(Expert)+专家团(Expert Team)+插件(Plugin)的分发市场(非Bot市场、非纯MCP目录)。两个产品承载面:Web「回路」→「专家市场」(v2026.08.17+,浏览专家/专家团/技能包,展示使用量/安装量)和Web「插件市场」(v2026.09.14,插件评分/Space管理员自动审核)。MCP以「连接器」形态在应用市场出现。安装技能包=给专家分配/写入技能包+安装策略(自动去重/失败重试,v2026.08.24),安装后在回路工作区给专家使用,不创建Bot实例。平台发布标「官方发布」。重要:Bot与Marketplace独立——Bot通过BotFather管理,Marketplace不分发Bot实例;专家(Expert,跑在runtime/daemon上)≠User Bot(BotFather创建)。OctoPush客户端有独立"龙虾专家市场"。付费/私有市场/开发者上架权限/Template/Agent独立上架类型/自建Skill发布链路——6项待源码验证。 |
4.2 market-preflight(一次性)
| 项目 |
值 |
| 功能 |
幂等创建octo_marketplace数据库和marketplace用户(对已有MySQL卷升级场景) |
五、智能摘要(summary,profile: summary)
5.1 summary-api
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-smart-summary-api:latest |
| 容器端口 |
8080(外部API), 8081(内部回调) |
| Profile |
summary |
| 宿主机端口 |
127.0.0.1:28087 |
| 数据库 |
MySQL octo_summary(summary用户RW);MySQL主库octo(summary_reader用户只读) |
| 依赖 |
mysql/preflight |
| 路由 |
/summary/api/v1/ rewrite→:8080/api/v1/;SSE流/summary/api/v1/agent/chat/stream单独配proxy_buffering off/长超时 |
| 核心环境变量 |
MYSQL_DSN, IM_MYSQL_DSN, OCTO_API_URL, LLM_API_URL/KEY/MODEL(默认claude-sonnet-4-6), NOTIFY_INTERNAL_TOKEN, WORKER_TRIGGER_URL |
| 功能(产品管家确认) |
消息/会话智能总结API服务(非通用AI对话代理,与AI速览是不同功能)。前端packages/dmworksummary,独立后端/summary/api/v1/。职责:接前端请求、SSE流式返回总结生成过程(/summary/api/v1/agent/chat/stream为总结生成SSE流,非AI对话)、总结CRUD。2026-07-06起用map-reduce流程+意图识别处理长会话。支持手动(Web左侧「智能总结」/✨一键总结上限30条/iOS/Android底部「上下文」)、定时(日/周/月周期,v2026.06.13)、Agent驱动(PR#850)三种触发方式。模式BY_GROUP(按群)/BY_PERSON(按人),时间范围24h/7d/30d/自上次以来。iOS群聊总结生成后自动发群提醒(v1.0.5+)。全端支持(Web最全)。summary profile默认开关/独立LLM Key/结果存表/api-worker精确职责边界(SSE是否走agent)——SU-待源码验证(P1)。LLM_MODEL默认claude-sonnet-4-6(配置可见可信)。注意区分「AI速览」(v2026.09.14上线,可速览+一键转文档,是不同功能)。 |
5.2 summary-worker
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-smart-summary-worker:latest |
| 容器端口 |
8082(内部healthz+trigger) |
| Profile |
summary |
| 数据库 |
同summary-api |
| 核心环境变量 |
MESSAGE_FETCH_BACKEND=mysql(直接读IM数据库,不依赖搜索服务), LLM_API_KEY(可占位启动) |
| 功能(产品管家确认) |
智能摘要异步Worker(:8082/internal/healthz+worker-trigger)。职责:跑定时总结任务(按日/周/月周期异步生成),通过NOTIFY_INTERNAL_TOKEN(HMAC)回调summary-api:8081/internal/task-event。MESSAGE_FETCH_BACKEND=mysql(直接读IM MySQL,不依赖搜索服务)。LLM_API_KEY可占位启动(实际摘要时才调LLM失败)。api/worker精确职责划分(谁调LLM、map-reduce分工)——SU-待源码验证(P1)。 |
六、语音(speech,profile: speech)
6.1 octo-speech
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-speech:latest |
| 容器端口 |
8780 |
| Profile |
speech |
| 数据库 |
MySQL octo_speech,用户speech(密码SPEECH_DB_PASSWORD可选) |
| 核心环境变量 |
SPEECH_DB_DSN, VOICE_ENGINE(默认qwen通义千问), VOICE_QWEN_URL/KEY/MODELS, VOICE_MAX_DURATION=60s, VOICE_MAX_FILE_SIZE=3MB |
| 路由 |
octo-server /api/v1/voice/transcribe→SPEECH_SERVICE_URL=http://octo-speech:8780 |
| 功能(产品管家确认) |
语音转写(ASR)服务(octo-server /api/v1/voice/transcribe代理到此),核心是ASR双链路:①语音消息自动转写(收语音消息自动转文字,@mention识别/口语化书面语优化/情感emoji标注,结果对消息可见者可见)②语音输入(用户主动录音转文本填输入框,支持插入模式和编辑替换模式⚠️仅Web)。4种转写引擎:Gemini(默认gemini-3.x-pro/flash)/GPT(gpt-4o-mini-transcribe,仅append_only)/Qwen(qwen3.5-omni-plus)/本地(localhost:8787,前端优先尝试失败fallback云端)。降级链:本地→后端API→后端模型列表依次fallback。限制60s/3MB/最短1s。支持语音纠错上下文API(用户/Bot侧PUT/GET/DELETE /v1/voice/context和/v1/bot/voice/context)。无TTS代码证据、无实时流式转写证据、speech-admin:8781功能全无证据、SPEECH_API_KEY确切语义(内部鉴权vs外部key)无确证——均标SP-待源码验证(P1)。Whisper/Azure/讯飞未见代码记录。VOICE_EMOTION_EMOJI=true默认开启情感标注。VOICE_LOCAL_ENABLED本地转写可选。 |
6.2 octo-speech-admin
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-speech-admin:latest |
| 容器端口 |
8781 |
| Profile |
speech |
| 宿主机端口 |
127.0.0.1:28088(loopback默认,SSH隧道访问) |
| 核心环境变量 |
ADMIN_USERNAME/PASSWORD/JWT_SECRET |
| 路由 |
/speech-admin/ rewrite→:8781/(sub_filter替换静态资源路径);/speech-admin-api/→:8781/api/ |
| 功能(产品管家确认) |
语音服务管理控制台(:8781独立认证ADMIN_USERNAME/PASSWORD/JWT_SECRET,loopback:28088需SSH隧道)。⚠️feature-map完全未收录该管理台,用量统计/引擎配置/API Key管理/热词词典/转写历史/音频存储策略等功能全部无证据,SP-待源码验证(P1)。 |
七、文档协同(docs,profile: docs)
7.1 octo-docs-backend
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-docs-backend:0.8.0(pin版) |
| 容器端口 |
3000(REST API), 1234(Hocuspocus协作WS) |
| Profile |
docs |
| 数据库 |
MySQL octo_docs,用户docs;Redis(prefix: octo-docs) |
| 对象存储 |
MinIO bucket octo-docs-attachments |
| 依赖 |
docs-preflight/mysql/redis/minio-init |
| 路由 |
/api/v1/docs/→:3000;/api/v1/bot/docs/ rewrite→:3000/v1/bot/docs/;/docs-api/ rewrite→:3000/;/docs-collab(WS)→:1234 |
| 核心环境变量 |
MYSQL_*, COLLAB_TOKEN_SECRET(Hocuspocus JWT), OCTO_IDENTITY_MODE=http(委托octo-server认证), ATTACHMENT_DRIVER=s3, KAFKA_BROKERS+DOCINDEX_KAFKA_TOPIC(对接doc-indexer), SEARCH_INDEX_ENABLED/SEARCH_ENABLED(默认false) |
| 启动 |
docs-migrate-entrypoint.sh先执行schema.sql+migration再启服务 |
| 功能(产品管家确认) |
实时协同文档后端,基于 Tiptap(Block-based富文本) + Yjs CRDT + Hocuspocus WebSocket。支持5类文档表面:富文本文档、表格Sheet(区域保护/查找替换/行列增删)、白板Board(Excalidraw, Web v2026.08.03)、HTML文档(走docs-html)、PPT演示文稿(Web v2026.09.14新增,协作/评论/版本/媒体导出)。支持docx/Markdown双向导入导出。多人实时协同+评论(reader/commenter/writer权限分级)+版本历史(快照+两版本对比+恢复)。Web端左侧导航「文档」入口,是独立空间(/docs),非群内嵌。Bot通过文档评论区@Mention链路操作文档(非Bot API直接调用),支持BotFather创建的User Bot在权限内编辑正文插入AI内容(MVP阶段,有灰度门控)。可对接Kafka+OpenSearch(doc-indexer)实现文档搜索。思维导图明确不支持独立类型。 |
7.2 docs-preflight(一次性)
| 项目 |
值 |
| 功能 |
检查docs必需密钥(DB密码/collab secret≥32hex/attachment secret≥32hex) |
八、文档HTML渲染(docs-html,profile: docs-html,依赖docs)
8.1 docs-html
| 项目 |
值 |
| 镜像 |
hub2.intra.mlamp.cn/octo/octo-docs-html:v0.4.0(pin版) |
| 容器端口 |
8080 |
| Profile |
docs-html(需同时启用docs) |
| 数据库 |
MySQL octo_docs(复用docs用户) |
| 对象存储 |
MinIO bucket octo-docs-attachments(docs/路径存HTML正文) |
| 路由 |
/docs-html/ rewrite→:8080/(sub_filter修正根路径链接) |
| 核心环境变量 |
LOGIN_ENABLED=true, BOT_AUTH_ENABLED=true, OCTO_SERVER_BASE_URL, DOCS_BACKEND_REGISTER_URL(向octo-docs-backend注册) |
8.2 docs-html-migrate(一次性)
| 项目 |
值 |
| 功能 |
执行migrate命令完成docs-html数据库schema迁移 |
九、网盘/Drive(drive,profile: drive)
9.1 drive(octo-drive)
| 项目 |
值 |
| 镜像 |
hub2.intra.mlamp.cn/octo/octo-drive:v0.5.0(pin版) |
| 容器端口 |
8080 |
| Profile |
drive |
| 数据库 |
MySQL octo_drive,用户drive(utf8mb4_unicode_ci);可选读octo_docs.doc_meta/doc_member |
| 对象存储 |
MinIO bucket octo-drive |
| 依赖 |
drive-config/drive-migrate/octo-server/minio-init |
| 路由 |
/v1/drive/→:8080;/v1/bot/drive/→:8080;/v1/user/drive/→:8080 |
| 核心环境变量 |
DRIVE_MYSQL_PASSWORD, DRIVE_OCTO_SERVER_INTERNAL_TOKEN, DRIVE_STORAGE_*_KEY, DRIVE_KAFKA_DISABLED=true(默认), DRIVE_SEARCH_DISABLED=true(默认) |
| 配置 |
config.yaml由drive-config init从模板渲染(storage.endpoint不可通过env设置) |
9.2 drive-config(一次性)
| 项目 |
值 |
| 功能 |
从模板渲染/etc/octo-drive/config.yaml,替换storage.endpoint为实际S3端点 |
9.3 drive-preflight(一次性)
| 项目 |
值 |
| 功能 |
创建octo_drive数据库+drive用户+授予octo_docs读权限 |
9.4 drive-migrate(一次性)
| 项目 |
值 |
| 镜像 |
migrate/migrate:v4.18.3 |
| 功能 |
使用golang-migrate执行drive/migrations下的SQL迁移 |
十、回路/Fleet(fleet,profile: fleet + fleet-db)
10.1 octo-fleet
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-fleet:latest |
| 容器端口 |
8080 |
| Profile |
fleet |
| 宿主机端口 |
127.0.0.1:28089 |
| 数据库 |
PostgreSQL(不用MySQL)— 内置fleet-postgres(postgres:16-alpine)或外部FLEET_DATABASE_URL |
| Redis |
Redis DB 1 |
| 依赖 |
fleet-preflight/fleet-postgres(可选)/redis/octo-server |
| 路由 |
/fleet/api/v1/ rewrite→:8080/api/(掉/v1);/fleet/api/daemon/ws(WebSocket,无Connection strip);/fleet/ws(WebSocket);/fleet/uploads/;/fleet/auth/ |
| 核心环境变量 |
DATABASE_URL, REDIS_URL, JWT_SECRET(≥32hex), LOOP_CREDENTIAL_HMAC_KEY(≥32hex), OCTO_APP_SERVER_URL, ALLOW_SIGNUP=false(默认) |
| 存储卷 |
certs挂载(自签HTTPS webhook信任) |
| 健康检查 |
start_period:300s(迁移可能需5分钟) |
| 功能(产品管家确认) |
Bot编排与运行时管理服务(从octo-server拆出的独立Go服务),不是工作流引擎。负责:Daemon注册与心跳、Bot编排与置备(managed_bots)、运行时清单(哪个daemon上跑哪些Agent)、与octo-matter协同任务分发。定位偏「本地设备/运行时管理+Bot编排」。octo-daemon(npm包octo-daemon)是用户本地运行时监控服务+Loop CLI工具:自动检测本地AI Agent CLI(Claude Code/Codex/OpenClaw/Hermes),space-scoped API key认证(私聊BotFather发/daemon获取安装命令+server URL+API key写入~/.octo-daemon/config.json),上报本地Agent状态供Web「Runtimes」查看、支持一键远程升级插件、待daemon在线后才能三步建Bot。Loop(回路)= octo内置项目管理+AI协作平台(类似Linear/Jira,dmloop.enabled门控,Web左侧「回路」入口),是面向用户的工作流层;Fleet是底层基础设施层。⚠️双WS端点职责划分/HMAC凭证机制/私网webhook动机/Bot→daemon完整调度链路/Fleet为何用PG选型/模块成熟度均待源码确认(安全相关项不得猜测)。 |
10.2 fleet-postgres
| 项目 |
值 |
| 镜像 |
postgres:16-alpine |
| 容器端口 |
5432 |
| Profile |
fleet-db(与fleet联用时启用内置PG) |
| 宿主机端口 |
127.0.0.1:25432 |
| 存储卷 |
fleet-postgres-data |
| 功能 |
Fleet专用PostgreSQL数据库 |
10.3 fleet-preflight(一次性)
| 项目 |
值 |
| 功能 |
检查FLEET_DATABASE_URL或FLEET_POSTGRES_PASSWORD、JWT_SECRET、LOOP_CREDENTIAL_HMAC_KEY |
十一、消息搜索基础设施(search,profile: search)
11.1 search-kafka
| 项目 |
值 |
| 镜像 |
apache/kafka:3.8.0(KRaft单节点,无ZooKeeper) |
| 容器端口 |
9092(PLAINTEXT), 9093(CONTROLLER), 29092(EXTERNAL) |
| Profile |
search |
| 宿主机端口 |
127.0.0.1:29092 |
| 存储卷 |
kafka-data→/var/lib/kafka/data |
| 核心配置 |
KAFKA_AUTO_CREATE_TOPICS_ENABLE=false(topic必须预创建) |
| 功能 |
Kafka(KRaft模式单节点)消息队列,为消息/文档/网盘三管道提供异步缓冲与解耦;auto.create.topics.enable=false,所有topic由init容器预创建 |
11.2 search-opensearch
| 项目 |
值 |
| 镜像 |
octo-search-opensearch-ik:2.17.0(本地构建,baked in analysis-ik中文分词) |
| 容器端口 |
9200 |
| Profile |
search |
| 宿主机端口 |
127.0.0.1:29200 |
| 存储卷 |
opensearch-data→/usr/share/opensearch/data |
| JVM |
默认-Xms512m -Xmx512m |
| 安全 |
DISABLE_SECURITY_PLUGIN=true(本地简化模式,生产需启用) |
| 功能(产品管家确认) |
OpenSearch搜索引擎单节点(baked in analysis-ik中文分词插件),为三类内容提供全文检索:①消息(octo-message索引,Web v2026.06.27全新上线,全局+频道内搜索)②云文档正文(octo-doc索引,Web v2026.08.03「云文档」Tab)③网盘文件(octo-drive索引,Web v2026.08.24网盘全文搜索,Tika提取正文)。文件正文可搜(不只文件名,Server PR#554,2026-07-08)。ik_max_word索引分词/ik_smart查询分词;默认禁用security plugin本地简化模式,JVM默认512m堆。消息搜索尊重权限(authz校验,用户只能搜自己有权限看到的内容);Bot通过OBO模式以主人身份搜索(POST /v1/botfather/messages/search,权限等同owner,octo-cli用)。索引延迟数字/near-real-time profile差异/Tika格式清单+OCR/文档网盘搜索authz边界/Bot能否用文档网盘搜索API——SE-待源码验证(P0/P1)。 |
11.3 es-indexer
| 项目 |
值 |
| 镜像 |
mininglamposs/octo-search-indexer:latest |
| Profile |
search |
| 依赖 |
search-kafka-init/search-opensearch/search-ensure |
| 核心环境变量 |
ES_INDEXER_ENABLED=true, KAFKA_TOPIC=octo.message.v1, KAFKA_DLQ_TOPIC=octo.message.v1.dlq, ES_INDEX=octo-message, INDEXER_BATCH_SIZE=500 |
| 存储卷 |
search-dlq-spill(DLQ spill持久化,crash-resumable) |
| 功能(产品管家确认) |
Kafka→OpenSearch消息索引消费者(group: octo-search-indexer),批量消费octo.message.v1→写入octo-message(OS),BATCH_SIZE=500;DLQ spill持久化支持崩溃恢复。架构MySQL→Kafka→OpenSearch属准实时,具体延迟数字/refresh interval待源码验证。 |
11.4 search-kafka-init / search-ensure(一次性)
| 服务 |
功能 |
| search-kafka-init |
创建Kafka topic: octo.message.v1 + octo.message.v1.dlq(消息管道body+DLQ) |
| search-ensure |
创建OpenSearch索引octo-message + read alias wukongim-messages-read(客户端读alias不读物理索引,支持reindex/alias swap零停机) |
11.5 search-producer(profile: search-producer,独立profile)
| 项目 |
值 |
| 镜像 |
同es-indexer,entrypoint为searchetl-producer |
| Profile |
search-producer |
| 互斥保护 |
search-producer-guard阻止与octo-server内置producer(TS_KAFKA_ON)同时运行(双向fail-closed) |
| 功能 |
独立部署模式的实时消息→Kafka producer(MySQL shards→Kafka);K8s路径使用,Docker compose默认用octo-server内置producer |
11.6 search-producer-guard(无条件启动)
| 项目 |
值 |
| 功能 |
双向互斥检查:STANDALONE_ON和BUILTIN_ON不能同时为truthy(双producer共享cursor+Redis锁,双写Kafka),fail-closed |
11.7 search-cursor-seed / search-backfill(profile: search-tools,一次性)
| 服务 |
功能 |
| search-cursor-seed |
将searchetl抽取cursor种子到每个消息分片表MAX(id)(INSERT...ON DUPLICATE KEY UPDATE+GREATEST单调不回退),防止实时producer启动回放全历史 |
| search-backfill |
一次性历史回填(MySQL分片→OpenSearch直写,绕过Kafka),checkpoint持久化支持断点续传,-reconcile校验失败非零退出防止alias误绑定 |
十二、文档索引(doc-index,profile: doc-index,依赖docs+search)
12.1 doc-indexer
| 项目 |
值 |
| 镜像 |
hub2.intra.mlamp.cn/octo/octo-doc-indexer:v1.1.0 |
| 容器端口 |
3100(HTTP/readyz) |
| Profile |
doc-index |
| 数据库 |
MySQL octo_docs(docs用户只读) |
| Kafka |
topics: octo.docindex.v1 / octo.docindex.v1.retry / octo.docindex.v1.dlq; group: doc-indexer |
| OpenSearch |
index octo-doc(alias octo-doc-read) |
| 功能(产品管家确认) |
文档变更事件Kafka消费者(group: doc-indexer),消费octo.docindex.v1(.retry/.dlq)→写入OpenSearch octo-doc索引(云文档全文搜索,Web v2026.08.03);含HTML正文索引(从S3 octo-docs-attachments读取);:3100/readyz Node.js健康检查。 |
12.2 doc-index-kafka-init / doc-index-ensure(一次性)
| 服务 |
功能 |
| doc-index-kafka-init |
创建3个Kafka topic: octo.docindex.v1 / .retry / .dlq |
| doc-index-ensure |
创建OpenSearch索引octo-doc + read alias octo-doc-read |
十三、网盘文件索引(drive-index,profile: drive-index,依赖drive+search)
13.1 tika
| 项目 |
值 |
| 镜像 |
hub2.intra.mlamp.cn/octo/tika:3.3.0.0 |
| 容器端口 |
9998 |
| Profile |
drive-index |
| 功能 |
Apache Tika文本提取服务(:9998/version),从PDF/Word/Excel/PPT等二进制格式提取纯文本供drive-indexer写入OS实现网盘文件全文搜索。具体支持格式清单+是否含图片OCR——SE-待源码验证。 |
13.2 drive-indexer
| 项目 |
值 |
| 镜像 |
hub2.intra.mlamp.cn/octo/octo-drive-indexer:v0.1.0 |
| 容器端口 |
3200 |
| Profile |
drive-index |
| 数据库 |
MySQL octo_drive(drive用户) |
| Kafka |
topics: octo.driveindex.v1 / octo.driveindex.retry.v1 / octo.driveindex.dlq.v1; group: octo-drive-indexer |
| OpenSearch |
index octo-drive |
| 核心环境变量 |
TIKA_URL=http://tika:9998(文本提取), SSRF保护(ALLOWED_DOWNLOAD_HOSTS/SSRF_ALLOW_LOOPBACK=false) |
| 功能(产品管家确认) |
网盘文件Kafka消费者(group: octo-drive-indexer),消费octo.driveindex.v1(.retry/.dlq)→经Tika:9998提取文本→写入OpenSearch octo-drive索引(网盘文件全文搜索,Web v2026.08.24,不只文件名可搜文件内容);含SSRF防护(SSRF_ALLOW_LOOPBACK:false, ALLOWED_DOWNLOAD_HOSTS白名单)。Tika格式清单+OCR能力待源码验证。 |
13.3 drive-index-kafka-init / drive-index-ensure(一次性)
| 服务 |
功能 |
| drive-index-kafka-init |
创建3个Kafka topic: octo.driveindex.v1 / .retry.v1 / .dlq.v1 |
| drive-index-ensure |
等待Tika/version就绪后创建OpenSearch索引octo-drive |
十四、Nginx路由矩阵
14.1 薄网关层(nginx容器,端口80/443)
| URL路径 |
后端服务:端口 |
协议 |
说明 |
/_nginx_up |
nginx自身 |
HTTP |
健康检查(200 ok) |
/_octo_up |
nginx自身 |
HTML |
服务启动欢迎页+快速链接 |
/ws |
wukongim:5200 |
WebSocket |
IM实时消息WebSocket |
/admin → /admin/ |
admin容器(:80) |
HTTP |
管理后台 |
/space |
301→/admin/space |
HTTP |
空间重定向 |
/docs-collab |
octo-docs-backend:1234 |
WebSocket |
文档协同编辑WS(长超时86400s) |
/docs-html/ |
docs-html:8080 |
HTTP |
HTML文档渲染(rewrite去掉前缀+sub_filter修正链接) |
/minio/ |
minio:9000 |
HTTP |
MinIO API诊断/直访路径 |
/{bucket}/{key}?X-Amz-* |
minio:9000 |
HTTP |
MinIO presigned URL直反代(不rewrite,保SigV4签名);bucket白名单: file/chat/moment/sticker/report/chatbg/common/download/group/avatar/octo-docs-attachments/marketplace/octo-drive |
/ |
web:80 |
HTTP/WS |
兜底→web厚路由层 |
14.2 厚应用层(web容器内置nginx,端口80)
| URL路径 |
后端服务:端口 |
说明 |
/api/v1/voice/transcribe |
octo-server:8090 |
语音转写(10m body限制) |
/api/v1/users/{uid}/avatar |
octo-server:8090 |
用户头像 |
/api/v1/bot/file/upload 等 |
410 Gone |
已废弃上传端点,引导使用presigned URL |
/api/v1/docs + /api/v1/docs/* |
octo-docs-backend:3000 |
文档REST API(用户侧) |
/api/v1/bot/docs + /api/v1/bot/docs/* |
octo-docs-backend:3000 |
文档REST API(Bot侧,rewrite去/api前缀) |
/v1/bot/docs + /v1/bot/docs/* |
octo-docs-backend:3000 |
文档REST API(Bot侧直路径) |
/api/*(通用) |
octo-server:8090 |
核心REST API(rewrite去/api→/v1/*) |
/version.json |
web本地静态 |
版本信息(no-store) |
/v1/drive + /v1/drive/* |
drive:8080 |
网盘API(用户侧) |
/v1/bot/drive + /v1/bot/drive/* |
drive:8080 |
网盘API(Bot侧) |
/v1/user/drive + /v1/user/drive/* |
drive:8080 |
网盘API(用户侧别称) |
/v1/*(通用) |
octo-server:8090 |
核心API(含OIDC等,10m body限制) |
/speech-admin/ |
octo-speech-admin:8781 |
语音管理后台(sub_filter路径重写) |
/speech-admin-api/* |
octo-speech-admin:8781 |
语音管理后台API |
/summary/api/v1/agent/chat/stream |
summary-api:8080 |
摘要SSE流式聊天(proxy_buffering off/3600s) |
/summary/api/v1/* |
summary-api:8080 |
摘要REST API |
/market/api/* |
marketplace:8092 |
市场/技能市场API |
/market/healthz |
marketplace:8092 |
市场健康检查 |
/docs-api/* |
octo-docs-backend:3000 |
文档API别名路径 |
/fleet/api/daemon/ws |
octo-fleet:8080 |
Fleet Daemon WebSocket(Upgrade) |
/fleet/api/v1/* |
octo-fleet:8080 |
Fleet REST API(掉/api→/api/,即/fleet/api/v1/x→/api/x) |
/fleet/api/* |
octo-fleet:8080 |
Fleet API通用 |
/fleet/ws |
octo-fleet:8080 |
Fleet WebSocket |
/fleet/uploads/* |
octo-fleet:8080 |
Fleet文件上传 |
/fleet/auth/* |
octo-fleet:8080 |
Fleet认证 |
/product-docs |
302→https://docs.imocto.cn |
外部文档站 |
/ |
web本地SPA |
React SPA(try_files→index.html) |
14.3 路由两层架构说明
客户端 :28080/:28443
↓
nginx(gateway/thin层) ← TLS终结、WS升级、MinIO直反代
├─ /ws → wukongim:5200
├─ /admin/ → admin:80
├─ /docs-collab → docs-backend:1234(WS)
├─ /docs-html/ → docs-html:8080
├─ /{bucket}/{key} → minio:9000(presigned URL直传)
└─ / → web:80(厚路由层)
↓
web(thick层nginx) ← 所有应用层API路由+SPA
├─ /api/*,/v1/* → octo-server:8090
├─ /summary/api/ → summary-api:8080
├─ /market/api/ → marketplace:8092
├─ /fleet/api/ → octo-fleet:8080
├─ /v1/drive/ → drive:8080
├─ /api/v1/docs/,/docs-api/ → docs-backend:3000
├─ /speech-admin/ → speech-admin:8781
└─ / → SPA静态资源
十五、Profile开关汇总(docker-compose → helm对照)
| Profile/模块 |
docker-compose Profile |
helm values.yaml默认enabled |
必须联合启用 |
| 核心IM(server/web/admin/mysql/redis/minio/wukongim/nginx/botfather) |
无(默认) |
server/web/admin/nginx: true |
— |
| marketplace |
无(默认启动) |
marketplace: false⚠️ |
— |
| summary |
summary |
summary: false |
— |
| speech |
speech |
speech: false |
— |
| docs |
docs |
docsBackend: false |
— |
| docs-html |
docs-html |
docsHtml: false |
docs |
| drive |
drive |
drive: false |
— |
| fleet |
fleet(+fleet-db用内置PG) |
fleet: false |
— |
| 消息搜索(Kafka+OS+indexer) |
search |
search相关: false |
— |
| 独立search producer |
search-producer |
— |
search |
| search升级工具 |
search-tools |
— |
search |
| 文档索引 |
doc-index |
docIndexer: false |
docs+search |
| 网盘索引 |
drive-index |
driveIndexer: false |
drive+search |
⚠️ marketplace在docker-compose中默认启动(无profile gating),但helm values.yaml默认enabled: false,差异待确认。
十六、开源版已有 vs 内部版独有
开源版已有(GitHub开源代码可对应)
- 基础设施: mysql, redis, minio, wukongim, nginx
- 核心业务: octo-server, octo-web
- 管理: octo-admin
- 初始化: preflight, minio-init, botfather-robot
- 互斥保护: search-producer-guard
内部版独有(开源代码仓库中不存在)
- 文档: octo-docs-backend, docs-preflight, docs-html, docs-html-migrate
- 网盘: octo-drive, drive-config, drive-preflight, drive-migrate
- 回路/Fleet: octo-fleet, fleet-postgres, fleet-preflight(独立PostgreSQL)
- 市场: marketplace, market-preflight
- 语音: octo-speech, octo-speech-admin
- 摘要: summary-api, summary-worker
- 搜索管道: search-kafka, search-opensearch, es-indexer, search-kafka-init, search-ensure, search-cursor-seed, search-backfill, search-producer
- 索引器: doc-indexer (+init/ensure), drive-indexer (+init/ensure)
- 文本提取: tika
- 数据库新增: octo_summary, octo_speech, octo_docs, octo_marketplace, octo_drive(MySQL); fleet PG库
待产品管家确认项
文档模块(p1已回答✅,以下为剩余待确认细节)
- ~~docs-backend文档格式/协同/表面/docs-html定位~~ ✅已确认(Tiptap+Yjs,5类表面,docs-html并列后端)
- ~~docs与drive联动边界~~ ✅已确认(独立模块,挂载机制打通,附件各存各bucket,UI两个入口,drive仅Web端)
- ~~Bot操作文档方式~~ ✅已确认(评论@Mention链路,非Bot API直调,仅User Bot,MVP阶段)
- 文档协同光标同步细节(Yjs标配,产品管家标待确认)
- 非评论场景(文档创建/编辑)是否webhook推Bot事件
后续模块(p2-p待提问)
- marketplace(技能市场)的具体功能范围:技能/Bot/MCP分别是什么概念?
- summary-api/worker的AI能力边界:除消息摘要外,是否提供AI对话/写作等能力?SSE chat/stream接口的用途?
- octo-speech除转写外是否含TTS(语音合成)?VOICE_ENGINE支持的引擎范围?
- ~~drive网盘与docs文档的mountable-online-docs联动细节~~ ✅已确认(p1顺带回答)
- Drive能力范围(文件类型/预览/分享/权限模型)—— p2待问
- Drive与docs的边界用户场景—— p2待问
- octo-fleet(回路/Loop)的产品定位:多Agent编排平台?设备管理?Loop是什么概念?—— p3待问
- Fleet Daemon WebSocket用途—— p3待问
- Fleet独立PostgreSQL原因—— p3待问
- admin管理台具体功能范围
- "我的"模块(设备管理+Skills)对应哪个服务?docker-compose中未看到明确的"me"/"profile"/"my"服务——可能是octo-server内嵌模块或前端SPA实现?
- octo-server镜像tag使用`:latest`而非固定版本——实际部署版本对应什么?
- marketplace在compose默认启动但helm默认disabled——待确认哪个是正确默认