前言
Trilium是一款开源笔记项目,可以方便地构筑个人知识库。本文记录了Trilium Note的部署方式以及一些问题的处理。
Server
Trilium作者推荐使用Docker来进行服务端部署。
作者做了tag区分,按tag版本拉取镜像即可。
1
| docker pull zadam/trilium:latest
|
创建一个目录,用于存放笔记数据。赋权。
1 2
| mkdir /data/notes chmod 777 /data/notes
|
启动Docker镜像,设置外部端口映射到容器的8080端口,把笔记数据目录挂载到镜像/home/node/trilium-data目录上
1
| docker run -d -p 0.0.0.0:12345:8080 -v /data/notes:/home/node/trilium-data zadam/trilium:latest
|
Nginx配置转发访问,监听对应域名,转发到Docker映射的外部端口。DNS也配置完成后web端就可以访问Trilium了。此时conf配置如下:
1 2 3 4 5 6 7 8 9 10
| server{ listen 80; server_name xxxx.lozzmki.top; location / { proxy_pass http://127.0.0.1:12345; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
|
但是我实测的时候发现这时存在一些表现问题:新建/删除文档,界面不会自动刷新,手动F5刷新之后才显示出来。F12开Console看了下,发现有一堆WebSocket报错。检索发现需要开启Nginx的WebSocket支持,并且增大超时时间设置。
在nginx.conf的http段添加如下设置。
1 2 3 4 5 6 7 8
| ... http { ... map $http_upgrade $connection_upgrade { default upgrade; '' close; } }
|
map指令的作用:
该作用主要是根据客户端请求中$http_upgrade 的值,来构造改变$connection_upgrade的值,即根据变量$http_upgrade的值创建新的变量$connection_upgrade,
创建的规则就是{}里面的东西。其中的规则没有做匹配,因此使用默认的,即 $connection_upgrade 的值会一直是 upgrade。然后如果 $http_upgrade为空字符串的话,
那值会是 close。
再到上面笔记的Nginx conf配置处添加如下配置。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| server{ ... location / { ... proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_connect_timeout 4s; proxy_read_timeout 60s; proxy_send_timeout 12s; } }
|
最终笔记的Nginx配置如下,测试使用正常,尽管反应速度仍然有些慢。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| server{ listen 80; server_name xxxx.lozzmki.top; location / { proxy_pass http://127.0.0.1:12345; proxy_set_header Host $proxy_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_connect_timeout 4s; proxy_read_timeout 60s; proxy_send_timeout 12s; } }
|
Client
Trilium提供了多平台的编辑支持,包括Electron编写的桌面客户端和Web客户端两种。
Web可以直接访问域名,在浏览器中使用,反应速度比较慢;
桌面端可在发布页下载对应平台的编译版,可以直接建立本地的仓库来使用,也可以连接到一个服务端实例来作为终端使用,效果都非常好。