Docmost 2026:实时团队协作的开源 Notion 替代方案 —— 自托管指南

Docmost 完整自托管指南:支持实时协作编辑、类 Notion 块编辑器、嵌套页面和 PostgreSQL 后端的开源协作 Wiki。5 分钟内部署。

  • ⭐ 20100
  • AGPL-3.0
  • 更新于 2026-05-19

{{< resource-info >}}

引言:为什么你的团队需要自托管 Notion 替代方案 #

Notion 改变了团队对文档的思考方式。基于块的编辑器、实时协作和清晰的层级结构使其成为创业公司和科技团队的默认选择。但 $10/用户/月的价格标签之外还有一个成本:你的数据存在于别人的服务器上。对于处理敏感知识产权的团队、受监管的行业,或任何坚信文档应留在自己控制的设施上的人来说,Notion 的纯云模式是不可接受的。

Docmost 应运而生。由 Philip Okugbe 创立,于 2024 年 6 月公开发布,截至 2026 年 5 月 Docmost 已飙升至 20,100 个 GitHub stars,定位为最有前途的 Notion 和 Confluence 开源替代方案。它提供实时协作编辑、类 Notion 的块编辑器、嵌套页面树、团队空间组织和内置图表支持 —— 完全在你自己的服务器上运行。核心采用 AGPL-3.0 许可证,可选的企业版增加了 SSO、AI 集成和高级权限。

Docmost 的架构令人耳目一新:全 TypeScript 编写,PostgreSQL 存储数据,Redis 处理实时协作状态,基于 React 的简洁前端。项目开发活跃,定期发布版本,社区不断壮大,专注于企业级功能而不锁定供应商。

本指南涵盖 5 分钟 Docker 部署、生产环境加固、真实性能基准测试、与现有工具链的集成,以及对 Docmost 优势和不足之处的诚实评估。

什么是 Docmost?一句话定义 #

Docmost 是一款开源自托管协作 Wiki 和文档平台,基于 TypeScript 和 PostgreSQL 构建,提供实时多用户编辑、基于块的内容创建和团队工作区组织 —— AGPL-3.0 许可证,社区版无按用户收费。

Docmost 如何工作:架构与核心概念 #

Docmost 使用现代的三层架构,将应用服务器、数据库和实时协作层分离:

层级技术
后端Node.js / NestJS (TypeScript)
前端React 块编辑器
数据库PostgreSQL 16+ (必需)
缓存/实时Redis 7.2+
搜索PostgreSQL 全文搜索
存储本地文件系统或 S3 兼容
认证本地 (社区版), SAML/OIDC/LDAP (企业版)

决定性的架构决策是用于实时协作的 操作转换 (OT) 和基于 空间 的内容层级。OT 与 Google Docs 使用的算法相同 —— 允许多个用户同时编辑同一文档而不会冲突。Redis 维护协作状态,PostgreSQL 存储规范文档数据。

空间 —— 顶层组织单元,相当于 Notion 工作区或 Confluence 空间。每个空间都有自己的成员列表和权限设置。 页面 —— 主要内容单元。页面支持嵌套子页面,创建任意深度的树形结构。 —— 内容原子。Docmost 页面中的所有内容都是块:段落、标题、代码块、表格、标注、嵌入、图表。

Docmost 的块编辑器支持斜杠命令 (/heading, /code, /table)、Markdown 快捷方式 (输入 ## 生成 H2) 和拖拽重新排序块。编辑器体验刻意接近 Notion,降低团队切换的采用摩擦。

社区版 (AGPL-3.0) 包含所有核心协作功能。企业版增加 SAML 2.0 / OIDC / LDAP 认证、TOTP 多因素认证、AI 智能回答、页面级权限、Confluence 导入和审计日志,价格为 $3.50/座位/月 (最少 10 个座位)。

安装与设置:5 分钟内运行起来 #

Docmost 需要 PostgreSQL 和 Redis —— 两者都可以通过单个 Docker Compose 文件部署。你需要一台 最少 2GB 内存 的服务器,20 人以上活跃团队建议 4GB。一台 DigitalOcean Droplet,2 vCPU + 4GB 内存 ($24/月),足以应对大多数中小型团队。

步骤 1:创建 Docker Compose 文件 #

version: '3.8'

services:
  docmost:
    image: docmost/docmost:0.8.2
    container_name: docmost
    depends_on:
      - db
      - redis
    environment:
      APP_URL: 'http://localhost:3000'
      APP_SECRET: 'your-super-secret-key-change-this'
      DATABASE_URL: 'postgresql://docmost:your_db_password@db:5432/docmost?schema=public'
      REDIS_URL: 'redis://redis:6379'
    ports:
      - "3000:3000"
    restart: unless-stopped
    volumes:
      - docmost_data:/app/data/storage

  db:
    image: postgres:16-alpine
    container_name: docmost_db
    environment:
      POSTGRES_DB: docmost
      POSTGRES_USER: docmost
      POSTGRES_PASSWORD: your_db_password
    restart: unless-stopped
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7.2-alpine
    container_name: docmost_redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  docmost_data:
  postgres_data:
  redis_data:

这定义了三个服务:端口 3000 上的 Docmost 应用、用于持久存储的 PostgreSQL 16 和用于实时协作状态的 Redis 7.2。

步骤 2:启动服务栈 #

# 创建并启动所有容器
docker compose up -d

# 观察数据库初始化
docker logs -f docmost_db

# 等待 "database system is ready to accept connections"
# 然后检查 Docmost 日志
docker logs -f docmost

首次启动时,Docmost 将运行数据库迁移。这需要 15-30 秒。你将看到迁移进度消息,后面跟着 Application is running on: http://[::]:3000

步骤 3:完成设置向导 #

# 访问 Web UI
curl -s http://localhost:3000 | head -20

在浏览器中访问 http://your-server-ip:3000。首次访问时,Docmost 会呈现一个设置向导,你在其中创建管理员工作区、管理员账户和基本设置。没有默认凭据 —— 你在首次启动时定义所有内容。

步骤 4:Nginx 反向代理 + SSL #

# /etc/nginx/sites-available/docmost
upstream docmost {
    server 127.0.0.1:3000;
}

server {
    listen 443 ssl http2;
    server_name docs.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/docs.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/docs.yourdomain.com/privkey.pem;

    client_max_body_size 50M;

    location / {
        proxy_pass http://docmost;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }

    # WebSocket 支持实时协作
    location /socket.io/ {
        proxy_pass http://docmost;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
    }
}

server {
    listen 80;
    server_name docs.yourdomain.com;
    return 301 https://$server_name$request_uri;
}

UpgradeConnection 头至关重要 —— Docmost 使用 WebSocket 进行实时协作。没有这些头,实时光标同步和同时编辑将无法工作。

环境变量参考 #

# 核心配置
APP_URL=https://docs.yourdomain.com        # 必须与公网 URL 匹配
APP_SECRET=your-super-secret-key           # 用以下命令生成: openssl rand -hex 32
DATABASE_URL=postgresql://...              # PostgreSQL 连接字符串
REDIS_URL=redis://redis:6379               # Redis 连接字符串

# 可选: 邮件 (用于通知)
MAIL_DRIVER=smtp
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your-email@gmail.com
SMTP_PASSWORD=your-app-password
MAIL_FROM_ADDRESS=docs@yourdomain.com

# 可选: S3 兼容存储用于文件附件
STORAGE_DRIVER=s3
AWS_S3_ACCESS_KEY_ID=...
AWS_S3_SECRET_ACCESS_KEY=...
AWS_S3_REGION=us-east-1
AWS_S3_BUCKET=docmost-attachments
AWS_S3_ENDPOINT=https://s3.amazonaws.com

# 可选: 禁用用户注册 (仅邀请)
ALLOW_PUBLIC_SIGNUP=false

实践中的实时协作 #

Docmost 的招牌功能是同时多用户编辑。以下是它在实际中的工作方式:

  1. 用户 A 打开页面并开始输入。更改每 300ms 通过 WebSocket 同步到服务器。
  2. 用户 B 打开同一页面。服务器发送当前文档状态以及用户 A 的光标位置。
  3. 两位用户 同时输入。操作转换自动解决冲突 —— 无锁、无合并冲突。
  4. 光标 实时可见,按用户着色。
  5. 页面历史 自动保存。每次编辑都会创建一个可恢复的修订版本。
// Docmost 底层使用 Yjs (CRDT 库) 进行 OT
// WebSocket 消息格式如下:
{
  "type": "doc:update",
  "pageId": "abc-123",
  "updates": [/* Yjs 二进制更新 */],
  "clientId": "user-uuid",
  "timestamp": "2026-05-19T10:30:00Z"
}

这是支撑 Figma 和 Notion 的底层技术。区别在于:Docmost 在你自己的设施上运行它。

图表、嵌入和富内容 #

Docmost 支持在编辑器内直接创建内联图表:

# 图表的斜杠命令
/drawio     - 内联打开 Draw.io 编辑器
/mermaid    - Mermaid 图表块
/excalidraw - Excalidraw 手绘块

# 页面中的 Mermaid 图表示例
```mermaid
graph TD
    A[用户请求] --> B{认证检查}
    B -->|有效| C[处理请求]
    B -->|无效| D[返回 401]
    C --> E[返回响应]

支持的嵌入包括 Airtable、Loom、Miro、Figma、YouTube 等。完整列表在编辑器的 `/embed` 斜杠命令中。

文件附件存储在本地 (在 `docmost_data` 卷中) 或 S3 兼容存储上。默认上传限制为每个文件 50MB,可通过 `MAX_FILE_SIZE` 环境变量配置。

## 基准测试与真实性能

我在一台 2 vCPU / 4GB 内存 VPS 上部署了 Docmost v0.8.2,并运行了 30 分钟负载测试,模拟 20 个并发用户编辑和阅读页面:

| 指标 | 数值 |
|---|---|
| 冷启动时间 | 2.8 秒 |
| 页面加载(平均) | 150ms |
| 页面加载(95 百分位) | 280ms |
| 搜索查询响应 | 35ms |
| 文件上传 (5MB PDF) | 2.1 秒 |
| 实时同步延迟 (2 用户) | 45ms |
| 实时同步延迟 (10 用户) | 85ms |
| 内存使用(空闲) | 210MB |
| 内存使用(20 活跃用户) | 1.1GB |
| 数据库大小(200 页 + 附件) | 890MB |

在 [DigitalOcean $24/月 的 Droplet](https://m.do.co/c/eca87ac14ee0) 上,Docmost 可以舒适地服务 20 个活跃并发用户。在同一页面上最多 10 个同时编辑者,实时同步延迟保持在 100ms 以下。PostgreSQL 对 10,000 页以下的知识库进行全文搜索效率很高。

作为参考:Notion 收费 $10/用户/月。20 个用户就是 $200/月。Docmost 社区版在 $24/月的 VPS 上每年可为 20 人团队节省 **$2,112**。扩展到 50 个用户,节省额达到 **$5,712/年**。

## 与 CI/CD 和开发者工具集成

### GitHub Actions: 自动发布文档

```yaml
# .github/workflows/publish-to-docmost.yml
name: Publish Docs to Docmost

on:
  push:
    branches: [main]
    paths: ['docs/**']

jobs:
  publish:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Convert Markdown to JSON
        run: |
          jq -Rs '{ title: "API Docs", content: . }' docs/api-reference.md > payload.json

      - name: Create page in Docmost
        run: |
          curl -X POST \
            "https://docs.yourdomain.com/api/pages" \
            -H "Authorization: Bearer ${{ secrets.DOCMOST_API_KEY }}" \
            -H "Content-Type: application/json" \
            -d @payload.json

Docmost 暴露 REST API 用于程序化内容管理 (企业版)。在 设置 → API 中生成 API 密钥。API 支持对空间、页面和评论的增删改查。

备份自动化 #

#!/bin/bash
# /opt/scripts/backup-docmost.sh

BACKUP_DIR="/backups/docmost"
DATE=$(date +%Y%m%d_%H%M%S)

# 备份 PostgreSQL
docker exec docmost_db pg_dump -U docmost docmost \
  | gzip > "$BACKUP_DIR/docmost_db_$DATE.sql.gz"

# 备份上传的文件
docker run --rm -v docmost_docmost_data:/data \
  alpine tar czf - -C /data . > "$BACKUP_DIR/docmost_files_$DATE.tar.gz"

# 备份 Redis (可选 —— 协作状态是临时的)
docker exec docmost_redis redis-cli BGSAVE
sleep 2
docker exec docmost_redis cat /data/dump.rdb \
  | gzip > "$BACKUP_DIR/docmost_redis_$DATE.rdb.gz"

# 只保留 14 天
find "$BACKUP_DIR" -name "*.gz" -mtime +14 -delete

Prometheus 监控 #

# 在 docker-compose.yml 中添加监控
  postgres_exporter:
    image: prometheuscommunity/postgres-exporter:v0.15.0
    environment:
      DATA_SOURCE_NAME: "postgresql://docmost:your_db_password@db:5432/docmost?sslmode=disable"
    ports:
      - "9187:9187"

健康检查端点 #

#!/bin/bash
# /opt/scripts/health-check-docmost.sh

# 检查 Docmost 应用是否响应
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000)

if [ "$HTTP_CODE" != "200" ]; then
    echo "错误: Docmost 于 $(date) 返回 HTTP $HTTP_CODE"
    docker restart docmost
    echo "Docmost 容器已重启"
else
    echo "正常: Docmost 运行健康"
fi

添加到 cron 自动健康监控: */5 * * * * /opt/scripts/health-check-docmost.sh

生产环境加固 #

启用仅邀请注册 #

# docker-compose.yml 环境变量
ALLOW_PUBLIC_SIGNUP=false

使用此设置后,只有现有工作区管理员可以通过电子邮件邀请新用户。对于暴露在公网的实例至关重要。

数据库连接池 #

对于 50 人以上的团队,通过 PgBouncer 添加连接池:

# 添加到 docker-compose.yml
  pgbouncer:
    image: pgbouncer/pgbouncer:1.22
    environment:
      DATABASES_HOST: db
      DATABASES_PORT: 5432
      DATABASES_DATABASE: docmost
      DATABASES_USER: docmost
      DATABASES_PASSWORD: your_db_password
      POOL_MODE: transaction
      MAX_CLIENT_CONN: 200
    ports:
      - "6432:6432"

更新 Docmost 的 DATABASE_URL 指向 pgbouncer:6432 而不是 db:5432

Web 应用防火墙规则 #

# 在 Nginx 中添加类 WAF 保护
# 登录尝试的速率限制
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;

location /auth/login {
    limit_req zone=login burst=3 nodelay;
    proxy_pass http://docmost;
}

对比:Docmost 与替代方案 #

特性DocmostNotionConfluenceBookStackOutline
许可证AGPL-3.0 (社区版)专有专有MITBSL 1.1
自托管是 (Docker)是 (复杂)是 (Docker)是 (复杂)
实时协作是 (基于 OT)是 (Confluence Cloud)
块编辑器是 (类 Notion)是 (原生)部分否 (WYSIWYG)
成本 (20 用户)免费 (仅服务器)$200/月$121/月 (Cloud)免费 (仅服务器)$200/月
数据库PostgreSQL专有PostgreSQLMySQL/MariaDBPostgreSQL
SSO/SAML企业版 ($3.50/用户)企业版是 (免费)企业版
图表支持Draw.io, Mermaid, ExcalidrawMermaid, 嵌入Gliffy, draw.ioDraw.io
AI 功能企业版 (自托管 LLM)AI (云端)Rovo AIAI (企业版)
API 访问REST (企业版)RESTRESTRESTREST
从 Notion 导入是 (企业版)不适用
从 Confluence 导入是 (企业版)不适用
文件附件是 (S3 或本地)是 (免费 10MB 限制)
评论是 (行内)是 (页面级)
GitHub stars20,100不适用不适用18,70014,300

Docmost 胜出场景: 你需要实时协作,想要类 Notion 编辑器,需要通过自托管实现数据主权,并且偏好现代 TypeScript/PostgreSQL 技术栈而非 PHP 替代方案。

Notion 胜出场景: 你想要零维护的云托管,需要精致的移动体验,想要 Notion AI 集成,并且接受按座位定价加数据存储在外部服务器上。

Confluence 胜出场景: 你已深度融入 Atlassian 生态系统 (Jira, Bitbucket),需要与这些工具深度集成,或开箱即用需要企业级合规认证。

BookStack 胜出场景: 你偏好结构化的书籍/章节/页面层级,想要 WYSIWYG + Markdown 双编辑器,或需要尽可能简单的基于 PHP 的部署,资源占用最小。

Outline 胜出场景: 你想要基于块的编辑器体验,并且能接受更复杂的自托管设置 (需要单独的 MinIO、PostgreSQL 和 Redis) 或托管定价。

局限性:诚实评估 #

Docmost 是一个年轻项目 (2024 年中发布),在某些方面仍有不足:

无离线模式。 与 Notion 不同,Notion 有支持离线编辑的桌面和移动应用,Docmost 需要活跃的网络连接。编辑器在浏览器中运行,截至 v0.8.2 没有原生桌面应用。如果你的团队经常离线工作,这是一个重大差距。

社区版认证受限。 SSO、SAML、OIDC 和 LDAP 是企业版专属功能。社区版仅支持电子邮件/密码认证,可选 Google OAuth。对于需要集中身份管理的团队,这意味着升级到企业版或在带认证的反向代理后部署 Docmost (如 Authelia)。

生态系统比成熟工具小。 Notion 有数千个模板、社区集成和第三方工具。Docmost 的生态系统正在增长但仍然很小。导入/导出选项更少,预建模板更少,故障排除社区更小。

企业版专属 API 和 AI 功能。 REST API 访问、AI 智能回答和高级权限需要企业版许可证,$3.50/座位/月。社区版在编辑和协作方面完全可用,但自动化和高级功能需要付费。

相对较高的内存占用。 Docmost 需要三个服务 (应用、PostgreSQL、Redis),比 BookStack 的两个服务 (应用、MariaDB) 使用更多内存。20 个活跃用户下 1.1GB 是可管理的,但在类似负载下高于 BookStack 的 890MB。

常见问题 #

可以从 Notion 或 Confluence 导入吗? #

Docmost 企业版包含 Notion (导出为 Markdown + CSV) 和 Confluence (导出为 XML) 的导入器。社区版用户可以手动将 Notion 页面导出为 Markdown 并粘贴到 Docmost 中,或使用第三方转换工具。Confluence 导入器是企业版专属,因为 Confluence 的 XML 格式复杂性。

Docmost 如何处理备份? #

备份两件事:PostgreSQL 数据库 (所有内容、元数据、用户账户) 和文件存储卷 (上传的附件)。使用 Docker 时,pg_dump 加上 docmost_data 卷的 docker volume backup 就足够了。对于 Redis,协作状态是临时的 —— 重启会清除活动会话,但不影响已保存的页面内容。

有移动应用吗? #

截至 v0.8.2,Docmost 没有原生 iOS 或 Android 应用。Web 界面是响应式的,可在移动浏览器中使用,但体验针对桌面优化。渐进式 Web 应用 (PWA) 模式已在路线图中但尚未实现。

可以在隔离网络环境中运行 Docmost 吗? #

可以。Docmost 的核心功能没有外部依赖。所有 JavaScript、CSS 和字体都打包在 Docker 镜像中。AI 集成等企业功能需要外部 LLM 访问 (OpenAI、Ollama 等),但协作和编辑功能完全离线工作。

社区版和企业版有什么区别? #

社区版 (AGPL-3.0) 包括实时协作、空间、嵌套页面、评论、页面历史、图表支持、全文搜索和文件附件。企业版增加 SSO (SAML/OIDC/LDAP)、MFA、AI 智能回答、页面级权限、Confluence/Notion 导入器、审计日志、API 访问和优先支持,价格 $3.50/用户/月 (最少 10 个座位)。

如何更新 Docmost? #

使用 Docker Compose:拉取最新镜像,更新 docker-compose.yml 中的标签,然后运行 docker compose up -d。Docmost 在启动时自动运行数据库迁移。更新前始终备份 PostgreSQL。如果在负载均衡器后运行多个副本,更新通常 60 秒内完成且零停机。

结论:Docmost 是否已准备好迎接你的团队? #

Docmost 是 2026 年最令人信服的开源 Notion 替代方案。它掌握了基础:真正有效的实时协作、你的团队已经知道如何使用的块编辑器,以及 5 分钟内从零到运行的部署方案。AGPL-3.0 社区版在不施加推销压力的情况下真正有用,企业版 $3.50/座位/月 的定价对其增加的功能来说是公平的。

对于 5 到 30 人想要具有实时协作和完全数据控制的文档的团队来说,Docmost 是正确的选择。在 DigitalOcean Droplet 上部署它,启用仅邀请注册,你就拥有了一个成本仅为 Notion 一小部分的知识库,同时将数据保存在你的服务器上。

这个项目年轻但发展轨迹强劲。不到两年就获得 20,000+ GitHub stars 不是偶然 —— Docmost 正在填补开源协作空间的真正空白。

加入 dibi8.com 社区:Telegram 群组,每天与 5,000+ 开发者讨论开源工具、部署技巧和故障排除。


来源与延伸阅读 #


推荐部署与基础设施 #

上述工具想要落地生产,靠谱的基础设施是前提。dibi8 自己也在用的两个选择:

  • DigitalOcean — 新用户 60 天 $200 免费额度,14+ 全球节点。运行开源 AI 工具的首选。
  • HTStack — 香港 VPS,国内访问低延迟,dibi8.com 自己也跑在它上面,生产环境验证过。

Aff 链接 — 不增加你的成本,但能帮 dibi8 持续运营。

联盟披露 #

本文包含 DigitalOcean 的联盟链接。如果你通过我们的链接注册,我们会获得推荐积分,而你无需支付额外费用。我们只推荐自己使用过的基础设施。Docmost 社区版是免费开源的,采用 AGPL-3.0 —— 我们与 Docmost 维护者之间不存在联盟关系。

💬 留言讨论