Many Notes 介绍与选型指南

Many Notes(brufdev/many-notes)v0.18.1 介绍与选型指南:PHP/Laravel 技术栈、数据库+文件系统双写存储、Typesense 容错搜索、OIDC/OAuth 认证与单容器全家桶架构全景,含与 Trilium、Memos、SilverBullet、Outline 的量化选型对比。

Many NotesMany Notes笔记Markdown知识库自托管2026/11/02

Many Notes 介绍与选型指南

目标:说清 Many Notes 是什么、架构如何、适合谁用,并给出与同类自托管笔记系统的量化选型依据。本文全部事实来自官方仓库与发布渠道联网溯源(查询日期 2026-11-01),部署实测见《Many Notes Docker Compose 部署指南》,参数详解见《Many Notes 0.18.1 配置参数详解》,服务器侧命令见《Many Notes 0.18.1 常用 CLI 命令与工具详解》。

一、环境信息

  • 软件名称:Many Notes
  • 官方仓库:https://github.com/brufdev/many-notes(homepage 即仓库本身,无独立官网)
  • 最新版本:v0.18.1(GitHub releases.atom 实查,发布于 2026-10-22,查询日期 2026-11-01)
  • 许可证:MIT(仓库 LICENSE 文件)
  • 主要语言:PHP(仓库页语言标注,PHP 8.4)
  • 技术栈:Laravel 框架 + Inertia 单页前端 + SQLite(默认)/MySQL/MariaDB/PostgreSQL + 内置 Typesense 搜索引擎 + 内置 Laravel Reverb WebSocket 广播
  • 部署形态:官方 Docker 镜像 brufdev/many-notes(Docker Hub),单容器内聚合 nginx、PHP-FPM、队列 worker、Reverb、Typesense 五个进程(serversideup/php 基座镜像 + s6 进程监督)
  • 收录来源:awesome-selfhosted「Note-taking & Editors」分类

💡 同名干扰说明:候选名 Many Notes 在 awesome-selfhosted 的 Knowledge Management / Note-taking 分类下检索得到,唯一实体即 brufdev/many-notes。注意与 App Store 上的同名移动笔记应用、以及 Obsidian 生态中的 "vault"(保险库/仓库目录)概念无关——Many Notes 借用了 vault 一词指代「文件存储空间」,但它是独立 Web 服务,不是 Obsidian 插件。

二、软件概述

Many Notes 是「为简单性设计的 Markdown 笔记 Web 应用」(官方 README 首句定位)。它的核心设计是双写存储:功能数据(用户、节点树、标签、链接关系)存放在数据库中,而笔记内容同时以真实文件形式写入文件系统——官方原文表述为 "your files are also saved in the filesystem, giving you full control over your vault structure and ensuring easy access and portability"。这意味着即使数据库损坏,private 目录中仍保有全部 Vault 的完整副本(官方 UPGRADING.md 在 v0.4 变更说明中明确了这一容灾语义)。

Vault(保险库)是 Many Notes 的顶层存储容器:一个用户可建多个 Vault,既可以把所有笔记放进一个 Vault,也可以按主题拆分多个 Vault。每个 Vault 内部是树形目录(文件夹 + 笔记 + 图片/音频/视频/PDF 附件),支持导入导出(ZIP 格式,保留目录结构与 .md 原文)。

多用户能力完整:注册登录、角色分级(普通用户/管理员/超级管理员)、Vault 级协作邀请(把某个 Vault 授权给其他用户)、OpenID Connect / OAuth 第三方登录。新用户首次进入会自动获得一个 Starter Vault(官方提供的入门模板库)。

三、核心架构

官方 README 与仓库结构可归纳出如下架构分层(查询日期 2026-11-01):

浏览器(Inertia SPA + PWA)
   │ HTTPS(官方建议前置反向代理)
   ▼
┌─────────────────── 单容器 brufdev/many-notes ───────────────────┐
│ nginx(8080/8443) ──► PHP-FPM(Laravel 应用)                   │
│        │                    │                                   │
│        │                    ├─► SQLite  database/sqlite/        │
│        │                    ├─► 队列 worker(database 驱动)      │
│        │                    ├─► Reverb WebSocket(广播,6001)    │
│        │                    └─► Typesense(全文搜索,8108)       │
│        └─► 静态资源 /build/*(Vite 构建产物)                     │
│ 文件系统:storage/app/private/vaults/<用户ID>/<Vault名>/…        │
└─────────────────────────────────────────────────────────────────┘
持久卷:database / logs / private / typesense 四目录

要点解读:

  1. 全家桶单容器:官方 compose 只定义一个 php 服务,nginx、PHP-FPM、队列消费、WebSocket 广播、Typesense 搜索全部由镜像内 s6 进程监督拉起。优点是部署极简、组件间零网络配置;代价是镜像体积大、进程边界粗。
  2. 搜索独立引擎:文件搜索由内置 Typesense 提供,官方 README 明确标注搜索是 "fast and typo-tolerant"(快速且容忍拼写错误),索引数据持久化在 typesense 卷中。
  3. 实时协作:Broadcasting 特性(界面实时刷新)由内置 Laravel Reverb 承担,也可通过环境变量切换到外部 Pusher 兼容服务。
  4. 认证外置:本地账号认证可用 SETTINGS_LOCAL_AUTH_ENABLED=false 关闭,完全交给 OIDC/OAuth 身份提供方(官方 README 点名兼容 Pocket ID、Keycloak、Authentik、Entra ID、Auth0、Okta、Google)。

💡 技术拓展:自托管笔记系统的存储模型不止「数据库+文件双写」一种。常见对比——

模型代表项目特点取舍
纯数据库Trilium、Outline功能强、事务一致原文导出需专门操作
纯文件系统Obsidian(配合 Syncthing)、SilverBullet便携性极佳服务端功能受限
数据库+文件双写Many Notes功能与便携兼得两态需同步机制

Many Notes 选择双写,正是为了「Web 功能」与「文件即数据」两者兼得。

四、功能特性

官方 README 列出的完整特性清单(逐条对应原文,查询日期 2026-11-01):

特性官方描述说明
多用户Multiple users认证保护文件,角色分级
多 VaultMultiple vaults per user按主题自由拆分存储空间
OIDC/OAuthOpenID Connect and OAuth对接绝大多数身份提供方,v0.18.0 起支持同时配置多个 OIDC 提供方
协作Collaboration邀请其他用户访问你的 Vault
广播Broadcasting界面实时联动更新
文件搜索fast and typo-tolerant searchTypesense 驱动,容忍拼写错误
树形浏览Tree view explorer右键菜单上下文操作
高级编辑器Advanced Markdown editor面向写作的 Markdown 编辑体验
自动保存Automatic saving写作无需手动落盘
模板Templates统一笔记格式
链接/反链/标签Links/backlinks/tags笔记互联组织
导出 PDFExport to PDF笔记转可分享 PDF
导入/导出 VaultImport/export vaults备份与迁移(ZIP)
更新检查Automatic update check新版本自动提醒
入门库Starter vault新手引导模板
明暗主题Light/dark theme跟随系统自动切换
PWAProgressive Web App类原生应用体验(需 HTTPS)

版本节奏(releases.atom 实查):v0.18.1(2026-10-22,安全修复:升级 PHP 至 8.4.27,修复两个 PHP 远程代码执行漏洞 CVE-2026-109618、CVE-2026-109619,官方措辞 "Update your image as soon as possible");v0.18.0(2026-09-01,多 OIDC 提供方、创建 Vault 后立即打开、重命名冲突校验)。维护者为单一开发者 brufdev,通过 Buy Me a Coffee 接受赞助。

五、快速开始(最小可用示例)

官方 README 给出的最小部署配置(转述自仓库,查询日期 2026-11-01)——创建 compose.yaml:

services:
  php:
    image: brufdev/many-notes:latest
    restart: unless-stopped
    environment:
      - APP_URL=http://localhost # 访问地址,务必按实际修改
    volumes:
      - database:/var/www/html/database/sqlite
      - logs:/var/www/html/storage/logs
      - private:/var/www/html/storage/app/private
      - typesense:/var/www/html/typesense
    ports:
      - 80:8080

volumes:
  database:
  logs:
  private:
  typesense:

随后执行 docker compose up -d,浏览器访问配置的 APP_URL 即可进入登录页;注册的第一个用户自动成为超级管理员。完整部署过程、端口规划、健康检查与排障实录见《Many Notes Docker Compose 部署指南》。

官方重要提示(README "Important" 段):建议将 Many Notes 放在提供 HTTPS 的反向代理之后——不仅加密流量,PWA 支持和代码块复制到剪贴板等特性也依赖 HTTPS 上下文。

六、适用场景与限制

适合:

  • 个人/小团队的自托管 Markdown 笔记中心,要求「文件即数据」的可迁移性(Vault 目录直接就是普通 .md 文件树,可被 rsync/备份工具直接处理);
  • 已有统一身份设施(Keycloak/Authentik/Pocket ID 等)的环境——OIDC 一等公民支持;
  • 需要多人协作但不想引入重型知识库平台的场景(Vault 级邀请 + 实时广播)。

限制(依据官方文档可证实的边界):

  • 单容器全家桶:无法单独伸缩搜索/广播/队列进程;镜像体积大(含 Typesense 与完整 PHP 运行时)。
  • 官方镜像 tag 策略以 latest 为主:README 与三份安装文档全部使用 brufdev/many-notes:latest,版本回退依赖历史 tag(UPGRADING.md 提到 "downgrade to v0.3 by using the corresponding tag"),生产环境应以镜像 digest 锁定版本。
  • 无公开 REST API:官方仓库路由全部是 Web 会话接口(面向自家前端),未提供 API 令牌体系;服务器侧运维操作以 php artisan 命令族为主(详见《Many Notes 0.18.1 常用 CLI 命令与工具详解》)。
  • 默认 SQLite:官方推荐形态;换用 MySQL/PostgreSQL 需自行维护数据库服务(官方提供变体 compose 文档)。
  • 上传限制默认 500M(PHP_POST_MAX_SIZE/PHP_UPLOAD_MAX_FILE_SIZE),附件类型白名单固定(音/图/视/PDF/md/txt 等,见 README 安装节)。
  • 单一开发者项目:功能演进快但团队规模小,社区规模与成熟大厂产品有差距。

七、同类选型对比

对比对象取 awesome-selfhosted 笔记/知识库分类中同形态(自托管 Web、多用户)的活跃项目。数据实查来源与查询日期均为 2026-11-01:GitHub Releases/releases.atom(版本)、仓库 README(功能声明)、project-awesome.org(Many Notes 星数 929)。

维度Many Notes v0.18.1TriliumNext NotesMemosSilverBulletOutline
技术栈PHP 8.4 / LaravelNode.js / Electron 血统服务端Go + SQLiteTypeScript / DenoNode.js / React
许可证MITAGPL-3.0MITAGPL-3.0BSL-1.1
存储模型数据库 + 文件系统双写纯数据库(可导出)数据库(Markdown 正文)纯文件(Markdown)数据库(PostgreSQL)
多用户/协作支持,Vault 级邀请共享笔记为主,弱协作多用户弱协作单用户为主团队空间,强
第三方认证OIDC/OAuth(多提供方)本地/代理认证本地/外部 OAuth反向代理 OIDC(社区)OIDC/SAML 内置
全文搜索Typesense(内置,容错)内置引擎内置简单搜索内置索引PostgreSQL 全文检索
实时协同Reverb 广播(界面联动)无无无WebSocket 协同编辑
部署复杂度低(单容器全家桶)低(单容器)极低(单二进制/容器)低(单容器)高(需 Redis/Postgres/S3)
依赖外部组件无(全部内置)无无无Redis、PostgreSQL、存储
星数/热度929(project-awesome 实查);GitHub Trending 最高第 6 名(2025-08-03,trendshift.io 实查)数千级,社区活跃数万级,热度最高数千级数万级,商业公司维护

选型结论(「如果…则…」):

  • 要文件可迁移 + Web 功能 + 多人三者兼得 → Many Notes(双写模型在同类中独一份);
  • 只要最省事的碎片记录/时间线 → Memos;
  • 要团队文档站、权限矩阵精细 → Outline;
  • 要个人知识图谱、笔记层级极深 → TriliumNext;
  • 要纯文件、编辑器即文件系统 → SilverBullet。

Many Notes 的差异化定位一句话:给 Obsidian 式「vault 文件夹」体验加上完整的多用户 Web 服务端。如果你的 Obsidian 库需要多人访问、集中鉴权和全文搜索,Many Notes 是自托管阵营里最贴近这个需求的实现。

八、参考链接

Many Notes 介绍与选型指南 - Quzuo