Docmost:开源团队知识库部署教程,支持实时协作的 Notion 替代

Docmost 是一款现代化的开源团队知识库与协作文档平台,定位为 Notion、Confluence 的自托管替代方案。它提供富文本编辑器、嵌套页面结构、实时多人协作、空间(Space)权限管理、评论、页面历史版本等核心功能,界面简洁现代,上手门槛极低。对于不希望将内部知识沉淀在第三方 SaaS 上的团队,Docmost 是目前最轻量、部署最简单的选择之一。

与 Notion 相比,Docmost 最大的优势是数据完全自主可控。公司的产品文档、运营 SOP、技术 Wiki、会议记录等核心资产存储在自己的服务器上,不受平台规则变化和账号封禁风险的影响。Docmost 基于 Node.js 后端 + React 前端开发,配合 PostgreSQL 存储结构化数据,Redis 处理实时协作消息,整体架构轻巧,资源占用低。

1 核 2GB 的入门机型即可流畅运行 10-20 人的知识库系统。本文将使用 Docker Compose + Caddy 完成 Docmost 的完整部署配置。


服务器配置

Docmost 是典型的轻量级 Web 应用,空载内存占用约 200-400MB(含 PostgreSQL + Redis),即使在文档量较大的情况下,资源消耗依然可控。1 核 2GB 机型完全满足中小团队需求。

推荐使用雨云服务器 rainyun-com部署 Docmost,注册填优惠码 2026off 领 5 折优惠券,1 核 2GB 机型即可流畅运行,是搭建团队内部知识库性价比最高的选择。

推荐配置:

项目 规格
CPU 1 核
内存 2 GB
磁盘 20 GB SSD(存储文档和附件)
操作系统 Ubuntu 22.04 LTS
带宽 3 Mbps 及以上

环境要求

  • Docker 24.0+
  • Docker Compose v2.20+
  • 已解析到服务器的域名
  • 开放 80/443 端口
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker --version && docker compose version

准备工作

创建目录结构

mkdir -p /opt/docmost
cd /opt/docmost
mkdir -p data/postgres data/redis data/storage

生成 APP_SECRET

Docmost 需要一个用于加密 session 的密钥:

# 生成 64 位随机密钥
openssl rand -hex 32
# 记录输出,填入 APP_SECRET

部署配置

创建 /opt/docmost/docker-compose.yml

version: "3.9"

services:
  docmost:
    image: docmost/docmost:latest
    container_name: docmost
    restart: unless-stopped
    ports:
      - "127.0.0.1:3000:3000"
    volumes:
      - ./data/storage:/app/data/storage
    environment:
      APP_URL: "https://wiki.yourdomain.com"
      APP_SECRET: "${APP_SECRET}"
      DATABASE_URL: "postgresql://docmost:${POSTGRES_PASSWORD}@postgres:5432/docmost?schema=public"
      REDIS_URL: "redis://redis:6379"
      # 邮件配置(用于邀请成员、密码重置)
      MAIL_DRIVER: smtp
      SMTP_HOST: "${SMTP_HOST}"
      SMTP_PORT: "587"
      SMTP_SECURE: "false"
      SMTP_USERNAME: "${SMTP_USERNAME}"
      SMTP_PASSWORD: "${SMTP_PASSWORD}"
      MAIL_FROM_ADDRESS: "noreply@yourdomain.com"
      MAIL_FROM_NAME: "Docmost"
      # 存储配置(本地存储)
      STORAGE_DRIVER: local
      # 时区
      TZ: "Asia/Shanghai"
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    networks:
      - docmost_net

  postgres:
    image: postgres:16-alpine
    container_name: docmost-postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: docmost
      POSTGRES_USER: docmost
      POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
    volumes:
      - ./data/postgres:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U docmost"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - docmost_net

  redis:
    image: redis:7-alpine
    container_name: docmost-redis
    restart: unless-stopped
    volumes:
      - ./data/redis:/data
    command: redis-server --appendonly yes --maxmemory 128mb --maxmemory-policy allkeys-lru
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - docmost_net

networks:
  docmost_net:
    driver: bridge

创建 /opt/docmost/.env

APP_SECRET=your_64_char_hex_secret_here
POSTGRES_PASSWORD=your_strong_postgres_password

# SMTP 配置(可选,用于邀请邮件)
SMTP_HOST=smtp.yourmailprovider.com
SMTP_USERNAME=your-email@yourdomain.com
SMTP_PASSWORD=your-smtp-password

启动服务:

cd /opt/docmost
chmod 600 .env
docker compose up -d
docker compose logs -f docmost

等待日志出现 Server started on port 3000 后,服务启动完成。


Caddy 反向代理

Docmost 使用 WebSocket 进行实时协作同步,Caddy 需要正确处理 WebSocket 升级请求。

编辑 /etc/caddy/Caddyfile

wiki.yourdomain.com {
    reverse_proxy localhost:3000 {
        header_up Host {host}
        header_up X-Real-IP {remote_host}
        header_up X-Forwarded-For {remote_host}
        header_up X-Forwarded-Proto {scheme}

        # 保持长连接(WebSocket 实时协作)
        transport http {
            keepalive 30s
            keepalive_idle_conns 10
        }
    }

    # 附件上传大小限制
    request_body {
        max_size 50MB
    }

    encode gzip

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains"
        X-Content-Type-Options "nosniff"
        X-Frame-Options "SAMEORIGIN"
        Referrer-Policy "strict-origin-when-cross-origin"
    }
}

重载 Caddy:

systemctl reload caddy

核心功能配置

初始化管理员账号

首次访问 https://wiki.yourdomain.com 时,系统会引导创建第一个管理员账号,填写用户名、邮箱和密码后完成初始化。

创建工作区空间(Space)

Docmost 使用「Space」作为顶层组织单位,类似 Notion 的「工作区」或 Confluence 的「空间」:

  1. 点击左侧「+」创建新 Space
  2. 设置 Space 名称(如「产品文档」「工程 Wiki」「运营手册」)
  3. 选择访问权限:公开(组织内所有成员可见)或私有(仅受邀成员)

页面嵌套结构

Docmost 支持无限层级的嵌套页面,组织方式类似文件目录:

产品文档/
├── 产品需求/
│   ├── 2026 Q1 需求清单
│   └── 用户故事地图
├── 接口文档/
│   ├── 认证接口
│   └── 数据接口
└── 版本历史/
    ├── v2.0 更新日志
    └── v1.9 更新日志

在页面标题下方拖拽页面可以快速调整层级结构。

邀请团队成员

进入「Settings」→「Members」→「Invite Member」,输入邮箱地址发送邀请链接。成员点击邮件中的链接后注册账号,自动加入工作区。

若未配置 SMTP,可以在邀请界面直接复制邀请链接手动发送给成员。

权限管理

Docmost 提供精细的权限控制:

  • 工作区级别:管理员、普通成员
  • Space 级别:全部成员可见 / 仅特定成员
  • 页面级别:编辑权限、评论权限、只读权限

使用技巧

富文本编辑快捷键

Docmost 的编辑器支持 Markdown 语法快捷输入:

  • ## + 空格:创建 H2 标题
  • - + 空格:创建无序列表
  • 1. + 空格:创建有序列表
  • ` ````+ 语言名:插入代码块
  • [] + 空格:创建任务复选框

@提及与评论

在文档中输入 @ 可以提及团队成员,触发通知。选中文本后点击「Comment」按钮可以对特定段落添加评论,适合文档审阅场景。

页面历史版本

每次保存自动生成版本快照,通过页面右上角「History」可以查看所有历史版本并恢复到任意时间点。

导出文档

支持将页面导出为 Markdown 或 PDF 格式,便于外部分享或离线查阅。

批量备份

# 备份数据库
docker compose exec postgres pg_dump -U docmost docmost \
  > /backup/docmost-db-$(date +%Y%m%d).sql

# 备份附件存储
tar czf /backup/docmost-storage-$(date +%Y%m%d).tar.gz \
  /opt/docmost/data/storage/

# 自动备份(写入 crontab)
# 0 2 * * * cd /opt/docmost && docker compose exec -T postgres pg_dump -U docmost docmost > /backup/docmost-db-$(date +\%Y\%m\%d).sql

常见问题

Q:实时协作不同步,两个用户编辑同一文档时看不到对方的修改

A:实时协作依赖 WebSocket 连接。检查 Caddy 是否正常代理了 WebSocket 请求,可以在浏览器开发者工具的「Network」标签中查看是否有 ws://wss:// 连接建立。

Q:图片或附件上传失败

A:检查 /opt/docmost/data/storage/ 目录权限是否正确(Docmost 容器需要写入权限),以及 Caddy 的 request_body max_size 是否足够大。

Q:忘记管理员密码如何重置

# 进入容器执行密码重置命令
docker compose exec docmost node -e "
const {hash} = require('argon2');
hash('NewPassword123!').then(h => console.log(h));
"
# 将输出的哈希值更新到数据库
docker compose exec postgres psql -U docmost -d docmost \
  -c "UPDATE users SET password='<hash>' WHERE email='admin@yourdomain.com';"

Q:如何迁移到新服务器

迁移非常简单,只需:

  1. 在新服务器上部署相同的 docker-compose.yml
  2. /opt/docmost/data/ 整个目录传输到新服务器
  3. 恢复数据库:cat docmost-db.sql | docker compose exec -T postgres psql -U docmost docmost
  4. 修改 .env 中的 APP_URL 和 DNS 解析

Q:如何升级 Docmost 版本

cd /opt/docmost
docker compose pull docmost
docker compose up -d
docker compose logs -f docmost

Docmost 支持自动数据库迁移,升级通常无需手动操作。


Docmost 提供了接近 Notion 的使用体验,同时保持了极低的资源消耗和简单的部署流程。对于希望将团队知识库掌握在自己手中的组织,这是目前开源生态中最值得尝试的方案之一。整个部署过程不超过 20 分钟,建议在雨云服务器 rainyun-com的 1 核 2GB 机型上运行,注册填优惠码 2026off 领取 5 折优惠券,以极低的月度成本运营一套功能完整的团队知识管理平台。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐