阅读视图

发现新文章,点击刷新页面。

如何在服务器上部署一个基于 Node.js 的 TiddlyWiki

pimgeek 的数字花园即为此模式,现记录部署过程。什么是 TiddlyWiki?

前置条件是要有一个域名和一个 VPS。

安装 Node.js 和 TiddlyWiki

  • 更新软件包 apt update
    • RedHat 系使用 yum
  • 安装 Node.js apt install npm
  • 全局安装 TiddlyWiki npm install -g tiddlywiki
  • 检查 TiddlyWiki 版本 tiddlywiki --version
  • 创建 TiddlyWiki 目录 mkdir ~/wiki wiki 可以替换为想要的名字
  • 在 TiddlyWiki 目录下创建基本文件 tiddlywiki wiki --init server
  • 创建用户权限文本 vim ~/wiki/users.csv 或者用 nano 等文本工具

users.csv 文本内容:

username,password
johndoe,!@#$%^

其中首行为必填项,第二行为用户名和明文密码,英文小写逗号,不包含任何空格(具体参考官方文档:WebServer Parameter: credentials

安装 Nginx 和 Let’s Encrypt

熟悉的话这一步可以略过。重点是设置好反向代理。

  • 安装 Nginx apt install nginx
  • 创建并编辑代理服务器配置 cd /etc/nginx/sites-available 然后 vim example.com
    • 其中 example.com 为域名

example.com 文本内容:

server {
    server_name example.com
    client_max_body_size    100M;
    
    location / {
    proxy_pass   http://127.0.0.1:8080;
    proxy_set_header        Host             $host;
    proxy_set_header        X-Real-IP        $remote_addr;
    proxy_set_header        X-Forwarded-For  $proxy_add_x_forwarded_for;
    }
}

其中 client_max_body_size 条目设置最大上传文件大小

  • 链接并启用代理服务器 ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled
  • 安装 Let’s Encrypt 以及激活 nginx 插件 apt install certbot python3-certbot-nginx
  • 创建 SSL 认证 certbot --nginx 按照说明进行设置
  • 运行 TiddlyWiki 并访问域名测试是否启动成功 tiddlywiki wiki --listen credentials=users.csv "readers=(anon)" "writers=(authenticated)"
  • 其中 creadentials 字段指定用户权限文本名称,readers 为只读权限(此处的 anon 为匿名,即任意访客),writers 为读写权限(authenticated 读取 credentials 中指定的用户)

安装 pm2 并设置后台运行服务

  • 全局安装最新版本 pm2 npm install -g pm2@latest
  • 准备 TiddlyWiki 启动脚本 vim ~/tw.sh

脚本内容:

cd /root
tiddlywiki wiki --listen credentials=users.csv "readers=(anon)" "writers=(authenticated)"
  • 赋予 tw.sh 权限 chmod +x /root/tw.sh
  • 通过 pm2 守护进程运行 TiddlyWiki pm2 start /root/tw.sh
  • 保存当前状态 pm2 save
  • 设置开机自启 pm2 startup

至此便可以访问首页 Node.js 版本的 TiddlyWiki,并且通过一些方式登录修改了。

参考文献

几种笔记软件的使用感受

这两年是一头扎入笔记工具这个领域的两年,寻求各种软件如何与工作和生活结合,把它们使用出 “生产力工具” 的效果,以及达到 “让生活过得更有条理” 这个目的。这个念头不坏,但是过程中好几次差点过头,导致平衡打破,顾此失彼了。好在及时反应过来,意识到应让工具为我所用,而不是反过来让我为工具所用。


我能找到最早的笔记内容,要从大学时期学习计算机专业时算起。那时用着大名鼎鼎的 Evernote 和印象笔记,纳闷为何有两个账号,现在明白过来了,这是两套完全不同的体系。进入国内市场并不一定会使一个软件更加本地化、追求用户体验,这完全取决于开发团队的良心。

除了印象笔记,我还使用过为知笔记,这两者是我大学时期用得最多的笔记软件。我在使用为知笔记的过程中学会了 Markdown 语法,让我获益至今。但因为一些原因,我没有重度使用为知,而是后来在工作上用回印象笔记,我在印象笔记中存有大量跨境电商相关的笔记,从网络上剪藏的文章到上课笔记和公开课照片,以及工作日志和较为敏感的信息,几乎囊括所有工作相关。

这些笔记对我起到非常大的帮助,因此我充了几年的会员。那时候的印象只有免费账户和标准账户,现在再次打开印象笔记的账户页面,已经多了高级账户和专业账户,想必未来还会继续增加。除此之外,软件日益臃肿,广告越来越强奸用户的眼睛,直到2020年,我实在受不了印象笔记糟糕的使用体验,开始寻求另一个更加合适的地点存放我的笔记。

notion 和 teambition

首先我找到的是 notion。这个软件在笔记圈子内大有名气,甚至一定程度上出圈了。另外一个有相同现象级的软件是 Roam Research,不过高昂的售价和学习曲线没有让我想去学习的欲望,于是学习使用 notion。刚开始接触 notion 的几个月,它几乎成为我记录的全部,不管工作还是生活上有什么内容都一股脑扔进去,博客草稿箱里还有一篇文章叫做《人生苦短,我用 notion》。显然我没有也不打算继续完成它。当时虽然只有英文和韩文,网络连接不稳定,不能离线本地,但不影响我的使用。不过这个时期我没有把握到 notion 的精髓:block 和 database,而是把 notion 用成了另一个印象笔记,最终上面提到的缺点(加上极不方便甚至不可行的导入导出)成为我不再重度 notion 的原因。

工作上强烈的需求使我不能停下记录的脚步,我看到 teambition 被阿里收购,同时做了全面的本地化,我成为第一批改版后的 teambition 用户(参考博文)。他的项目模块可以区分工作和生活,又从这个时期接触到 all-in-one 这个概念(现在回头看,这是一个相当不好的概念),开始着手把所有东西丢进去。至此我已经在好几个笔记软件之间转移数据,这浪费了许多没必要的时间。teambition 同样因为其仅 web 端的限制,无离线本地和时不时出现的小 bug 和掉线,以及阿里大量的黑历史,我开始理性地思考我需要的一个笔记软件是怎么样的,有什么刚性需求,有哪些不是必要的。

经过大量重度使用几个笔记软件后,我清晰认识到自己的需求:本地离线,纯文本通用格式,方便的导入导出,多平台同步

Tiddlywiki 和 Obsidian

2021年3月我接触到 Tiddlywiki,现在已经想不起来从哪里得知这个神仙应用了。它的理念十分迷人,Tiddlywiki 官网中的哲学:记录和组织所有信息使其将来可重复使用;记录信息的价值与其重复使用的难易程度成正比;把信息切割为最小的有意义单元,并且重新建模他们之间的关系,从而提供新的价值。具体体现在应用本身,即原子化笔记,用标签关联,再灵活结构化。除此之外,Tiddlywiki 是开源且完全免费的,作者和社区从04年一直开发迭代到今天,去年12月版本号更新至 5.2.1,是笔记软件里的常青树,在笔记圈子里有一定数量的拥趸。国内也有几位大佬做出大量贡献,贴在文章结尾。

我从 Tiddlywiki 学到了不少。我不再纠结于 all-in-one 的想法,而是用好每一个手上的工具,即是发挥工具的优点,忽略它的缺点,并通过其他工具来弥补。我开始个性化自己的笔记软件,这是在印象或者为知做不到的事情。最重要的是学到了如何正确对待自己的笔记,第一步链接(正向链接,和与之相伴的反向链接),第二步溯源,把笔记的来源也一并记录,也就是一直应用至今的一元笔记法:以时间轴记录所有内容,时间戳作为索引;记下任何想要记下来的内容;通过链接关联;时常回顾并整理。这一点是我在用 notion 时没有做到的,当时我只是建立了一个 database,然后使用 calendar 视图,把记录放在每一个日期格子里。这样的结果是,时间一长,既不方便回溯,也不方便整理,等于是做了一段时期的无效输入。还有一个更关键的一点,即抛弃剪藏,用自己的语言记录所有笔记,这是费曼学习法的核心之一。

接下来又认识到 Obsidian。不过我不是一开始就使用 Obsidian 作为长期笔记软件,而是在 Tiddlywiki 和 Obsidian 之间互相对比,找出两者之间的异同,发掘各自的优缺点,以及我能否适应这些因素。为此我有一篇笔记:Tiddlywki vs Obsidian,里面列出了两者所有优缺点和共同点:

  • Tiddlywiki 默认单页面信息量/笔记数量相比 Obsidian 更多,方便笔记之间跳转;Obsidian 支持笔记多窗口,自由排布
  • Tiddlywiki 可以不依赖任何软件运行,本身就是一个简单的 HTML 文件,而 Obsidian 还是一个 Markdown 编辑器,可以在不打开软件的情况下增删改所有笔记
  • Tiddlywiki 的编辑器较为局促,写作空间没有 Obsidian 敞亮
  • Obsidian 的标题和列表缩放功能是我的刚需,Tiddlywiki 缺乏这个功能或者需要插件辅助
  • 两者都是全平台,社区强大氛围好,但 Tiddlywiki 免费开源,官方不提供任何付费服务,纯粹的用爱发电项目,而 Obsidian 免费但不开源,官方提供付费同步和发布服务
  • 两者均开放,故支持各种不同的同步/备份方式,不受软件本身限制
  • Tiddlywiki 基于 wikitext (方言)语法,Obsidian 基于 Markdown,前者的表格表现形式比后者稍好一些
  • Tiddlywiki 自带单个笔记加密和整个笔记本加密功能,Obsidian 原生不支持加密功能(本质上是管理本地文件夹)

在这个期间,从少数派和部分知乎文章里接触到 “PKM” 和 “工作流” 之类看似高级的概念,把自己搞糊涂了。经过一年想明白,方法论只是方法论,不能转化成对自己有用的东西也仅仅是方法论,能提高工作效率和提升自己的即使是野路子也是好理论。

Tiddlywiki 自带一个新建 Journal 笔记的功能,新建后自动以日期命名,并且带一个 Journal 的标签。这是我使用上述提到的一元笔记法的起始,这种方法一直沿用到后面用过的所有笔记软件里,这个在其他的笔记软件被称作 Daily Notes

Trilium

我短期用过的 Trilium,和 Tiddlywiki 类似,由个人开发者开发维护,开源免费,数据保存在数据库文件里,跨平台并有多种同步方案。Trilium 的风格更理工,你可以从老版本的 UI 里看出一点冷机械工业味,我特别喜欢这个味道。它有别于其他笔记软件的特点有两个,一是文件夹即文件,逻辑上有文件夹的形态,实际上文件夹本身也是一个笔记文件,同时能记录笔记和列出这个文件夹内所有笔记;二是可克隆目录树,即同一个目录可以出现在不同的父目录下,此处修改,彼处同步,类比像 notion 的一个较新功能 sync blocks,不过我对这个没有需求,不知具体体验如何。另外还有一个贴心的小细节,例如 Daily Notes 中会显示当天修改过的文件,其他软件里暂时没有见过这个功能。

不继续使用 Trilium 的原因有几点,一是部署服务端对我而言有些困难,尝试几次均未成功,便不能在移动端同步我的笔记内容;二是软件体积有些大,portable 模式转移也不方便;三是文件存储在数据库里,不能做到在多台设备同时修改一个文件。我对此有需求(所以 Trilium 和 Tiddlywiki 都被排除了,反而 notion 能很轻松地做到这一点,毕竟后者是纯云端笔记);四是笔记数据(.db 数据库文件)保存的位置不能方便地选择调整。Trilium 也是一个非常优秀的笔记软件,只是由于上面提到的这些原因不适合我,所以没有继续使用下去。


如今我的主力笔记软件是 Obsidian,一个正在慢慢从笔记软件发展为插件平台的资源管理器,满足了我几乎所有的笔记需求,开发者更新频率很高,也有很热闹的英文和中文社区,大量插件开发者给这个软件注入灵魂。我因为对移动端的强需求,只有赞助者能获得早期移动端安装包,于是在21年5月赞助了 Obsidian 成为一个 Insider,也因此能提前用上全平台的内部版本,换言之是做小白鼠,也算是为社区做了一点微小的贡献。

另外还有些笔记软件使用时间或长或短,没有获得足够的体验,却因为某些原因让我没有继续使用下去的,就不展开说了:Joplin,思源笔记,myBase,logseq,OneNote,有的很优秀,有的快要死去,有的还在茁壮成长。篇幅已经很长,想详细说说自己的笔记心得,但会使文章显得过于臃肿。下次一定。


Tiddlywiki 和 Obsidian 相关:

笔记相关:

Youtube NickMilo 的视频:

❌