Docker 部署 Docmost 详细教程

Docmost 被很多人视为 "Notion 的轻量化私有部署替代品"

相比于重量级的 Confluence 或者功能极其复杂的 Outline,Docmost 的优点主要集中在以下几个方面:

  1. 极致的"开箱即用"与轻量化
  • 部署简单 :正如你刚才体验到的,通过一个简单的 docker-compose.yml 文件和三个镜像(主程序、Postgres、Redis)就能跑起来。它不像有些开源工具(如 Appflowy)部署过程极其繁琐。
  • 性能出色:它采用 Node.js 开发,内存占用相对较低,在低配云服务器或 NAS 上运行非常流畅,响应速度极快。
  1. 优秀的实时协作体验 (Real-time Collaboration) 这是 Docmost 的杀手锏。
  • 多人同时编辑:它支持类似 Google Docs 或 Notion 的多人实时在线编辑,你可以看到其他人的光标位置和实时修改内容。
  • WebSocket 驱动:底层基于 Yjs 等成熟的协同算法,确保了编辑冲突极少,同步几乎无延迟。
  1. 极简且现代的 UI/UX
  • Notion 风格的块编辑器 :支持 / 指令快速插入标题、表格、列表、代码块、数学公式 ( L a T e x LaTex LaTex) 等。
  • 无干扰设计:界面非常干净,没有多余的边框和复杂的菜单,用户上手几乎零学习成本。
  1. 灵活的内容组织架构
  • Spaces (空间):你可以为技术、行政、产品分别创建独立的空间。
  • 无限层级:文档支持嵌套,你可以像文件管理器一样自由组织文档结构。
  • 权限控制:支持细粒度的权限分配(Owner, Manager, Editor, Viewer),适合团队办公。

以windows系统举例:通过 Docker 部署 Docmost 非常方便,主要流程与 Linux 类似,但针对 Windows 环境(特别是 Docker Desktop)有一些需要注意的细节。

以下是详细的操作指南:

1. 环境准备

  • 安装 Docker Desktop :确保你已经安装并启动了 Docker Desktop for Windows
  • 启用 WSL 2 :建议在 Docker Desktop 设置中勾选 "Use the WSL 2 based engine",这能提供更好的性能和兼容性。
  • 打开终端 :建议使用 PowerShellWindows Terminal,而不是传统的 CMD。

2. 创建部署目录

在 Windows 上找一个你方便管理的位置(例如 D 盘或用户文档目录下):

powershell 复制代码
mkdir C:\docmost-app
cd C:\docmost-app

3. 创建配置文件

在该目录下创建一个名为 docker-compose.yml 的文件。你可以使用记事本或 VS Code 打开,并粘贴以下内容:

yaml 复制代码
services:
  docmost:
    image: docmost/docmost:latest
    container_name: docmost
    depends_on:
      - db
      - redis
    environment:
      # 如果只是本地测试,保持 localhost;如果局域网访问,改为你的电脑 IP
      APP_URL: "http://localhost:3000"
      # 必须修改:随机长字符串,用于 session 加密,注意,长度一定要大于32位
      APP_SECRET: "WindowsSecretKey123456"
      # 数据库连接
      DATABASE_URL: "postgresql://docmost:yourpassword@db:5432/docmost"
      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: yourpassword
    restart: unless-stopped
    volumes:
      - db_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    container_name: docmost-redis
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  docmost_data:
  db_data:
  redis_data:

4. 启动容器

在 PowerShell 中执行以下命令启动:

powershell 复制代码
docker-compose up -d

启动完成后,你可以在 Docker Desktop 的 Dashboard 界面看到三个运行中的容器:docmostdocmost-dbdocmost-redis


5. 访问与初始化

  1. 打开浏览器 :访问 http://localhost:3000
  2. 设置管理员:你将看到 Docmost 的初始化页面,按照提示创建管理员账号。
  3. 开始使用:进入后台后,你可以创建 Space(空间)并开始编写文档。

6. Windows 环境下的常见问题

  • 端口占用 :如果 3000 端口被其他程序占用,可以在 docker-compose.yml 中将 "3000:3000" 改为 "3001:3000",然后通过 localhost:3001 访问。
  • 持久化数据位置 :在上面的配置中,数据存储在 Docker 管理的 Named Volumes 中。如果你想在 Windows 文件夹里直接看到数据库文件,可以将 volumes 改为相对路径(例如 ./db_data:/var/lib/postgresql/data),但注意这在 WSL 2 模式下有时会有文件权限问题。
  • 关机重启 :Docker Desktop 默认随 Windows 启动,只要 Docker 启动了,设置了 restart: unless-stopped 的 Docmost 也会自动运行。

7. 升级更新步骤

当 Docmost 发布新版本时,在 C:\docmost-app 目录下执行:

powershell 复制代码
docker-compose pull
docker-compose up -d

8. 常见问题

Docmost 对安全性要求较高,要求 APP_SECRET 必须至少包含 32 个字符。

直接在 docker-compose.yml 中修改该变量,或者按照以下步骤生成一个强随机字符串。

解决方法

  1. 生成一个 32 位以上的字符串

    你可以手动输入一串很长的随机字符,或者在 Windows PowerShell 中运行以下命令来生成一个:

    powershell 复制代码
    -join ((65..90) + (97..122) + (48..57) | Get-Random -Count 32 | % {[char]$_})
  2. 修改 docker-compose.yml

    找到 docmost 服务下的 environment 部分,更新 APP_SECRET。例如:

    yaml 复制代码
    environment:
      APP_URL: "http://localhost:3000"
      # 确保下面这一串字符超过 32 位
      APP_SECRET: "aB3kL9mP2qR5sT8uV1wX4yZ7iO0nM2qW5eR8tY1uI4" 
      DATABASE_URL: "postgresql://docmost:yourpassword@db:5432/docmost"
      REDIS_URL: "redis://redis:6379"
  3. 重新应用配置

    修改并保存文件后,在终端执行:

    powershell 复制代码
    docker-compose up -d

为什么会有这个限制?

Docmost 使用这个密钥来对用户会话(Session)和敏感数据进行加密。如果密钥太短,容易受到暴力破解攻击,因此系统强制要求 l e n g t h ≥ 32 length \ge 32 length≥32 以确保安全性。

相关推荐
阿沁QWQ2 小时前
docker使用
docker·容器·perl
杨浦老苏12 小时前
开源的AI编程工作站HolyClaude
人工智能·docker·ai·编辑器·开发·群晖
普通网友17 小时前
《K8s 自动扩缩容:基于 CPU / 内存的 HPA 配置》
docker·容器·kubernetes
zfoo-framework1 天前
docker compose安装gitea实现公司内部开发git私有仓库
docker·容器·gitea
无巧不成书02181 天前
基于WSL 2的Docker远程开发全栈实战指南
运维·docker·容器·docker desktop·wsl 2·vs code远程开发·容器化开发
Renhao-Wan1 天前
Docker 核心原理详解:镜像、容器、Namespace、Cgroups 与 UnionFS
java·后端·docker·容器
赵庆明老师1 天前
Linux Docker打包
linux·运维·docker
Eloudy1 天前
docker pull ubuntu:22.04 失败的解决记录
运维·docker·容器
taWSw5OjU1 天前
Docker] Docker中`overlay2`磁盘占用爆满的清理方案
docker·容器·eureka