很多人提到 Trilium,第一反应是“一个自托管笔记系统”。但只要你真的把它长期跑在 VPS 上,问题很快就不会停留在“能不能打开网页”这个层面,而会变成:
- 真实数据到底放在哪
- 什么时候应该看容器,什么时候应该看数据库
- 升级前先备份什么
- 为什么明明数据改了,前端却看不到
这篇就把我这次处理 Trilium 的实际经验整理一下。
一、第一条原则:不要先相信工作区里的 compose 文件
这次最先确认清楚的一件事是:工作区里的 compose 文件,不一定就是你线上真实运行的那套。
很多时候你会在某个项目目录看到类似:
./trilium-data:/home/node/trilium-data
然后直觉上就觉得,“那我的数据目录一定就在这个项目目录旁边”。但真实情况经常不是这样。尤其一台已经跑了很多服务、经历过多轮调整的 VPS,容器和数据目录可能早就不在那个地方了。
我这次最终确认到的真实路径是:
/opt/trilium
/opt/trilium/trilium-data
/opt/trilium/trilium-data/document.db
这个确认本身就很重要。因为后面无论是备份、升级、读库还是排障,全部都建立在“你先找对了真实数据目录”这个前提上。
二、什么时候该直接看 SQLite,而不是前端
如果你的问题是下面这些之一:
- 某篇笔记到底还在不在
- 树结构是不是已经写进去
- 某个 noteId / branch 到底存没存
- 前端没显示,到底是缓存问题还是数据真的没了
那这时候前端页面其实不够可靠,你应该直接看 SQLite。
Trilium 这类系统一个典型误导点就是:前端没刷新,不代表数据没变。所以这次我直接从本地数据库去看:
notesbranchesattributesrevisionsattachments
只要这些表里的记录还在,就说明问题大概率不是“数据丢了”,而是“前端状态没刷新到你想看的样子”。
三、直接改 SQLite 不是禁区,但要知道自己在做什么
我这次实际就做了两类事情:
- 读库确认结构与真实数据位置
- 直接写库,新增/调整笔记内容和树结构
这听起来很激进,但在某些场景下反而是最直接的方式,尤其是当你要批量改笔记、补树结构、做同步笔记的时候。
不过这里有个前提:你得清楚自己改的是什么表、为什么改,而且最好先确认这些改动的影响范围。直改库不是日常首选,但也不应该被神化成“绝对不能碰”。
四、真正让我踩坑的不是写库,而是“写完前端没变”
这次最有价值的经验,反而不是“如何写库”,而是这条:
直接改 Trilium SQLite / 调整笔记树结构后,前端不一定会立刻可见。
这件事在第一次碰到时很容易让人误判:你明明查库看见数据已经写进去了,但网页里就是不显示,或者树结构位置不对。于是你会开始怀疑:
- 是不是 SQL 写错了
- 是不是 branch 没挂对
- 是不是 noteId 不对
但这次实际证明:很多时候,数据库已经是对的,只是 Trilium 前端/内存状态还没刷新过来。
而最直接有效的收尾动作就是:
docker restart trilium
我这次就是在重启之后,前端才把新增笔记和树结构稳定显示出来。这个经验以后我会默认记成规则:只要直接动过库或改过树,就顺手重启 Trilium。
五、升级前不要省那一分钟备份
这次升级 Trilium 时,我先做的不是 pull 镜像,而是先备份:
rsync -a /opt/trilium/trilium-data/ /opt/trilium/backups/trilium-data-时间戳/
cp -a /opt/trilium/docker-compose.yml /opt/trilium/backups/docker-compose.yml.时间戳
为什么这一步必须做?因为真正有价值的不是容器本身,而是:
document.db- 笔记树
- 历史内容
- 你的结构和习惯
容器升级失败,大不了重拉镜像;数据目录出问题,才是真正伤筋动骨。
六、这次升级实际怎么做的
确认好数据目录并备份之后,这次的升级流程其实很简单:
cd /opt/trilium
docker compose pull trilium
docker compose up -d trilium
然后做三件验证:
- 看容器是不是
healthy - 看日志有没有异常
- 本机打开
http://127.0.0.1:8383和/login是否正常返回
这次最终升级后的版本是:
TriliumNext 0.102.2
而且容器状态正常,本地访问也没问题。对于一台多服务 VPS 来说,这已经算是非常理想的升级结果了。
七、Trilium 在多服务 VPS 里的正确维护思路
我现在对 Trilium 的态度很明确:它不是一个“装上就不管”的附件服务,而是一个会承载越来越多个人知识、运维笔记和工作痕迹的长期系统。
所以维护思路应该是:
- 优先确认真实数据目录
- 升级前先备份
- 必要时直看 SQLite,而不是只盯前端
- 直接改树结构后默认重启容器
- 不要把“前端没显示”直接等同于“数据没了”
八、我现在把它当成什么
对我来说,Trilium 现在已经不只是“一个笔记网页”。它更像这台 VPS 上的个人知识层:
- 运维指令
- 长期记忆
- 日期记忆
- 结构化的排障笔记
所以这次一边升级、一边补树、一边写库,其实不是杂活,而是在把它慢慢变成真正可维护的知识系统。