Many Notes 介绍与选型指南
Many Notes(brufdev/many-notes)v0.18.1 介绍与选型指南:PHP/Laravel 技术栈、数据库+文件系统双写存储、Typesense 容错搜索、OIDC/OAuth 认证与单容器全家桶架构全景,含与 Trilium、Memos、SilverBullet、Outline 的量化选型对比。
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 四目录
要点解读:
- 全家桶单容器:官方 compose 只定义一个
php服务,nginx、PHP-FPM、队列消费、WebSocket 广播、Typesense 搜索全部由镜像内 s6 进程监督拉起。优点是部署极简、组件间零网络配置;代价是镜像体积大、进程边界粗。 - 搜索独立引擎:文件搜索由内置 Typesense 提供,官方 README 明确标注搜索是 "fast and typo-tolerant"(快速且容忍拼写错误),索引数据持久化在
typesense卷中。 - 实时协作:Broadcasting 特性(界面实时刷新)由内置 Laravel Reverb 承担,也可通过环境变量切换到外部 Pusher 兼容服务。
- 认证外置:本地账号认证可用
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 | 认证保护文件,角色分级 |
| 多 Vault | Multiple vaults per user | 按主题自由拆分存储空间 |
| OIDC/OAuth | OpenID Connect and OAuth | 对接绝大多数身份提供方,v0.18.0 起支持同时配置多个 OIDC 提供方 |
| 协作 | Collaboration | 邀请其他用户访问你的 Vault |
| 广播 | Broadcasting | 界面实时联动更新 |
| 文件搜索 | fast and typo-tolerant search | Typesense 驱动,容忍拼写错误 |
| 树形浏览 | Tree view explorer | 右键菜单上下文操作 |
| 高级编辑器 | Advanced Markdown editor | 面向写作的 Markdown 编辑体验 |
| 自动保存 | Automatic saving | 写作无需手动落盘 |
| 模板 | Templates | 统一笔记格式 |
| 链接/反链/标签 | Links/backlinks/tags | 笔记互联组织 |
| 导出 PDF | Export to PDF | 笔记转可分享 PDF |
| 导入/导出 Vault | Import/export vaults | 备份与迁移(ZIP) |
| 更新检查 | Automatic update check | 新版本自动提醒 |
| 入门库 | Starter vault | 新手引导模板 |
| 明暗主题 | Light/dark theme | 跟随系统自动切换 |
| PWA | Progressive 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.1 | TriliumNext Notes | Memos | SilverBullet | Outline |
|---|---|---|---|---|---|
| 技术栈 | PHP 8.4 / Laravel | Node.js / Electron 血统服务端 | Go + SQLite | TypeScript / Deno | Node.js / React |
| 许可证 | MIT | AGPL-3.0 | MIT | AGPL-3.0 | BSL-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 是自托管阵营里最贴近这个需求的实现。
八、参考链接
- 官方仓库:https://github.com/brufdev/many-notes (README/releases/UPGRADING.md/docs 目录,查询日期 2026-11-01)
- 发布记录:https://github.com/brufdev/many-notes/releases (releases.atom 实查)
- 安装变体文档:https://github.com/brufdev/many-notes/tree/main/docs/installation
- OAuth 定制文档:https://github.com/brufdev/many-notes/blob/main/docs/customization/oauth.md
- FAQ/排障:https://github.com/brufdev/many-notes/blob/main/docs/support/faqs.md
- awesome-selfhosted 收录条目:https://github.com/awesome-selfhosted/awesome-selfhosted (Note-taking & Editors)
- 星数与热度佐证:https://project-awesome.org/r/brufdev-many-notes 、https://trendshift.io/repositories/13974 (查询日期 2026-11-01)