在Linux系统中部署Trilium笔记服务器,采用Docker Compose方案是最稳定、最可控的选择,远优于直接运行二进制包或配置systemd服务。后者常因glibc版本不匹配、libstdc++.so.6库缺失或路径硬编码等问题导致部署失败。Docker镜像已预置了兼容的运行时环境,能从根本上规避这些底层的ABI兼容性问题。
Linux部署Trilium核心指南:务必使用Docker Compose;正确配置端口映射、数据卷(必须使用绝对路径)及环境变量;首次访问需立即设置密码并手动将界面语言切换为中文;进行备份前应先停止容器或使用sqlite3命令导出,避免使用NFS等网络文件系统。

那么,为什么不推荐直接运行trilium-cn-linux-x64-server.zip这类官方二进制包呢?
为何不推荐直接运行官方二进制包
该二进制包本质上是将Electron桌面版封装为服务端,严重依赖宿主机上特定版本的C++运行时库。在Ubuntu 22.04或CentOS 8等较新系统上,你极有可能遭遇此类报错:error while loading shared libraries: libstdc++.so.6: cannot open shared object file。手动替换系统级的libstdc++.so.6库风险极高,且每次系统更新都可能使之前的修复失效。相比之下,Docker方案提供了一个隔离且确定性的运行环境,能够一劳永逸地解决依赖问题。
Docker Compose配置中必须修改的三个关键项
许多官方示例配置过于理想化,忽略了实际生产环境的差异。以下三项必须根据你的服务器实际情况进行调整,否则可能导致服务无法访问或数据丢失:
- 端口映射(ports):切勿直接照抄
8080:8080。若服务器的8080端口已被Nginx或其他应用占用,只需修改映射的前半部分即可,例如- "9088:8080"。 - 数据卷(volumes):挂载路径必须使用绝对路径。使用相对路径如
./trilium-data,在非交互式Shell环境(例如通过systemd启动服务)下可能解析失败,导致数据存储在错误位置。正确写法应为:/opt/trilium/trilium-data:/root/trilium-data。 - 环境变量(environment):
TRILIUM_DATA_DIR环境变量的值,必须与上方volume映射中容器内的路径(即/root/trilium-data)保持完全一致。若两者不匹配,容器启动后数据可能写入临时目录,重启后所有记录将丢失。
首次启动后,必须立刻完成的两件事
容器成功运行仅是第一步,若不执行以下操作,后续可能无法登录或界面始终为英文:
- 使用浏览器访问
https://<你的服务器IP>:9088(端口请替换为你实际映射的端口)。首次打开的页面会立即弹出一个设置密码的对话框,你必须在此完成密码设置——此密码无法找回,即使在trilium-data目录中也找不到明文存储。 - 设置密码并登录后,立即点击右上角头像,进入
Options→Language,选择zh-CN,然后刷新页面。仅依赖Docker镜像自带的locale环境变量,通常无法自动完成界面语言的切换。
关于数据安全与备份的实用建议
许多人误以为只要配置了volume数据卷即可高枕无忧。然而,trilium-data目录的核心是一个SQLite数据库文件trilium.sqlite。该文件在写入时会被锁定,直接使用cp或rsync命令进行热备份,很可能得到一个正在被写入的、不完整的损坏副本。
- 最可靠的备份方式:先停止容器再进行文件拷贝。例如:
docker compose down && cp -r /opt/trilium/trilium-data /backup/trilium-$(date +%F)。 - 在线备份方案:若不想停止服务,可使用
sqlite3的导出功能:docker exec trilium-notes sqlite3 /root/trilium-data/trilium.sqlite ".dump" > backup.sql(注意,此处的容器名需与你docker-compose.yml中定义的container_name保持一致)。 - 一个重要提醒:尽量避免将
trilium-data目录挂载到NFS或其他高延迟的网络存储上。SQLite对fsync操作的延迟非常敏感,网络存储可能导致编辑卡顿,甚至事务提交失败。
归根结底,Trilium的价值不在于安装部署的速度,而在于你积累的知识数据能否长期、安全地保存与迁移。使用Docker部署只是一个稳健的开端,真正关键的是理解trilium-data目录的结构,以及哪些操作会破坏数据的原子性。备份不验证、密码不记录、路径不绝对——这三件事只要做错任何一件,都可能让数百个日夜的知识沉淀在瞬间变得无法恢复。
