Trilium Notes 是一款开源的个人笔记应用,支持富文本、表格、图片、代码块和层级笔记结构,数据存储在本地 SQLite,适合作为私人知识库使用。
本文介绍如何在 VPS 上通过 1Panel 部署 Trilium Notes,并借助 Cloudflare Tunnel 实现安全的公网访问,全程无需配置 Nginx 反代和 SSL 证书。
架构概览
浏览器
↓
Cloudflare Access(身份验证)
↓
Cloudflare Tunnel(加密隧道,隐藏服务器 IP)
↓
VPS(Trilium Notes Docker 容器)
- **Cloudflare Tunnel**:负责将公网流量安全转发到内网服务,自动处理 HTTPS,无需开放任何端口
- **Cloudflare Access**:在流量入口做身份验证,只有授权用户才能访问
前置条件
- Ubuntu VPS,已安装 1Panel 和 Docker
- Cloudflare 账号,域名已托管到 Cloudflare(DNS 管理权)
- Cloudflare Zero Trust 已开通(免费版即可)
---
Part 1:用 1Panel 部署 Trilium Notes
1.1 创建 Docker Compose
- 进入 **1Panel → 容器 → Compose → 新建**
- 填入以下配置:
services:
trilium:
image: zadam/trilium:latest
container_name: trilium
restart: unless-stopped
volumes:
- /opt/trilium-data:/home/node/trilium-data
⚠️ 注意:不需要映射端口(`ports`),流量全部通过 Cloudflare Tunnel 转发,不对外暴露端口更安全。
- 点击**部署**,等待镜像拉取完成
1.2 验证容器运行状态
docker ps | grep trilium
看到 Up 状态说明运行正常。
---
Part 2:配置 Cloudflare Tunnel
2.1 安装 cloudflared
在 VPS 上执行:
curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
sudo dpkg -i cloudflared.deb
2.2 登录 Cloudflare
cloudflared tunnel login
命令会输出一个 URL,复制到浏览器打开,选择你的域名完成授权。
2.3 创建 Tunnel
cloudflared tunnel create trilium
成功后会输出类似以下内容,记下 Tunnel ID:
Created tunnel trilium with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
同时会在 /root/.cloudflared/ 目录生成对应的 JSON 凭证文件。
2.4 写入 Tunnel 配置文件
cat > ~/.cloudflared/config.yml << 'EOF'
tunnel: 你的Tunnel-ID
credentials-file: /root/.cloudflared/你的Tunnel-ID.json
ingress:
- hostname: notes.yourdomain.com
service: http://trilium:8080
- service: http_status:404
EOF
`
将 notes.yourdomain.com 替换为你实际的域名,Tunnel ID 替换为上一步生成的值。
`http://trilium:8080` 使用容器名称直接访问,需要 cloudflared 和 Trilium 容器在同一 Docker 网络中;也可以写 `http://localhost:8080`(如果端口已映射)。
确认配置文件内容:
cat ~/.cloudflared/config.yml
2.5 绑定 DNS 记录
cloudflared tunnel route dns trilium notes.yourdomain.com
执行后 Cloudflare 会自动在 DNS 中添加一条 CNAME 记录,指向 Tunnel。
2.6 设置开机自启
sudo cloudflared service install
sudo systemctl start cloudflared
sudo systemctl status cloudflared
看到 active (running) 说明 Tunnel 已正常运行。
---
Part 3:配置 Cloudflare Access 保护访问
Cloudflare Tunnel 建好后,notes.yourdomain.com 已经可以公网访问,但任何人都能打开。需要用 Cloudflare Access 加上身份验证。
3.1 添加 Identity Provider
进入 Cloudflare Zero Trust 控制台:
- **Settings** → **Authentication** → **Login methods** → **Add new**
- 选择你想用的登录方式:
- - **One-time PIN**:往邮箱发验证码,无需任何第三方配置,开箱即用
- - **Google**:使用 Google 账号登录,需要先在 Google Cloud Console 创建 OAuth 应用
One-time PIN 是最简单的方案,适合个人使用。配置 Google 登录可参考另一篇文章。
重要:添加完 Identity Provider 后,不要开启 "Accept all available identity providers",手动勾选你需要的登录方式,否则可能导致验证码邮件发送异常。
3.2 创建 Access Application
- **Access** → **Applications** → **Add an application** → 选择 **Self-hosted**
- 填写基本信息:
- - **Application name**:`Trilium`
- - **Session duration**:`24 hours`(24 小时内免重复验证)
- - **Application domain**:
- - Subdomain:`notes`
- - Domain:`yourdomain.com`
- 点击 **Next**
3.3 配置访问策略
- **Policy name**:`Owner only`
- **Action**:`Allow`
- **Include** → 选择 `Emails` → 填入你自己的邮箱
- 点击 **Next** → **Add application**
3.4 在 Application 中指定登录方式
- 编辑刚创建的 Application → **Login methods** 标签
- 关闭 **Accept all available identity providers**
- 手动勾选你配置的 Identity Provider(如 One-time PIN 或 Google)
- 如果只有一种登录方式,可以开启 **Apply instant authentication**,跳过选择页面
- **Save application**
---
验证效果
打开浏览器无痕窗口,访问 https://notes.yourdomain.com:
- 被 Cloudflare Access 拦截,显示登录页面
- 通过身份验证(输入验证码或 Google 登录)
- 进入 Trilium Notes 初始化页面,设置管理员密码
- 开始使用
---
安全特性总结
| 特性 | 说明 |
|---|---|
| 服务器 IP 隐藏 | Cloudflare Tunnel 建立出站连接,无需开放入站端口 |
| HTTPS 自动处理 | Cloudflare 统一管理 TLS,无需申请证书 |
| 身份验证 | Cloudflare Access 在流量入口拦截未授权访问 |
| DDoS 防护 | Cloudflare 网络层自动防护 |
| 暴力破解防护 | Rate Limiting 限制登录尝试频率 |
---
注意事项
- Trilium 是单用户设计,适合个人私用
- 数据存储在 VPS 的 `/opt/trilium-data` 目录,记得定期备份
- 如果 VPS 重启,cloudflared 服务会自动随系统启动
- Cloudflare Zero Trust 免费版支持最多 50 个用户,个人使用完全够用