七大私有化部署笔记&知识库系统横评


  1. TL;DR
  2. 传统方案
  3. 从 Notion 而来的需求
  4. 概览
  5. Outline:这是想给人部署的吗??
  6. Trilium:直男 Geek 的最爱
  7. AppFlowy:为取代 Notion 而生的新秀
  8. 为知笔记:简陋到不够用
  9. AnyType:值得期待的颠覆
  10. 思源笔记:最终的归宿
  11. 总结

故事的起源是一个由于线性代数期末考几道计算题卡住算不出来折腾半天而考后看某课代表提前交卷又感觉人均 AK 了以致十分 emo 想要暂时逃避学习的下午。

TL;DR

思源笔记最好。快去用。

传统方案

一直以来我记笔记的方案都是本地 Typora + Git 用 Markdown 写各种笔记,然后服务器上部署 Docsify 用 Crontab 设置每天定时 git pull 一次,展示在 wiki.skywt.cn。不过长此以往,渐渐觉得这种方案难以满足我的需求:

  • Git 与笔记的需求不相适应。Git 本质上是一个「版本管理工具」,而我们为了白嫖 Github 而纯粹把它作为一个文件上传工具来使用。
  • 表现之一就是经常看以前的笔记的时候改了某处的标点符号,这个小改动单独 commit 一下吧,感觉没必要;和其他改动一起 commit 吧,又会导致整个 commit 逻辑的混乱。以至于到最后干脆自暴自弃,一大堆一起 commit 了。可以说 commit 这种方式和记笔记的应用场景非常不适应。
  • 表现之二是,历经这么多思想斗争搞成的版本管理,实际上一次都没有发挥过作用。在自己的笔记上我从来没有回滚过版本。
  • 纯文本的 Markdown 功能不足。观摩了 Obsidian 开创性的双链功能,才感觉这种近乎纯文本的记笔记方式可能的确不能更好地组织知识网络。并且文档树完全是以文件名排序的,也不利于自己的整理。

从 Notion 而来的需求

私有化部署dockerhub 私有化部署笔记软件_Markdown

Notion 可以是非常优秀的知识库软件,界面美观、功能强大、理念先进,但是存在一些问题:

  • 无法私有化部署。数据只能存储在 Notion 的服务器上。这就导致:
  • 特殊时期网络环境问题。由于 Notion 并没有在国内开设子公司,服务器也在境外,在某些特殊时期(比如即将到来的 20big)很容易无端被 ban。
  • 数据安全性问题。数据导出不便。
  • 数据私密性问题。
  • 商业公司的不确定性。参考 Notability,要是没有 AppStore 的管制,某天突然宣布改变商业策略,数据又不在我们自己手里,想导出都找不着门。百度云盘某种程度上也是一例。
  • 必须联网使用。

于是我的需求大概是:

  • 私有化部署。必须能够完全掌控数据。
  • 部署方便。加分项,不过至少要能自己部署(Outline 即为反例)。
  • 文件格式开放。不能是各种不可读的私有格式。或是可读格式(如 json)存储,或是将文件转换工具开源(点名表扬思源笔记),以便于这个软件由于不可抗力因素无法使用后数据不会丢失。
  • Markdown 友好。Markdown 或者半兼容 Markdown 语法,至少要支持数学公式。
  • 功能强大。希望支持 Mermaid,同时有类似 Obisidian 的双链、关系图等等功能。
  • 界面美观。尝试了 Trilium 你就会知道颜值观感对一个应用的印象影响多大了 =_=
  • 学习成本低。至少设计上要符合人类的逻辑,学习成本要低于带来的使用效率收益。

概览

是的,在这个无聊的下午,我找到了六款 Notion 的 Alternative,逐一安装尝试了一番。

以下简单列出了我的一些体验感受。加粗的是直接劝退条件。

  • Notion:功能完美 · 颜值完美 · 无法私有化部署 · 网络环境有时不佳 · 半 Markdown · 数据难导出
  • Outline:颜值高 · 部署异常困难
  • Trilium:功能强大繁多 · 偏 Geek · 太丑 · 部署方便 · 半 Markdown · 数据可导出
  • AppFlowy:功能不完善 · 颜值高 · 不完善 · 只支持本地
  • 为知笔记:功能简陋 · 颜值高 · 支持 Docker 私有化部署 · 不开源 · 私有格式不支持且不兼容 Markdown
  • AnyType:功能强大 · 颜值高 · 理念先进 · 还没发布
  • 思源笔记:功能强大 · 颜值高 · 私有部署不支持多用户 · json 格式数据可导出

注意:本文仅针对建立「学习笔记&知识库系统」这一方面对这些应用测评,很多应用(如 Notion)除此之外还有团队协作、项目规划以至于建立 GTD 系统等等用途,而其他应用(如思源笔记)则没有,不代表各个方面某应用绝对的优胜性。

Outline:这是想给人部署的吗??

Outline 的定位是「团队知识库」,我正是被这优雅的界面设计打动的。

私有化部署dockerhub 私有化部署笔记软件_服务器_02

和大多数开源软件的商业模式一样,Outline 提供了收费的在线版(30 天免费体验,而且不支持个人用户)和可以自己部署的开源版本。自己部署就是「折腾而白嫖」的一种方式,说得好听点就叫做「技术变现」吧……

然而这个软件好像设计之初就根本没有考虑个人私有化部署,吐血。

  • 文件存储只支持 AWS S3 标准,而不支持直接本地文件存储;而 Amazon 在中国不支持个人用户注册。为此,我们要用 MinIO 自己搭建一个兼容 S3 标准的服务器;
  • 用户登录不支持直接的验证,只支持第三方的 SSO,我们要么配置 Google/Microsoft/Slack 的 SSO,要么自己搭一个 OIDC 服务器;
  • 不支持直接的附件上传,为此我们要自己搭一个附件上传的程序,例如 Linx;
  • 只支持 PostgreSQL 数据库,还有 Redis,所以……

算下来,除了 outline 的容器,还得整上 minio,linx-server,postgres,redis,和一个 SSO 服务器。主要是我根本没接触过 AWS S3,也没接触过 SSO,这俩玩意足够折腾死我了。

逛了一圈,有大佬提供了 docker-compose 的版本,但是没搞清楚这些问题之前感觉整个程序就是一个黑箱,出了问题都不知道咋办,不太舒服。

220203 Upd:终于成功部署了 Outline。总体感觉是:这个软件更加适合服务于「团队协作」或者用来写「产品文档」,而用来作为「笔记」或者「个人知识库」则不是那么完美

  • 不支持双链。
  • 不支持 LaTeX 数学公式。
  • 支持很多富文本的嵌入块,但大多都是国内用不了的 404 服务……
  • 并没有插件之类的平台,很难实现功能的拓展。

不过这个多人协作的确非常酷,UI 也非常简洁漂亮……总之,作为「知识库」,这个软件不是最佳选择。

Trilium:直男 Geek 的最爱

总评:★★★★☆

说实话,一开始 Trilium 给了我惊喜。

没有什么依赖的服务,直接 docker run 一下就可以跑起来:

docker run -d \
  --name trilium \
  -p 8081:8080 \
  -v /data/trilium:/home/node/trilium-data \
  zadam/trilium:0.48-latest

逻辑和 Notion 类似,功能非常强大,对于每个文档可以自定义若干属性(一些归属于文档的键值对),也有不同的文档类型(文本、关系图、Mermaid 图、代码等),可以定义特殊的文档存放一些 js 脚本,通过属性可以调用这些脚本实现特定的功能。

例如,按下左边的 Today 按钮可以立即在 root > Journal > 年份 > 月份 文件夹下用每日模板创建一个页面并自动填好日期,而这一切都是在一个叫做 Today 的文档中的脚本实现的,由于这个文档设置了书签而会显示在左边侧栏。

所谓的「插件」统统可以通过文档内 js 实现。例如这个字数统计插件:

私有化部署dockerhub 私有化部署笔记软件_私有化部署dockerhub_03

有了这个文档,只要在文章属性中加上 #wordCount 标签,就会执行这里面的脚本显示文章的字数统计。

官方样例还给出了各种脚本建立 Todo List、可视化体重追踪程序等等一系列强大的用途。

只是,这个 UI……

私有化部署dockerhub 私有化部署笔记软件_服务器_04

太丑了……(吐血)

这诡异的字体,这生硬的交互,这令人窒息的圆角矩形……这就叫做「直男审美」吧……
真的,开发者难道没有用过 Notion 吗?就不能学学吗???

好在 Trilium 支持自定义主题,只要建立一个文档,设置属性 #appTheme=themeName 就可以在 config 里看到名为 themeName 的主题了。

搞来 Notion 的配色,尝试调整了一下默认的主题:

私有化部署dockerhub 私有化部署笔记软件_Markdown_05

:root {
    --main-font-family: serif !important;
    --tree-font-family: serif !important;
    --detail-font-family: serif !important;
    --detail-font-size: 1.1rem !important;
    --detail-text-font-family: serif !important;
    --monospace-font-family: monospace !important;
}

.note-tab-wrapper {
    border-radius: 0 !important;
    background-color: inherit !important;
    border-bottom: 1px rgba(55, 53, 47, 0.4) solid;
}

span.fancytree-node:hover{
    background-color: rgba(55, 53, 47, 0.16) !important;
    border: none !important;
    border-radius: 0 !important;
}

span.fancytree-active, span.fancytree-active.fancytree-selected{
    background-color: rgba(55, 53, 47, 0.08) !important;
    border: none !important;
    border-radius: 0 !important;
}

.fancytree-node:hover .bx.tree-item-button {
    position: absolute;
    right: 15px;
}

#left-pane , #launcher-pane{
    background-color: rgb(247, 246, 243) !important;
}

.gutter {
    background: inherit !important;
    width: 4px !important;
    transition: 0.3s;
}
.gutter:hover {
    background: rgba(25, 23, 17, 0.6) !important;
}

.note-title-widget input.note-title {
    outline: none;
}

.include-note, .note-book-card {
    border-radius: 0 !important;
}

.note-split {
    max-width: 1000px;
}

然而最后我还是放弃了 Trilium。

  • 关于「属性」的功能属实是比较冗余,很难找到使用场景。毕竟作为一个笔记&知识库系统,不需要这么多自动化的流程吧。
  • 这个 UI 真的没救了,改 CSS 也改不了整体的布局,和 Notion 相比就有一种莫名压抑感。
  • 半 Markdown 支持,就是实际上不是 Markdown 文件,只是输入 ## 会自动变成二级标题,输入 $ 会自动进入数学公式输入。
  • 对于导入文件的转化不是特别好,导入的 codeforces 题解里的数学公式全都没法转化。
  • 居然不支持代码块高亮。

总之,虽然不是特别适合我自己,Trilium 还是值得尝试的。

AppFlowy:为取代 Notion 而生的新秀

AppFlowy 似乎就是为了取代 Notion 而生的。

私有化部署dockerhub 私有化部署笔记软件_私有化部署dockerhub_06

试用了一下,还是放弃了。

  • 不支持网页端,只有本地客户端。
  • 只是个本地的编辑器。不支持服务器同步。
  • 功能不完善,还在开发初期。目前还是 0.0.2 版本。

目前看来完全无法达到取代 Notion 的标准。可能未来会比较有潜力,不过目前还是不考虑了。

为知笔记:简陋到不够用

虽然为知笔记本身不是开源的,但是其提供了可以自托管的 Docker 镜像

docker run -itd \
   --name wiz \
   --restart=always \
   -v /data/wiz:/wiz/storage \
   -v /etc/localtime:/etc/localtime \
   -p 8085:80 \
   -p 9269:9269/udp \
   wiznote/wizserver
  • 非常简陋!!!和官网注册登录使用的不是一个版本。功能很少。没有双链。数学公式都没有。
  • 笔记的排列逻辑很迷,不是树状图的逻辑,而是一种二级菜单,不太适合建立知识库。
  • 完全不兼容 Markdown。从类 Word 的文本编辑就可以看出。文档导出甚至只支持导出 .docx 格式。
  • 严重依赖官方服务器。即使自己部署,很多功能都需要官方服务器。

AnyType:值得期待的颠覆

虽然这玩意还没发布,但是去看了下官网,感觉这个官网的设计就挺有意思的。

AnyType 提出了「对象」的概念,文档中每个页面或者段落、块都可以看成「对象」,在对象之间可以建立连接,贴近人的思维模式。这个理念比较有开创性。

不过第一个正式的版本还没发布。可以留个邮箱成为内测用户。我还是懒得折腾了。

思源笔记:最终的归宿

最后找到了「思源笔记」,在我看来是比较完美的解决方案了。

docker run -itd \
   --name siyuan \
   -v /data/siyuan:/siyuan/workspace \
   -p 6806:6806 \
   -u 1000:1000 \
   b3log/siyuan \
   --workspace=/siyuan/workspace \
   --servePath=docs.skywt.cn \
   --ssl=true

注意如果用 Nginx/Caddy 反代走 https 则需要加上后面的 --servePath=docs.skywt.cn --ssl=true,否则不需要。

私有化部署dockerhub 私有化部署笔记软件_服务器_07

其实看得出来基本上这个软件的很多功能甚至有些 UI 都是仿 Obsidian 的。不过在某些方面比 Obsidian 更加优秀。
总体来说这个体验还是比较完美的。

  • 私有化部署。部署还比较方便。
  • 文件格式开放。数据都会以 json 格式明文存储在本地指定的文件夹下,还开源了数据转换的工具。
  • Markdown 友好。半兼容 Markdown 语法,支持 Markdown 导出。导入我原来的 Markdown 也非常完美。而且和 Notion 一样有「内容块」的概念,「内容块」和「文章块」是同级的,这个逻辑我还是比较喜欢的。
  • 功能强大。支持双链、Mermaid、关系图等等。甚至支持 SQL 语句查询!
  • 界面美观。自定义也很方便,甚至可以找到高仿 Notion 的主题……
  • 入门成本低。不过如果要进阶使用还是有一定成本的。

缺点也不是没有:

  • Docker 服务器版不支持多用户。实际上没有用户管理机制,只有一个密码鉴权。
  • 不能很好地兼容 Firefox。由于本身是针对 Electron 开发的,好像只能在 Chromium 内核下得到完美体验。Firefox 使用问题就是在光标只能被限定在一个块里,必须配合鼠标。非常不爽!

总结

「工欲善其事,必先利其器」,虽然笔记软件只是工具,但是从纯文本到 Markdown,到块级双链的知识库系统,善用笔记软件有机会颠覆我们的思考方式和学习效率。