首页 产品 为什么选 OCTO 解决方案 文档 关于
文档中心 / 模块详解 / 企业网盘
← 返回文档中心

企业网盘

OCTO 文档中心 · 模块详解

  • 内部部署仓库 docker-compose.yaml / Helm values.yaml(deployment-drive.yaml/configmap-drive.yaml/job-drive-migrate.yaml)/ nginx 路由配置 / init-extra-dbs.sh(2026-09-21 阶段一+旧版解析)
  • OCTO知识库建设组父群 / 2026-09-21 13:21-14:00 / Octo产品管家回答 (message_id:2101905330496507904, 2101915123915329536)
  • 00-inbox/product-bot-answers/2026-09-21-P0扩展-Drive网盘模块回答.md
  • 00-inbox/product-bot-answers/2026-09-22-P1-round2-Q6-Drive网盘深度回答.md(P1 Round2源码确认,message_id:2102200499716395008)
  • 旧版 01-product/模块说明/网盘Drive模块.md(2026-09-21,部署配置推断版,已归档到99-archive/)

Drive网盘模块说明 v0.3

Drive(网盘)是 OCTO 内部版独有的企业级文件存储与协作模块,提供个人空间和共享空间两级文件管理能力,仅 Web 端可用。

🔴P0安全结论:Bot对网盘零攻击面(源码确认级,2026-09-22 P1 Round2)

售前/交付/安全审计硬口径:Bot不能直接读写/枚举/分享用户Drive网盘文件。

  1. `/v1/bot/drive/`路由全仓0命中——不存在Bot直接操作Drive的API
  2. Bot文件路由仅4个(`/v1/bot/files/*`):upload / download / STS credentials / presigned PUT
  3. 上传key硬编码前缀`chat/`——只能操作聊天附件命名空间,文件不进入Drive
  4. 三重隔离:扩展名白/黑名单 + MaxUploadSize限制 + `chat/`前缀硬编码

一、模块定位(一句话口径,v0.3 P1 Round2更新)

网盘 = Octo 内置企业级文件存储/协作模块:仅 Web 端,`drive_on` 开关门控(默认 false),个人+共享两级Space空间;已确认支持增删改查/移动复制/分享(组织外访问存在但完整功能待私有仓确认)/成员邀请/独立搜索(Drive有独立搜索后端,不走开源octo-search-indexer消息附件管道)/聊天转存/文档挂载。

🔴 安全硬口径:Bot对网盘零攻击面(`/v1/bot/drive/`全仓0命中,Bot仅操作`chat/`命名空间消息附件,不进Drive)。

⚠️ 私有仓边界:预览格式清单/分享链接完整功能(密码/有效期/权限/频次/组织外)/权限继承细节/Drive独立搜索后端实现/版本管理/回收站/分片续传/单文件上限均在私有octo-drive仓,当前不可见。

二、部署与基础设施硬事实

2.1 主服务 octo-drive

项目 事实 来源
服务镜像 hub2.intra.mlamp.cn/octo/octo-drive:v0.5.0(pin版,内网registry;distroless Go二进制,无shell) docker-compose / Helm deployment
容器端口 8080(HTTP API) docker-compose / Helm
启动命令 ["-config", "/etc/octo-drive/config.yaml"] docker-compose
数据库 MySQL octo_drive 库(utf8mb4_unicode_ci),用户 drive docker-compose / drive-preflight
跨库读权限 octo_docs.doc_meta、octo_docs.doc_member(SELECT,用于挂载云文档列表) drive-preflight 初始化脚本
对象存储 MinIO bucket octo-drive(独立bucket,不与docs附件混用;Q6确认) docker-compose / minio-init / Q6
S3 配置 通过rendered config.yaml(storage.endpoint)+ DRIVE_STORAGE_ACCESS_KEY_ID / DRIVE_STORAGE_SECRET_ACCESS_KEY 环境变量 configmap-drive / Helm configmap
TLS 信任 AWS_CA_BUNDLE=/etc/octo-drive-certs/fullchain.pem(自签证书S3端点信任) docker-compose
健康检查 ❌ 无liveness/readiness probe(distroless镜像无shell/curl,通过nginx代理可达/health) Helm deployment
存储卷 drive-config(只读挂载rendered config)、certs(只读) docker-compose / Helm
依赖服务 drive-config(渲染配置)、drive-migrate(schema迁移)、octo-server(认证/集成)、minio-init(bucket预创建) docker-compose depends_on
内部 Token DRIVE_OCTO_SERVER_INTERNAL_TOKEN = OCTO_NOTIFY_INTERNAL_TOKEN(与octo-server内部通信鉴权) Helm / docker-compose env
Kafka 开关 DRIVE_KAFKA_DISABLED=true(默认关闭,启用drive-index profile时设false) Helm values / configmap
搜索开关 DRIVE_SEARCH_DISABLED=true(默认关闭,启用时后端对接OpenSearch) Helm values / configmap
搜索后端 DRIVE_SEARCH_URL=http://search-opensearch:9200 configmap
Profile 开关 drive_on(默认 false,需显式开启);drive-index 为附加profile(依赖 drive + search) docker-compose profiles / Helm values
客户端 仅 Web 端,iOS/Android 未实现 p1 产品管家回答
nginx 路由 /drive/(前端)、/drive-api/→octo-drive:8080、/v1/drive/(用户侧API)、/v1/user/drive/(用户侧别称);⚠️/v1/bot/drive/不存在(P1源码确认:全仓0命中,Bot文件路由仅在/v1/bot/files/*且硬编码chat/前缀,不进Drive) nginx web default.conf.template + P1 Round2 Q6源码确认
SSRF 防护 ALLOWED_DOWNLOAD_HOSTS / SSRF_ALLOW_LOOPBACK=false(drive-indexer侧配置) drive-indexer 配置

2.2 初始化/一次性服务

服务 镜像 功能 来源
drive-config busybox 从 drive-config.yaml.template 渲染 /etc/octo-drive/config.yaml,替换 @@STORAGE_ENDPOINT@@ 为实际S3端点。因 octo-drive v0.5.0 不支持 storage.endpoint 环境变量覆盖,必须预渲染。 docker-compose / Helm configmap
drive-preflight octo 内部镜像 创建 octo_drive 数据库(utf8mb4_unicode_ci)+ drive@'%' 用户 + GRANT ALL PRIVILEGES + 授予 octo_docs 读权限(doc_meta/doc_member SELECT)。含密码校验(非空/非CHANGE_ME/合法字符集)。 docker-compose / init-extra-dbs.sh
drive-migrate migrate/migrate:v4.18.3 执行 docker/drive/migrations/ 下的SQL迁移文件(golang-migrate),"no change"视为成功。 docker-compose / Helm job-drive-migrate

2.3 Drive-Index 关联组件(drive-index profile 附加,依赖 drive + search)

⚠️ Q6 P0纠偏后更新:部署配置中`drive-indexer`/Tika/Kafka `octo.driveindex.v1` topic/OpenSearch `octo-drive`索引均存在,但octo-search-indexer开源仓仅处理消息附件抽取(`octo.message.v1` topic),不处理Drive文件。Drive搜索后端是octo-drive私有仓独立实现,开源仓无`octo.driveindex.v1`消费逻辑。部署组件存在 ≠ 开源仓逻辑,需以私有仓octo-drive源码为准。

服务 端口 功能(部署配置描述) 来源
drive-indexer 3200 Kafka消费者(topic: octo.driveindex.v1),经Tika提取文件文本→写入OpenSearch octo-drive索引;⚠️Q6确认:此组件属私有octo-drive仓,非开源octo-search-indexer docker-compose / Helm + Q6
tika 9998 Apache Tika 3.3.0.0,文件格式文本提取(PDF/Word/Excel/PPT等),供drive-indexer使用 docker-compose + Q6
drive-index-kafka-init — 创建 octo.driveindex.v1 / .retry.v1 / .dlq.v1 三个 Kafka topic docker-compose kafka-init job
drive-index-ensure — 等待 tika 就绪后创建 octo-drive OpenSearch index docker-compose ensure job
  1. 开源octo-search-indexer仓不含drive-indexer逻辑——开源仓仅消费`octo.message.v1`做消息附件Tika抽取
  2. drive-indexer镜像是`hub2.intra.mlamp.cn/octo/octo-drive-indexer:v0.1.0`(内网pin版),属私有octo-drive仓组件
  3. 部署配置存在drive-index profile组件,但Q6确认octo-web `drive/search` POST走独立搜索后端(highlights.name/body双字段+content_meta.extractor走Tika+OS)
  4. 索引延迟/删除同步机制=私有仓不可见

三、已确认能力(P1 Round2 Q6源码确认更新)

3.1 文件操作

  • 上传、下载文件
  • 浏览(文件列表/目录)
  • 搜索(文件名+文件内容全文搜索,Web v2026.08.24 起支持内容搜索)
  • 删除、重命名、移动、复制文件与文件夹
  • 新建文件夹(空间内目录管理)
  • 大文件分片上传/断点续传机制
  • 单文件大小上限
  • 文件版本管理/版本历史
  • 回收站机制与保留策略

3.2 文件预览机制(Q6源码确认级)

  • server侧预览 = 302重定向到对象存储URL,直接由MinIO/S3返回文件
  • ❌ 无OnlyOffice/LibreOffice/Tika服务端渲染引擎证据(Tika仅用于搜索索引正文抽取,不做在线预览渲染)
  • 未知扩展名强制 Content-Disposition: attachment(触发浏览器下载而非内联渲染),防XSS
  • Web侧路由映射:blob文件→/drive/f/,doc云文档→/d/
  • 具体可预览格式清单(PDF/Office/图片/视频/音频/代码/文本哪些支持内联预览)
  • 预览大小限制(大文件是否截断/分页)
  • 预览缩略图生成机制
  • 网盘可「挂载云文档」(listMountedDocs)
  • Web v2026.09.14 优化了「网盘中文档的打开与访问体验」——文档类打开有专门优化(→/d/路由)

3.3 分享链接(Q6源码确认级修正)

  • 预签名URL = 对象存储级STS(STS credentials / presigned PUT/GET),由对象存储直接签名生成临时访问URL
  • 组织外访问:产品管家前期确认外部成员可打开分享链接(但完整功能链路待私有仓确认)
  • 预签名URL本身无密码保护
  • 无权限粒度控制(只读/编辑/上传等)
  • 无访问次数限制
  • 无IP限制
  • 有效期仅由对象存储签名过期时间控制
  • 是否有密码保护分享链接功能
  • 是否支持有效期自定义设置
  • 是否有权限粒度(只读/可编辑/可上传)
  • 是否有访问频次限制
  • 组织外访问完整控制策略

⚠️ 售前口径:可表述"支持分享链接/组织外访问",但"密码保护/权限控制/有效期"等高级功能不能确认,需实测或等私有仓开放。

3.4 权限模型(Q6源码确认级补充)

  • 两级空间:个人空间(Personal Space) + 共享空间(Shared Space)
  • Space三档角色:0=普通成员 / 1=管理员 / 2=拥有者
  • 核心数据模型字段(源码确认):
  • space_id:所属空间
  • owner_uid:拥有者UID
  • type:类型枚举 doc(云文档)| blob(文件)| folder(文件夹)
  • parent_id=0:空间根目录
  • scope:all(全部)| space(空间内)
  • owner_scope:me(我的)| others(他人的)
  • 共享空间支持成员管理:add/update/remove member
  • 共享空间支持角色调整
  • 共享空间支持邀请链接:create/list/revoke invite
  • 权限独立于聊天(Q6确认)
  • 个人空间 vs 团队空间的精确隔离规则
  • 文件夹级权限继承规则
  • 协作者角色精确枚举(owner/editor/viewer/uploader等完整分级)
  • Drive权限与Docs云文档权限的独立性边界
  • 群转发文件的权限归属

3.5 搜索机制(Q6 P0纠偏+独立搜索后端确认)

  • Kafka topic:仅octo.message.v1(消息事件),consumer group file-extractor
  • 处理逻辑:payload.type=8 → 下载消息附件 → Apache Tika → OpenSearch partial update写payload.file.content
  • Tika黑名单:.mp4/.zip/.jpg等媒体/压缩/图片格式排除
  • 内容截断:256KB
  • DLQ错误分类处理
  • tombstone + 读时MySQL join过滤revoke/delete
  • ❌ 无octo.driveindex.v1 topic消费逻辑——开源仓不管Drive
  • API:POST drive/search
  • 高亮字段:highlights.name(文件名)+ highlights.body(文件正文)双字段
  • 正文抽取:content_meta.extractor走Tika+OpenSearch
  • Drive搜索后端位于私有octo-drive仓
  • Drive独立搜索后端的完整实现(是否经Kafka/索引延迟/删除同步机制)
  • 部署配置中octo.driveindex.v1 topic/drive-indexer与前端drive/search的对应关系
  • 搜索权限过滤细节

四、Bot/API 能力与模块联动(Q6更新)

4.1 Bot API 能力(D-05 ✅ P0已关闭)

  • /v1/bot/drive/路由全仓0命中——不存在Bot直接操作Drive的API
  • Bot文件路由仅4个(/v1/bot/files/*):upload / download / STS credentials / presigned PUT
  • 上传key硬编码前缀chat/——只能操作聊天附件命名空间
  • 结论:Bot对Drive零攻击面

4.2 存储架构补充(Q6确认)

  • Drive文件存 octo-drive bucket(已确认)
  • Docs附件存 octo-docs-attachments bucket(独立bucket,不混用)
  • 文件版本管理/版本历史机制
  • 回收站机制与保留策略
  • 大文件分片上传/断点续传机制
  • 单文件大小上限

4.3 与其他模块联动

  • Drive ↔ Docs:云文档可挂载到网盘空间(listMountedDocs);Docs附件存独立bucket octo-docs-attachments
  • Drive ↔ 聊天:聊天文件可转存到网盘(Web v2026.08.10+);但Drive文件不进入Bot可操作的chat/命名空间
  • Drive文件反向作为消息附件发送的权限链路
  • Drive文件作为AI Bot知识源(🔴Bot零面结论下,Bot不能直接读取Drive文件;若需作为知识源需经用户主动分享/转存链路)
  • Drive与Docs的其他联动(如drive文件插入文档等)

4.4 典型场景

  1. 企业网盘:个人空间+共享空间集中存储管理
  2. 团队协作文件共享:共享空间+成员三档角色+邀请链接
  3. 聊天文件沉淀:聊天中收到的文件一键转存到网盘
  4. 文件内容搜索:独立搜索后端,文件名+正文全文检索
  • 「AI 知识库文件源」——Bot对Drive零攻击面,不能直接读取Drive文件作为知识源;需经用户转存等中间链路
  • 「在线预览编辑Office文档」——server侧无OnlyOffice/LibreOffice渲染证据

五、待确认项汇总(知识库行动项,v0.3更新)

编号 待确认项 确认方式 优先级 状态
D-01🔴 大文件分片上传/断点续传/单文件大小上限 私有octo-drive仓/实测 P1 待确认
D-02🔴 文件预览格式清单/大小限制/缩略图机制 私有octo-drive仓/实测 P1 待确认
D-03🔴 分享链接完整功能(密码/有效期/权限粒度/频次/组织外控制) 私有octo-drive仓,confidence最低,标"待确认需实测" P1 待确认
D-04🔴 文件夹级权限继承+协作者角色枚举+个人vs团队隔离+群转发权限+Docs权限独立性 私有octo-drive仓/实测 P1 待确认
~~D-05~~ ~~/v1/bot/drive/ Bot API 实际暴露能力~~ ✅P0关闭:全仓0命中,Bot对Drive零攻击面 P0 ✅已关闭
D-06 Drive文件反向作为消息附件/知识源的链路(Bot零面约束下的可行路径) 查octo-server源码+产品设计 P1 待确认
D-07🔴 Drive独立搜索后端实现细节(索引延迟/删除同步/权限过滤);drive-indexer部署组件与前端drive/search的对应关系 私有octo-drive仓 P1 待确认
D-08🔴 文件版本管理/版本历史/回收站机制/保留策略 私有octo-drive仓 P2 待确认(Q6新增)

六、与其他模块的关系

模块 关系 状态
Docs(云文档) 独立模块;云文档可挂载到网盘空间(/d/路由);Docs附件存独立bucket octo-docs-attachments,不与Drive混用;权限独立性待确认 ✅部分确认
聊天/IM 聊天文件可转存到网盘(Web v2026.08.10+);Bot仅操作chat/命名空间附件,不进Drive ✅已确认
octo-server 通过DRIVE_OCTO_SERVER_INTERNAL_TOKEN内部通信;/v1/bot/drive/不存在(P0确认);用户侧API经/v1/drive/和/v1/user/drive/;预览走302重定向到对象存储 ✅P0安全确认+路由确认
MinIO 对象存储后端,octo-drive bucket;预签名URL=STS级(无密码/权限/次数/IP限制);Docs附件存octo-docs-attachments独立bucket ✅部署事实+Q6确认
MySQL 元数据存储,octo_drive库;跨库读octo_docs.doc_meta/doc_member ✅部署事实
Tika Drive搜索索引正文抽取(drive-indexer组件使用,非预览渲染) ✅Q6确认(搜索用途)
OpenSearch Drive独立搜索后端索引(octo-drive索引);DRIVE_SEARCH_URL配置 ✅部署事实+Q6确认
Kafka drive-index profile下octo.driveindex.v1 topic存在;但开源octo-search-indexer不消费此topic,drive-indexer属私有仓组件 ⚠️部署存在/开源仓不处理/私有仓确认
octo-search-indexer(开源仓) 🔴Q6确认:开源仓仅处理消息附件(octo.message.v1 topic, chat/命名空间),不处理Drive文件索引;Drive有独立搜索后端 ✅Q6 P0纠偏

七、版本记录

  • v0.1(2026-09-21):基于内部部署仓库硬事实 + 产品管家 Q1-Q2 回答新建;严格保留所有「待确认」标注
  • v0.2(2026-09-22):P1 Round2 Q6第一阶段回填——①frontmatter升级(source新增Q6来源,confidence更新为medium含P0安全high/私有仓low分档);②🔴P0安全结论醒目标注(Bot对网盘零攻击面,/v1/bot/drive/全仓0命中,chat/前缀三重隔离);③nginx路由修正(/v1/bot/drive/不存在,Bot文件路由仅/v1/bot/files/*);④D-05标注为P0关闭状态
  • v0.3(2026-09-22):P1 Round2 Q6深度回答完整回填——①§预览机制重写:server侧=302重定向到对象存储URL、无OnlyOffice/LibreOffice/Tika渲染、未知扩展名attachment防XSS、Web路由blob→/drive/f//doc→/d/、格式清单/大小限制=私有仓;②§分享链接修正:全仓无share外链产品级模块、预签名URL=对象存储STS级无密码/权限/次数/IP限制、密码/有效期/权限/频次/组织外=私有仓"待确认需实测";③§权限模型补充:Space三档角色0/1/2、数据模型字段space_id/owner_uid/type/parent_id=0/scope/owner_scope、个人vs团队/文件夹继承/协作者/群转发=私有仓;④§搜索机制P0纠偏:octo-search-indexer开源仓仅管消息附件(octo.message.v1/file-extractor/Tika黑名单/256KB截断/DLQ/tombstone),无octo.driveindex.v1消费,Drive有独立搜索后端(drive/search POST/highlights.name+body/content_meta.extractor走Tika+OS,私有octo-drive仓);⑤§存储架构补充:octo-drive bucket确认、Docs附件octo-docs-attachments独立bucket不混用、版本管理/回收站/分片续传/单文件上限=私有仓;⑥待确认项表更新:D-05关闭、新增D-08版本回收站/分片续传、所有私有仓项标注🔴;⑦§一模块定位更新,加入P0安全要点和私有仓边界;⑧§二部署硬事实中drive-index说明加入Q6纠偏;⑨§六模块关系表更新octo-search-indexer纠偏+Tika用途修正+MinIO bucket划分