#用 1Panel + Cloudflare Tunnel 部署 Trilium Notes 私人笔记
Trilium Notes 是一款开源的个人笔记应用,支持富文本、表格、图片、代码块和层级笔记结构,数据存储在本地 SQLite,适合作为私人知识库使用。
本文介绍如何在 VPS 上通过 1Panel 部署 Trilium Notes,并借助 Cloudflare Tunnel 实现安全的公网访问,全程无需配置 Nginx 反代和 SSL 证书。
#架构概览
1浏览器
2 ↓
3Cloudflare Access(身份验证)
4 ↓
5Cloudflare Tunnel(加密隧道,隐藏服务器 IP)
6 ↓
7VPS(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 → 新建
- 填入以下配置:
1services:
2 trilium:
3 image: zadam/trilium:latest
4 container_name: trilium
5 restart: unless-stopped
6 volumes:
7 - /opt/trilium-data:/home/node/trilium-data⚠️ 注意:不需要映射端口(
ports),流量全部通过 Cloudflare Tunnel 转发,不对外暴露端口更安全。
- 点击部署,等待镜像拉取完成
#1.2 验证容器运行状态
1docker ps | grep trilium看到 Up 状态说明运行正常。
#Part 2:配置 Cloudflare Tunnel
#2.1 安装 cloudflared
在 VPS 上执行:
1curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb -o cloudflared.deb
2sudo dpkg -i cloudflared.deb#2.2 登录 Cloudflare
1cloudflared tunnel login命令会输出一个 URL,复制到浏览器打开,选择你的域名完成授权。
#2.3 创建 Tunnel
1cloudflared tunnel create trilium成功后会输出类似以下内容,记下 Tunnel ID:
1Created tunnel trilium with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx同时会在 /root/.cloudflared/ 目录生成对应的 JSON 凭证文件。
#2.4 写入 Tunnel 配置文件
1cat > ~/.cloudflared/config.yml << 'EOF'
2tunnel: 你的Tunnel-ID
3credentials-file: /root/.cloudflared/你的Tunnel-ID.json
4
5ingress:
6 - hostname: notes.yourdomain.com
7 service: http://trilium:8080
8 - service: http_status:404
9EOF将 notes.yourdomain.com 替换为你实际的域名,Tunnel ID 替换为上一步生成的值。
http://trilium:8080使用容器名称直接访问,需要 cloudflared 和 Trilium 容器在同一 Docker 网络中;也可以写http://localhost:8080(如果端口已映射)。
确认配置文件内容:
1cat ~/.cloudflared/config.yml#2.5 绑定 DNS 记录
1cloudflared tunnel route dns trilium notes.yourdomain.com执行后 Cloudflare 会自动在 DNS 中添加一条 CNAME 记录,指向 Tunnel。
#2.6 设置开机自启
1sudo cloudflared service install
2sudo systemctl start cloudflared
3sudo 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
- Subdomain:
- Application name:
- 点击 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 个用户,个人使用完全够用