- 负责项目列表、编辑器界面、Tinymist 预览入口。
- 通过
src/services/projects.js调用 API、Preview 和 Realtime。
- 负责项目、文件、编译触发、PDF 分发和内部项目快照。
- 不直接承担编译或预览逻辑,只通过快照协议服务 compiler / preview。
- 当前仍是项目文件的权威存储边界,所有部署相关配置集中在
settings.py。
- 负责执行
typst compile。 - 当前由 API 发送项目快照,compiler 在临时目录编译后把 PDF 返回给 API。
- 这一层已经不依赖共享工作目录,后续可以单独扩缩容或替换为队列 worker。
- 负责 Tinymist preview 会话、预览代理、光标同步和 outline/diagnostics。
- 当前通过内部密钥向 API 按 revision 条件拉项目快照,在本地临时目录启动 tinymist。
- 这一层已经不依赖共享工作目录,可以和 API 分开部署。
- 负责 Yjs 协同房间、连接广播和内容 flush。
- 当前通过内部密钥解析文件房间并把内容和 Yjs state flush 回 API。
- Web 连接 realtime 编辑文件,或调用 API 做文件管理
- realtime 将文本和 Yjs state flush 回 API
- Web 请求 preview session/status/data
- preview 通过内部接口向 API 拉项目快照
- preview 在临时目录启动 tinymist 并代理预览数据
- Web 导出 PDF 时调用 API
- API 打包项目快照并调用 compiler
- compiler 在临时目录生成 PDF 并回传给 API
- API 将 PDF 写回工作目录并分发下载
-
所有服务间调用都支持完整
*_URL,也支持*_SCHEME/*_HOST/*_PORT组装。 -
单机 Docker Compose 默认继续使用服务名,例如
api、compiler、preview、realtime。 -
多机部署时把 host 改成目标机器 IP;后续免密访问只影响机器运维层,不要求服务共享本地路径。
-
Compiler、Preview、Realtime 都已暴露端口;API 当前仍需要访问自己的
storage/projects。 -
单机模拟多机时可使用
service-ip-net的固定容器 IP,不依赖 Docker 服务名,也避免宿主公网 IP 回环。
- Web / API / Compiler / Preview / Realtime 已经形成独立服务边界
- Compiler 和 Preview 都通过 API 快照协议工作,不需要项目共享卷
- 通过环境变量切换服务地址,用反向代理统一入口
- 把 API 侧
storage/projects从本地目录换成对象存储或共享存储适配层 - API 保持元数据和快照出口,二进制文件从存储层读取
- 继续把 API 侧快照读取接入存储适配层,减少对本地
storage/projects的直接依赖
- API 异步化编译请求
- 增加任务队列和状态查询接口
- Web 轮询或订阅编译结果