首页 产品 为什么选 OCTO 解决方案 文档 关于
文档中心 / 架构设计 / 全组件服务清单
← 返回文档中心

全组件服务清单

OCTO 文档中心 · 架构设计

  • 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已回答✅,以下为剩余待确认细节)

  1. ~~docs-backend文档格式/协同/表面/docs-html定位~~ ✅已确认(Tiptap+Yjs,5类表面,docs-html并列后端)
  2. ~~docs与drive联动边界~~ ✅已确认(独立模块,挂载机制打通,附件各存各bucket,UI两个入口,drive仅Web端)
  3. ~~Bot操作文档方式~~ ✅已确认(评论@Mention链路,非Bot API直调,仅User Bot,MVP阶段)
  4. 文档协同光标同步细节(Yjs标配,产品管家标待确认)
  5. 非评论场景(文档创建/编辑)是否webhook推Bot事件

后续模块(p2-p待提问)

  1. marketplace(技能市场)的具体功能范围:技能/Bot/MCP分别是什么概念?
  2. summary-api/worker的AI能力边界:除消息摘要外,是否提供AI对话/写作等能力?SSE chat/stream接口的用途?
  3. octo-speech除转写外是否含TTS(语音合成)?VOICE_ENGINE支持的引擎范围?
  4. ~~drive网盘与docs文档的mountable-online-docs联动细节~~ ✅已确认(p1顺带回答)
  5. Drive能力范围(文件类型/预览/分享/权限模型)—— p2待问
  6. Drive与docs的边界用户场景—— p2待问
  7. octo-fleet(回路/Loop)的产品定位:多Agent编排平台?设备管理?Loop是什么概念?—— p3待问
  8. Fleet Daemon WebSocket用途—— p3待问
  9. Fleet独立PostgreSQL原因—— p3待问
  10. admin管理台具体功能范围
  11. "我的"模块(设备管理+Skills)对应哪个服务?docker-compose中未看到明确的"me"/"profile"/"my"服务——可能是octo-server内嵌模块或前端SPA实现?
  12. octo-server镜像tag使用`:latest`而非固定版本——实际部署版本对应什么?
  13. marketplace在compose默认启动但helm默认disabled——待确认哪个是正确默认