自托管服务
suitenumerique/docs avatar
suitenumerique/docs

La Suite Docs:用 Django 和 React 打造的可自托管协作编辑器,但注意 GPL 包边界

Docs 是一款开源文本编辑器:原生网络,专为实时协作、结构清晰的文档和子文档而设计,具有数据的完全所有权。专为与 Django 和 React 一起扩展而构建。

16,820 个 Star631 个 ForkPythonMIT

秒懂

它是什么?
La Suite Docs 是一个面向公共机构和企业的开源协作编辑器,强调数据所有权和结构化文档。本文基于其 README 和仓库信息,分析其机制、部署方式、许可证边界,并给出适用性判断。
适合谁用?
适合需要完全掌控数据、且愿意投入 Docker Compose 或 Kubernetes 运维的团队,尤其是公共机构和注重隐私的企业。不适合希望开箱即用、不关心底层存储和许可证细节的小团队,因为默认构建包含 GPL 包,可能污染你的分发。
能商用吗?
可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

它解决什么问题:Notion 和 Google Docs 的可自托管替代

La Suite Docs 瞄准的是那些不想把文档数据交给第三方云服务的团队。它的 README 明确说自己是 Notion 或 Google Docs 的开源替代品,重点放在实时协作、结构化文档、知识组织和数据所有权。目标用户是公共组织、企业和开放社区。这类用户通常有合规要求,比如数据必须存储在本国境内,或者需要审计日志。Docs 将 Django 作为后端,React 前端,整个项目以 MIT 许可证发布,但有一个重要的例外,后面会细说。它的存在本身说明,协作编辑器市场不仅有商业 SaaS,也有自托管的需求。

架构与数据流:Django REST Framework 加 Next.js 前端

从 README 的 Credits 部分可以看到,Docs 构建在 Django REST Framework 和 Next.js 之上。后端提供 REST API,前端是 Next.js 应用。文档没有给出完整的架构图,但提到了两个关键接口:资源服务器 API 和服务器到服务器 API。后者允许外部服务通过配置 DJANGO_SERVER_TO_SERVER_API_TOKENS 来推送数据,比如 Meet 的会议转录。这意味着 Docs 不只是编辑器,它还是一个可以接收外部数据的平台。实时协作可能依赖 WebSocket 或类似机制,但 README 没有具体说明,因此不能假设。数据存储方面,开发环境使用 Minio 作为 S3 兼容存储,生产环境可以换成任何 S3 兼容服务。这个设计让部署者可以自由选择存储后端,但同时也意味着你必须自己管理对象存储。

部署与开发:从 make bootstrap 到生产环境

本地开发环境要求 Docker、Docker Compose 和 GNU Make。启动项目只需两条命令:make bootstrap FLUSH_ARGS='--no-input' 和 make run。bootstrap 会构建 app-dev 和 frontend-dev 容器,安装依赖,运行数据库迁移,并编译翻译文件。开发服务器在 https://localhost:3000,默认凭据是用户名 impress 密码 impress。前端开发可以脱离 Docker 运行,使用 make frontend-development-install 和 make run-frontend-development。后端测试可以不依赖 Docker,但需要覆盖 env.d/development/common 中的一些 URL 和端口值,具体参考 env.d/development/common.test。生产部署支持 Kubernetes 和 Docker Compose,还有社区提供的 Nix 和 YunoHost 方法。README 警告说,某些高级功能(如 PDF 导出)依赖 Blocknote 的 XL 包,这些包是 GPL 许可,与 MIT 不兼容。你可以用 PUBLISH_AS_MIT=true 构建一个不包含这些功能的镜像。

AI 功能的两代设计:选择替换与协作式光标

Docs 的 AI 功能是可选配置,模型无关,网关无关。你只需要提供 API 密钥和 URL。第一代 AI 功能是简单的选择替换工作流:你选中一段文字,AI 根据你的指令生成替换内容。这个设计把选择作为上下文,指令作为操作,输出直接替换原文。第二代 AI 功能基于 BlockNote AI 集成,目前是 beta 状态。它引入了一个 AI 工具栏,你可以在选中文字后弹出提示,接受、拒绝或迭代 AI 反馈。更特别的是 AI 光标,它像一个协作者一样在文档中移动,可以与文档交互。第二代还利用文档上下文,而不仅仅是当前选择。这意味着 AI 能参考整个文档的内容来生成回复。这种设计比第一代更强大,但也更复杂,而且依赖 BlockNote 的 AI 特性,可能带来额外的依赖和许可证问题。

许可证陷阱:MIT 外壳下的 GPL 组件

这是 Docs 最需要警惕的地方。项目整体以 MIT 许可证发布,但 README 明确警告,导出 PDF 等高级功能依赖 Blocknote 的 XL 包,这些包是 GPL 许可,不是 MIT 兼容的。如果你直接构建默认镜像,你的分发物中可能包含 GPL 代码。对于想商用或闭源分发的团队,这是致命问题。解决方案是使用 PUBLISH_AS_MIT=true 环境变量构建,这样会生成一个不包含非 MIT 功能的镜像。但代价是你失去了 PDF 导出等功能。这个权衡必须在部署前决定,而不是事后补救。另外,项目是数字公共产品(Digital Public Goods),这意味着它可能符合某些国际组织的标准,但这不是许可证的替代。

互操作性与实际用例:Meet 转录推送

Docs 提供了资源服务器 API 和服务器到服务器 API,这让它能够与外部系统集成。README 给出了一个具体例子:如果你运行 Meet 实例,通过配置 DJANGO_SERVER_TO_SERVER_API_TOKENS,可以将会议转录推送到 Docs,并给请求的用户授予访问权限。这个例子展示了 Docs 的定位:它不只是一个编辑器,而是一个知识管理平台,可以从其他工具接收内容。这种设计对于公共机构很有吸引力,因为它们可能已经运行了多个自托管服务。但要注意,这个集成需要你同时运行 Meet 和 Docs,并且正确配置 API 令牌。文档没有详细说明 API 的认证机制,所以实际集成可能需要阅读更多文档。

维护与升级成本:活跃开发,但需关注版本节奏

仓库最近一次推送是 2026 年 8 月,发布了 v5.5.0。从版本号看,项目处于活跃开发状态,大约每月一个 minor 版本。这带来两个影响:一是新功能迭代快,二是升级可能需要频繁处理迁移。README 建议在拉取新代码后运行 make bootstrap,这会执行数据库迁移。对于生产环境,你需要一个稳定的升级流程。项目使用 Crowdin 进行翻译,说明有多语言社区贡献。Matrix 频道是主要的交流渠道。维护成本方面,由于 Docs 依赖 Django 和 React,你需要熟悉这两个框架才能进行深度定制。对象存储和数据库也需要日常运维。如果你不想承担这些,可以考虑托管服务,但那就违背了数据所有权的初衷。

编辑结论

适合需要完全掌控数据、且愿意投入 Docker Compose 或 Kubernetes 运维的团队,尤其是公共机构和注重隐私的企业。不适合希望开箱即用、不关心底层存储和许可证细节的小团队,因为默认构建包含 GPL 包,可能污染你的分发。采用前必须验证:第一,确认你的导出需求是否依赖 PDF 等 XL 包,若是,则需接受 GPL 或改用 PUBLISH_AS_MIT=true 构建并放弃这些功能;第二,检查你的对象存储(如 Minio 或 S3)配置是否与项目文档一致;第三,如果计划商用分发,请咨询法律意见,明确 MIT 与 GPL 组件的边界。最终判断:Docs 是一个架构清晰的协作编辑器,但其许可证混用要求你在部署前做出明确选择。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记