#用 1Panel + Cloudflare Tunnel 部署 Trilium Notes 私人笔记

Trilium Notes 是一款开源的个人笔记应用,支持富文本、表格、图片、代码块和层级笔记结构,数据存储在本地 SQLite,适合作为私人知识库使用。

本文介绍如何在 VPS 上通过 1Panel 部署 Trilium Notes,并借助 Cloudflare Tunnel 实现安全的公网访问,全程无需配置 Nginx 反代和 SSL 证书。

#架构概览

CODE
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

  1. 进入 1Panel → 容器 → Compose → 新建
  2. 填入以下配置:
YAML
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. 点击部署,等待镜像拉取完成

#1.2 验证容器运行状态

BASH
1docker ps | grep trilium

看到 Up 状态说明运行正常。


#Part 2:配置 Cloudflare Tunnel

#2.1 安装 cloudflared

在 VPS 上执行:

BASH
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

BASH
1cloudflared tunnel login

命令会输出一个 URL,复制到浏览器打开,选择你的域名完成授权。

#2.3 创建 Tunnel

BASH
1cloudflared tunnel create trilium

成功后会输出类似以下内容,记下 Tunnel ID:

CODE
1Created tunnel trilium with id xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

同时会在 /root/.cloudflared/ 目录生成对应的 JSON 凭证文件。

#2.4 写入 Tunnel 配置文件

BASH
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(如果端口已映射)。

确认配置文件内容:

BASH
1cat ~/.cloudflared/config.yml

#2.5 绑定 DNS 记录

BASH
1cloudflared tunnel route dns trilium notes.yourdomain.com

执行后 Cloudflare 会自动在 DNS 中添加一条 CNAME 记录,指向 Tunnel。

#2.6 设置开机自启

BASH
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 控制台:

  1. SettingsAuthenticationLogin methodsAdd new
  2. 选择你想用的登录方式:
    • One-time PIN:往邮箱发验证码,无需任何第三方配置,开箱即用
    • Google:使用 Google 账号登录,需要先在 Google Cloud Console 创建 OAuth 应用

One-time PIN 是最简单的方案,适合个人使用。配置 Google 登录可参考另一篇文章。

重要:添加完 Identity Provider 后,不要开启 "Accept all available identity providers",手动勾选你需要的登录方式,否则可能导致验证码邮件发送异常。

#3.2 创建 Access Application

  1. AccessApplicationsAdd an application → 选择 Self-hosted
  2. 填写基本信息:
    • Application nameTrilium
    • Session duration24 hours(24 小时内免重复验证)
    • Application domain
      • Subdomain:notes
      • Domain:yourdomain.com
  3. 点击 Next

#3.3 配置访问策略

  1. Policy nameOwner only
  2. ActionAllow
  3. Include → 选择 Emails → 填入你自己的邮箱
  4. 点击 NextAdd application

#3.4 在 Application 中指定登录方式

  1. 编辑刚创建的 Application → Login methods 标签
  2. 关闭 Accept all available identity providers
  3. 手动勾选你配置的 Identity Provider(如 One-time PIN 或 Google)
  4. 如果只有一种登录方式,可以开启 Apply instant authentication,跳过选择页面
  5. Save application

#验证效果

打开浏览器无痕窗口,访问 https://notes.yourdomain.com

  1. 被 Cloudflare Access 拦截,显示登录页面
  2. 通过身份验证(输入验证码或 Google 登录)
  3. 进入 Trilium Notes 初始化页面,设置管理员密码
  4. 开始使用

#安全特性总结

特性说明
服务器 IP 隐藏Cloudflare Tunnel 建立出站连接,无需开放入站端口
HTTPS 自动处理Cloudflare 统一管理 TLS,无需申请证书
身份验证Cloudflare Access 在流量入口拦截未授权访问
DDoS 防护Cloudflare 网络层自动防护
暴力破解防护Rate Limiting 限制登录尝试频率

#注意事项

  • Trilium 是单用户设计,适合个人私用
  • 数据存储在 VPS 的 /opt/trilium-data 目录,记得定期备份
  • 如果 VPS 重启,cloudflared 服务会自动随系统启动
  • Cloudflare Zero Trust 免费版支持最多 50 个用户,个人使用完全够用