在PVE虚拟机上部署Trilium:自托管笔记服务完整教程 1. 自托管笔记的核心诉求Trilium能解决什么为什么跑在PVE上玩PVE的人多半都有个通病什么东西都想往自己服务器上塞。我也不例外在用了一堆在线笔记软件之后最终决定把个人笔记迁回自托管。经过一番比较我选定了一款叫 Trilium 的开源笔记服务并把它部署在 PVE 里的 Linux 虚拟机上。整个过程并不复杂但中间有不少细节值得专门记录下来——尤其是如果你之前只熟悉 PVE 装软路由、开Windows虚拟机对“怎么在虚拟机里把一个Node.js应用跑成正式服务”这件事没那么熟的话这篇教程正好能帮你少走弯路。适合谁看日常有笔记整理习惯、手里有PVE环境、想彻底掌控自己数据的朋友看完应该能直接用起来。1.1 我为什么把个人笔记从商业服务搬到Trilium在线笔记软件不是不好但长期用下来有几个点让我越来越难受免费版限制设备数量高级版按年付费数据格式封闭导出要么没有要么残缺。更关键的是笔记内容属于很私人的数据放在别人的服务器上总有一种“借来的书架”的不确定感。Trilium 解决的就是这个问题——它是完全开源的数据默认保存在你自己的服务器上导出支持 Markdown、HTML甚至可以给笔记内容加密。一旦厂商跑路、服务调整或者我单纯想换机器数据始终是我自己手里那部分。Trilium 真正打动我的是它的树状层级笔记结构。你可以像文件夹一样无限嵌套地组织知识库而不是像大多数笔记软件那样只能躺在一个平铺列表里。配合全文搜索、标签、属性、双链引用它非常适合作长期知识积累写技术文档、读书笔记、工作记录都够用。界面虽然是偏传统的Web应用风格但功能和可定制性完全对得起它的开源身份。如果你对这个项目不熟可以把它理解成一个“自己部署的、长在你自己服务器上的知识管理系统”。1.2 PVE虚拟化平台带来的管理优势为什么非要放在 PVE 里而不是直接装在一台物理机上原因很简单PVE 给自托管服务提供了三个核心能力——隔离、快照、迁移。PVEProxmox VE本质是一个基于 Debian 的开源虚拟化平台你在浏览器里管理虚拟机可以随时对整台虚拟机做快照和备份。Trilium 这种笔记服务最怕的就是数据库损坏、升级失败、系统盘炸掉但在 PVE 里只要在升级前做一个快照出问题直接回滚几乎是零成本止损。这个优势是物理机部署比不了的也是我推荐“PVE 虚拟机 Trilium”组合的根本原因。另外个人使用场景下单独为笔记服务买一台物理机非常浪费。PVE 上可以同时跑软路由、下载机、媒体服务器、监控系统Trilium 只用给它分配一小部分资源即可。以后如果你想把笔记服务迁移到另一台服务器直接把虚拟机备份文件拷过去恢复或者导出笔记zip文件导入两条路都行。这种“一切尽在掌控”的感觉才是自托管的真正价值。2. 部署形态选型LXC容器、KVM虚拟机、Docker原生二选一在正式开始操作之前先花点时间把部署形态想清楚。PVE 里运行一个服务通常有两条路LXC 容器或者 KVM/QEMU 虚拟机。Trilium 本身也有两种安装方式原生二进制包或者 Docker 容器。这四个选项组合起来看似很多其实理清楚之后选择并不难。2.1 PVE的LXC与KVM虚拟机笔记服务该怎么选PVE 的 LXC 容器和 KVM 虚拟机是两种完全不同的虚拟化方式。LXC 容器和你的宿主机共享同一个内核所以创建速度快、内存占用低开一个容器可能只占几十MB内存适合跑那种“装好就能跑、不需要折腾系统内核”的服务。KVM 虚拟机则是一个完整的、独立的操作系统有自己独立的内核、独立的启动流程资源占用高一些但隔离性更好排障时也更有“真实服务器”的感觉遇到网络、权限、内核模块这类问题时不会受宿主机牵连。我把两者的特点整理成了一个简单对比表对比项LXC容器KVM虚拟机资源占用低共享宿主内核高完整客户机系统隔离性中等文件系统权限天然受限高可做独立内核配置快照/备份支持但有时需要额外配置支持vzdump非常成熟初始化速度秒级需要完整安装系统或克隆模板适合场景快速跑轻量服务希望有独立系统、排障简单、长期维护如果你问我个人怎么选我会推荐 KVM 虚拟机。虽然 LXC 更轻但 Trilium 属于长期运行、数据价值极高的服务虚拟机方式的生命周期管理更干净出了问题也不会影响到同一个宿主机上的其他容器。如果你的PVE内存非常紧张用 LXC 也不是不行只是后面配置用户权限和数据目录时要格外注意容器内文件权限和宿主机映射的问题。2.2 Trilium的两种安装路线原生Node.js与Docker安装方式上Trilium 官网提供的 Linux 二进制包已经内置了 Node.js 运行时所以“原生部署”其实并不需要你自己安装 Node.js而是解压、配置、跑起来就行。这条路线的好处是服务就像普通进程一样直接跑在系统里日志、资源占用、端口监听都一目了然坏处是升级时要手动下载新包、停服务、替换文件路径和权限都需要自己维护。Docker 路线则是把 Trilium 整个装进容器镜像里数据和配置通过 volume 挂载到宿主机目录。好处是升级变成“拉镜像 重建容器”两条命令数据卷隔离得很干净坏处是多了一层容器网络排障时要用docker logs而不是直接看宿主机日志同时镜像本身是社区维护的需要关注镜像更新节奏。我在第 5 章和第 6 章会把两条路线都走一遍你可以根据自己的运维习惯选。如果你不喜欢折腾系统目录直接跳到第 6 章用 Docker 即可如果你想彻底搞清楚 Trilium 的运行机制建议先看第 5 章。3. PVE中创建Linux运行环境虚拟机创建的关键步骤确定了用 KVM 虚拟机之后下一步就是在 PVE 里把这个虚拟机造出来。这里面的关键不只是“点下一步”而是你要提前想好资源分配、网络模型和端口规划否则后面发现问题再改会牵扯到重新装系统或者改一堆配置。3.1 准备系统镜像与创建虚拟机我推荐用 Debian 稳定版或者 Ubuntu Server LTS 作为 Trilium 的操作系统理由很简单它们是长期维护版本安全更新跟得上而且 Triliium 的部署资料最多。不建议用 CentOS Stream 或者过于激进的新版本个人笔记服务不差那点新特性稳定压倒一切。在 PVE 里操作的第一步是把系统 ISO 上传到存储。进入 PVE Web 界面找到 Datacenter 或节点下的 local 存储选择“ISO 镜像”标签页点击“上传”把下载好的 Debian ISO 传上去。然后点击右上角“创建虚拟机”填写 VM ID 和名称在“操作系统”标签选择刚才上传的 ISO客户机系统类型选 Linux版本按 ISO 对应的版本选即可。磁盘大小建议 16GB 到 32GB原因后面会讲别抠这点空间。创建完成后启动虚拟机正常安装系统。安装过程中的分区直接使用整个磁盘如果只跑 Trilium不需要手动划分复杂分区。如果你已经预先配置好了 cloud-init 模板这一步可以更快直接在 PVE 里克隆一个 Debian 模板虚拟机然后在 cloud-init 里设置 IP、用户名和 SSH 密钥。PVE 9.0 和 Debian 13 环境下的 cloud-init 流程已经非常成熟适合批量创建场景。不过新手第一次跑走一遍 ISO 安装反而能让你对系统结构更熟悉所以我这篇以 ISO 安装为主线。3.2 资源分配建议CPU、内存、磁盘的合理值Trilium 是一个典型的 Node.js 单进程应用资源需求并不高但也不能给得太抠否则打开大型笔记或者全文搜索时会明显卡顿。我自己的配置是 2 核 CPU、4GB 内存、32GB 磁盘运行非常流畅。如果你笔记量不大2GB 内存其实也能跑但浏览器端打开大文档时可能会等一两秒。给你一个参考区间资源最低要求推荐配置CPU1核2核内存2GB4GB磁盘16GB32GB备注仅适合轻量使用支持大量图片、长文档磁盘这里我多说一句Trilium 的文档数据库和附加文件都会落在数据目录里参加社区活动或者长期收集资料的人笔记里塞大量截图、PDF 很常见几个月下来数据增长几个GB一点都不夸张。所以磁盘宁大勿小而且PVE里给虚拟机扩容磁盘不算太难但“以后再说”的心态会让你每次扩容都要多一次操作。3.3 网络模型与端口规划PVE 里虚拟机默认网卡连接在 vmbr0 桥接网络上只要宿主机能上网虚拟机配置好 IP 后局域网就能直接访问。我强烈建议给虚拟机配置静态 IP而不是 DHCP否则哪天路由器重启导致 IP 变了笔记访问入口也跟着变非常烦人。端口规划上Trilium 默认监听 8080 端口但 PVE 宿主本身占用 8006同一台宿主上如果还跑着其他服务8080 很容易冲突。我个人的做法是把 Trilium 监听端口改成一个不常用的高端口比如 18080然后以后有需要再用反向代理把 80/443 转发到这个端口。这样既避免了和现有服务吵架又给未来 HTTPS 方案预留了位置。安装时先规划好端口后面防火墙和 systemd 配置都会顺很多。4. Linux系统初始化环境准备与安全基线虚拟机装好系统、能 SSH 登录之后别急着下载 Trilium。先把系统的底子打牢否则后面权限、防火墙、SSH 安全问题会让你反复折腾。这一章的步骤不多但每一条都值得做。4.1 更新系统与安装常用工具第一步永远是更新系统。Debian/Ubuntu 系执行apt update apt upgrade -y然后安装几个后面一定会用到的常用工具apt install -y curl wget git vim htop ufw rsync ca-certificates这些工具看着普通但实际用起来全是必需品curl 和 wget 用来下载 Trilium 安装包vim 用来编辑配置文件htop 看系统负载ufw 做防火墙rsync 做手动数据同步。如果你用的是最小化安装缺了这些工具到后面会非常难受。4.2 创建专用运行用户与目录结构Trilium 虽然在笔者的测试环境里很稳定但任何 Web 服务都有被攻击的可能。不要用 root 用户去跑 Trilium这是自托管服务的第一原则。创建一个专用账号把权限收窄useradd -r -s /usr/sbin/nologin trilium mkdir -p /opt/trilium /var/lib/trilium chown -R trilium:trilium /opt/trilium /var/lib/trilium这里的目录规划是可执行文件放/opt/trilium数据目录放/var/lib/trilium。为什么要把程序和运行数据分开因为备份时你只需要备份数据目录升级时只需要替换程序目录两者混在一起会平添很多麻烦。后面配置 systemd 时只需要让服务以trilium用户运行目录读写权限就限制在合理范围内万一日后有安全问题攻击者也拿不到系统 root。4.3 SSH加固与防火墙配置接下来做基本安全配置。如果你的虚拟机只暴露在局域网SSH 加固可能没那么紧迫但我个人习惯是能加固就加固反正成本极低。编辑/etc/ssh/sshd_configPermitRootLogin prohibit-password PasswordAuthentication no然后重启 SSH 服务。注意如果禁用密码登录你一定要提前把公钥加到~/.ssh/authorized_keys否则会把自己锁在门外。如果你是新手、还在学习阶段可以先保留密码登录等以后熟练了再改不要一开始就给自己制造障碍。防火墙方面Debian/Ubuntu 自带 ufw配置很简单ufw allow OpenSSH ufw allow 18080/tcp ufw enable这里只放行 SSH 和未来 Trilium 要用的端口。PVE 上的其他虚拟机访问这个服务时走局域网 IP 加端口即可不需要额外打开不必要的入站端口。做完之后用ufw status确认规则这个自检动作会让后面省心很多。5. Trilium安装实录原生Node.js部署步骤原生部署 Trilium重点就三件事下载对的包、把端口和数据目录配好、用 systemd 变成常驻服务。本意上它和部署一个静态程序很像但因为涉及数据库文件所以每一步我都尽量解释清楚为什么。5.1 下载Trilium发行包与版本选择去 Trilium 的 GitHub Releases 页面找到最新的trilium-linux-x64-版本号.tar.xz安装包。这里特别提醒一句千万不要图新鲜下载 nightly 版本除非你愿意陪它一起经历未知 bug。个人笔记这种工具稳定版永远是首选。下载并解压到/opt/triliumcd /tmp wget https://github.com/zadam/trilium/releases/download/v0.63.7/trilium-linux-x64-0.63.7.tar.xz tar -xJf trilium-linux-x64-0.63.7.tar.xz mv trilium-linux-x64 /opt/trilium chown -R trilium:trilium /opt/trilium上面版本号v0.63.7只是示例实际版本请以 Release 页面的最新稳定版为准。这个发行包里面已经带好了 Node.js 运行时你不需要、也不应该在系统里再装一套 Node.js这正是官方二进制包最省心的地方。5.2 配置数据目录与启动参数Trilium 支持用环境变量覆盖默认配置其中最常用的是TRILIUM_DATA_DIR和TRILIUM_PORT。TRILIUM_DATA_DIR指定数据目录TRILIUM_PORT指定监听端口。你也可以在数据目录的config.ini里写port18080但我个人更推荐用环境变量因为这样所有配置都集中在 systemd 服务文件里换机器、备份、排查时一眼就能看出服务当时是怎么启动的。首次启动时Trilium 会在数据目录里自动生成配置文件和 SQLite 数据库文件。默认情况下数据目录下就是一个document.db文件这个文件包含你所有笔记内容。SQLite 对个人笔记场景完全够用不需要一开始就上 PostgreSQL等到你的笔记规模真的到了上万篇、需要多人并发编辑时再迁移数据库也不迟。那时再考虑 PostgreSQL 也不难。5.3 systemd服务化与开机自启手动前台启动 Trilium 很容易但真正要让它成为“服务”必须交给 systemd 管理。创建/etc/systemd/system/trilium.service文件[Unit] DescriptionTrilium Notes Server Afternetwork.target [Service] Typesimple Usertrilium Grouptrilium EnvironmentTRILIUM_DATA_DIR/var/lib/trilium EnvironmentTRILIUM_PORT18080 WorkingDirectory/opt/trilium ExecStart/opt/trilium/trilium.sh Restarton-failure RestartSec5 [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl enable --now trilium systemctl status trilium看到active (running)就说明服务起来了。这时候打开浏览器访问http://虚拟机IP:18080第一次访问会让你设置管理员账号和密码。到这里Trilium 的核心部署就算完成了。接下来如果你只是在本机或局域网用直接开始记笔记即可。6. Docker Compose路线适合喜欢容器化的朋友如果你看到上一章那一堆 systemd 配置就头疼或者你本来就习惯用 Docker 管理一切服务那可以直接走 Docker 路线。这条路线会把服务抽象成一个容器数据单独挂载升级重建容器即可非常清爽。6.1 在Linux中安装Docker与ComposeDebian/Ubuntu 上安装 Docker最简单的办法是官方脚本curl -fsSL https://get.docker.com | sh systemctl enable --now docker这个脚本会自动安装 Docker Engine 和 Compose 插件装完以后可以用docker --version和docker compose version验证。有些朋友不喜欢curl | sh这种方式你也可以用apt install docker.io docker-compose-v2效果类似只是版本可能稍微旧一点但稳定性足够。Trilium 不是那种需要最新 Docker 特性的应用所以不用刻意追新。6.2 docker-compose.yml示例与数据卷设计Trilium 官方没有推自己的 Docker 镜像社区里使用最广的是nriver/trilium。我的目录结构是这样/opt/trilium-docker/ ├── docker-compose.yml └── trilium-data/docker-compose.yml内容如下services: trilium: image: nriver/trilium:latest container_name: trilium restart: unless-stopped ports: - 18080:8080 volumes: - /opt/trilium-docker/trilium-data:/root/trilium-data environment: - TRILIUM_DATA_DIR/root/trilium-data启动命令cd /opt/trilium-docker docker compose up -d注意容器内默认数据目录路径是/root/trilium-data所以我把宿主机目录挂载到这个路径。如果镜像更新后默认路径有变化以镜像文档为准。数据卷的好处是你删掉容器重建只要不动trilium-data目录笔记数据就不会丢。这也是 Docker 路线最大的安全感来源。6.3 原生部署与Docker部署的取舍经验两条路线我都实际跑过给你一个最直观的对比原生部署适合想搞懂原理的人。日志直接看journalctl -u trilium端口监听用ss查所有东西都在系统进程树里一目了然出问题排障最直接。代价是升级时你得自己下载新包停服务替换文件再启动。Docker 部署则适合“不想花太多精力维护”的人升级就是改镜像版本号加两行命令数据卷隔离降低误操作风险但排障时会多一层容器封装习惯用docker logs之后也没什么障碍。我的建议是如果这台虚拟机上你还打算跑别的自托管服务干脆全部走 Docker统一管理如果只是纯粹给笔记开一个专用虚拟机原生部署也挺好毕竟维护这一个服务的工作量并不大。7. 备份、恢复与升级笔记服务长期可用的保障部署完成只是开始真正体现自托管服务质量的是备份恢复和升级。Trilium 这种笔记工具存的是你积累的知识和想法丢了比系统崩溃还难受所以这一章的优先级其实比任何功能配置都高。7.1 Trilium自带备份机制与手动导出Trilium 自带的备份机制有两层。第一层是数据目录里的自动备份它会在backup目录下定期生成数据库备份文件备份间隔可以在配置里调整。第二层更简单的备份方式是直接在 Trilium 界面的设置页找到“Backup”按钮点一下就会下载一个包含全部笔记的 zip 文件。这个 zip 适合手动导出也适合迁移到另一台设备时导入。别只依赖自动备份。我个人的固定习惯是每周手动导出一份 zip存到 PVE 宿主机的备份目录或者另一台机器上。为什么因为自动备份文件和 Trilium 在同一个数据目录里如果虚拟机系统盘本身坏了两者会一起遭殃。手动导出一份放在系统外的备份才是真正的“逃生通道”。7.2 PVE层的整机备份vzdumpPVE 对虚拟机做整机备份是最值得利用的功能。在 PVE Web 界面的 VM 备份页可以选择立即备份或创建备份计划默认会生成一个 vma 格式的压缩备份文件里面包含整台虚拟机的磁盘内容。这意味着连操作系统、Node.js 运行时、Trilium 程序、全部配置和数据都一起备份了。万一系统崩溃或升级失败你不需要重新装系统直接恢复 VM 镜像即可。有一点需要注意虚拟机运行时执行 Backup等于在“活着”的状态下拷贝磁盘文件虽然 PVE 能保证磁盘层面的数据一致性但应用层比如数据库可能处于写入中极端情况下恢复后可能丢掉最后几秒的数据。最稳妥的办法是先在虚拟机里systemctl stop trilium备份完成再启动如果不想停服可以开启 QEMU Guest Agent 并配置文件系统冻结让备份做到应用级一致。个人使用场景下数据丢失几秒钟可以接受我一般直接在线备份省事。7.3 从备份恢复与升级的实操流程手动 zip 备份的恢复很简单在 Trilium 设置页选择“Import”选中你保存的 zip 文件导入后笔记树就能恢复回来。vzdump 备份的恢复更快在 PVE 的存储里找到备份文件点恢复指定一个新的 VMID等它跑完就能开机。两条路覆盖的场景不同我建议两个备份机制都保留互为兜底。升级流程上原生部署最稳的做法是systemctl stop trilium cp -r /var/lib/trilium /var/lib/trilium.bak # 下载新版本包并解压到 /opt/trilium systemctl start triliumDocker 部署的升级则简化为docker compose pull docker compose up -d升级之后一定别忘了做验证打开网页登录搜索一篇旧笔记看看附件和主题是否正常。很多升级问题要等实际用起来才会暴露光看服务状态是测不出来的。8. 让Trilium更顺手HTTPS反代、自定义主题与多端同步基础服务跑起来之后很多人会想让它更好用一些。这里我分享三个使用率最高的进阶操作HTTPS访问、自定义界面、多设备同步。这些配置不是必须的但做完了之后Trilium 的可用性会上一个台阶。8.1 用Caddy开启HTTPS与域名访问如果 Trilium 只在局域网访问那 IP 加端口是最简单的方案。但如果你给它绑定了一个域名或者需要从办公室、在外网访问那就应该用反向代理开启 HTTPS。我推荐 Caddy原因是配置极简它会自动申请和管理 Lets Encrypt 证书省掉了 Nginx 那套证书续期流程。在另一台 Linux 上安装 Caddy然后写一个 Caddyfilenote.example.com { reverse_proxy 192.168.1.10:18080 }把域名和虚拟机 IP 替换成你自己的然后caddy reload。Caddy 会自动为note.example.com申请证书之后用 HTTPS 访问这个域名就能打开 Trilium。这里有一个我自己的原则任何暴露到公网的服务至少要有两个安全措施——强密码认证和 HTTPS。Trilium 自带密码登录和 TOTP 双因子认证如果你打算公网访问在设置里把二步验证打开别偷懒。8.2 自定义主题让界面变成自己的风格Trilium 的自定义能力很强入口在“选项 → 外观 → 自定义CSS/自定义JS”。你可以在这里写全局 CSS 来改变字体、颜色、行距也可以从社区下载其他人写好的主题。不少玩过“trilium自定义主题”的朋友都是从改一个字体开始的比如想让正文更宽松.note-content { line-height: 1.8; font-size: 16px; }实际生效的 class 名称可能会随版本改动建议你用浏览器开发者工具先选中目标元素再写自定义 CSS。自定义 JS 则可以做一些快捷键或界面微调。主题只是前端内容不影响后端数据可以随便折腾大不了重新清空代码恢复默认。8.3 多设备访问与同步方案Trilium 自带同步机制支持一台主实例和多个从实例。如果你有台式机、笔记本可以把主实例放在 PVE 虚拟机上在设置中开启同步并设置同步密码其他设备安装 Trilium 桌面端填写主实例的地址、账号和密码就能把笔记树同步到本地。这样即使你在没有网络的地方也能用桌面端浏览和编辑笔记联网后再同步。这里要强调一下Trilium 的同步更偏向“单用户多设备”不是 Notion 那种多人实时协作工具。手机端虽然有 Web 界面可以浏览但官方 App 体验一般。所以我的用法是主力编辑在电脑浏览器或桌面端手机端偶尔查资料用网页凑合一下。如果你手机上访问比较频繁可以考虑直接用 PWA 或单纯把网页添加到主屏幕至少比在浏览器里输完整地址强。9. 实测踩坑记录排障思路与最终自检部署一套服务不踩几个坑是不完整的。我自己在部署和维护 Trilium 的过程中遇到过一些很典型的坑这里把完整的排障思路分享出来希望你能少走我走过的弯路。9.1 最常见的三类故障与排查链路第一次部署时最常遇到的问题是“页面打不开”。我的排查链路是这样的先在虚拟机里执行systemctl status trilium确认服务有没有在运行然后执行ss -lntp | grep 18080确认端口有没有监听接着在虚拟机内curl 127.0.0.1:18080再在宿主机或局域网电脑上curl 192.168.1.10:18080。如果虚拟机内能通、外部不通基本就是防火墙问题执行ufw status检查 18080 有没有放行。如果服务根本没起来就journalctl -u trilium -e看日志权限错误会在里面直接看到。第二类典型问题是数据目录权限错误。现象是启动日志里出现EACCES: permission denied或者页面能开但写不了笔记。原因大多是我在 5.1 节那样的操作流程里某个目录没有正确chown给trilium用户。修复很简单chown -R trilium:trilium /var/lib/trilium /opt/trilium然后重启服务。这个坑出现频率很高但排查成本极低。第三类是升级后登录异常或数据库迁移报错。比如日志里出现“schema version”相关的错误通常是因为你从稳定版跳到了不兼容的版本或者从经典版切换到社区分支 TriliumNext 时没做数据迁移。解决办法是回滚到升级前的备份先恢复数据再按官方文档执行迁移。这也侧面说明了一个道理升级前不做快照等于拿自己的笔记数据当小白鼠。9.2 备份体积膨胀与数据库清理Trilium 的自动备份是整库打包如果你的笔记里塞了大量图片、PDF备份体积会随着时间逐渐膨胀甚至比你实际数据还要大好几倍。我的对策是定期清理backup目录里的旧文件只保留最近几份同时在笔记里尽量使用压缩后的图片不是每个截图都要原图。如果文档量真的到了几万篇以上SQLite 仍然扛得住但这时候建议你把自动备份间隔调长一点或者干脆迁移到 PostgreSQL。普通个人笔记用户远不需要担心这个级别的问题但有备份策略的意识是从新手进阶到老手的标志。9.3 部署完成后的自检清单最后给你一个部署完成后的自检清单照着过一遍基本能确认服务状态健康。检查项操作方法期望结果服务运行状态systemctl status triliumactive (running)端口监听ss -lntp18080 有监听Web访问浏览器访问http://IP:18080能打开并登录防火墙规则ufw status只放行 SSH 和 18080数据目录权限ls -ld /var/lib/trilium属主为 trilium备份验证手动导出 zip 并检查文件文件可读取大小符合预期PVE快照虚拟机快照已创建能正常回滚这些检查项里最容易忽略的是“备份验证”。很多人创建了备份计划就再也不管了直到要恢复时才后悔备份文件早就写坏了。我的经验是每季度至少做一次“演练式恢复”在另一台临时虚拟机上把备份恢复起来确认数据可用。这听起来像在给自己找事做但真到救命那一步你会感谢自己当初多花的那十几分钟。