Trilium Note部署

前言

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 / {
...
# webSocket支持
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;
# webSocket支持
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可以直接访问域名,在浏览器中使用,反应速度比较慢;

桌面端可在发布页下载对应平台的编译版,可以直接建立本地的仓库来使用,也可以连接到一个服务端实例来作为终端使用,效果都非常好。


Trilium Note部署
http://blog.lozzmki.top/posts/9640.html
作者
Lozzmki
发布于
2022年2月9日
许可协议