在碎片化信息爆炸的时代,一款趁手的笔记软件至关重要。Trilium Notes 是一款专为极客打造的层级式笔记软件,支持无限层级、富文本、Markdown、代码高亮、甚至自带网页剪藏和强大的脚本扩展功能。
为了实现多端同步和随时随地访问,将 Trilium 部署在云服务器上是最佳选择。本文将带你使用 Docker Compose 异步解耦部署 Trilium 笔记,并利用 Caddy 作为全局网关实现自动申请 SSL 证书(HTTPS)的反向代理方案。
为什么选择这种部署架构?
很多教程喜欢把 Caddy 和 Trilium 写在同一个 docker-compose.yml 文件里,这在前期很方便,但缺乏扩展性。本文采用 分离式架构:
- 网络解耦:创建一个独立的 Docker 外部网络,Caddy 和 Trilium 各自管理自己的容器。
- 无限扩展:未来如果你想新增博客或其它 Web 服务,只需将其加入这个外部网络,在 Caddy 配置文件中加几行即可,无需重启其他服务。
- 端口安全:Trilium 的端口不需要暴露给宿主机,所有流量由 Caddy 统一把守,安全性极高。
前期准备
在开始之前,请确保你已经:
- 一台安装了 Docker 和 Docker Compose 的 Linux 服务器。
- 一个属于你的域名(例如:
note.yourdomain.com)。 - 将该域名的 A 记录 解析到你服务器的公网 IP。
- 服务器开放了 80 和 443 端口。
第一步:创建公共 Docker 网络
首先,我们需要在服务器上创建一个名为 web-network 的公共网络,作为 Caddy 和其他容器之间通信的桥梁。
Bash
docker network create web-network
第二步:部署 Trilium 笔记
我们在服务器上创建专门的目录来存放 Trilium 的配置文件和数据。
1. 创建项目目录
Bash
mkdir -p ~/docker/trilium && cd ~/docker/trilium
mkdir trilium-data
2. 创建 docker-compose.yml
Bash
vim docker-compose.yml
将以下内容复制进去:
YAML
services:
trilium:
image: triliumnext/notes:latest
restart: unless-stopped
environment:
- TRILIUM_DATA_DIR=/home/node/trilium-data
volumes:
- ./trilium-data:/home/node/trilium-data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
networks:
- web_network
networks:
# 声明引入外部已创建好的公共网络
web_network:
external: true
3. 启动 Trilium
Bash
docker compose up -d
第三步:部署 Caddy 反向代理
接下来部署 Caddy,它将负责监听 80/443 端口,处理域名请求,并自动向 Let’s Encrypt 申请免费的 SSL 证书。
1. 创建 Caddy 目录
Bash
mkdir -p ~/docker/caddy && cd ~/docker/caddy
mkdir caddy_config caddy_data
2. 创建 Caddyfile 配置文件
Bash
vim Caddyfile
修改为你自己的域名,写入以下配置:
Nginx
# 你的笔记域名
note.yourdomain.com {
# 核心:因为在同一个web-network网络下,可以直接通过容器名+端口号进行反向代理
reverse_proxy trilium-notes:8080
}
3. 创建 Caddy 的 docker-compose.yml
Bash
vim docker-compose.yml
写入以下内容:
YAML
services:
caddy:
image: caddy:2-alpine
container_name: caddy_proxy
restart: unless-stopped
cap_add:
- NET_ADMIN
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./caddy_data:/data
- ./caddy_config:/config
networks:
- web_network
networks:
web_network:
external: true
4. 启动 Caddy
Bash
docker compose up -d
第四步:初始化与使用
容器全部启动后,Caddy 会在后台默默帮你申请好证书(通常需要30秒到1分钟)。
此时,打开浏览器访问你的域名:https://note.yourdomain.com。
你会看到 Trilium 的初始化欢迎页面:
- 选择 “I am a new user…”(我是新用户)。
- 设置你的强登录密码。
- 进入后台,开始你的知识库构建之旅!
日常维护与进阶技巧
1. 未来如何添加新服务?
这就是分离式架构最迷人的地方。假设你未来部署了一个使用 80 端口的 WordPress 博客(容器名叫 wp-blog-app),你只需要:
- 让 WordPress 容器同样加入
web-network网络。 - 修改
~/docker/caddy/Caddyfile,追加内容:blog.yourdomain.com { reverse_proxy wp-blog-app:80 } - 在
~/docker/caddy目录下执行热重载命令(无需重启容器,网站不掉线):docker compose exec -w /etc/caddy caddy caddy reload
2. 备份数据
Trilium 的所有笔记、图片和配置都保存在 ~/docker/trilium/trilium-data 目录下。你只需要定期备份这个文件夹(或者里面的 trilium.db 文件),就能保证数据绝对安全。
3. 升级 Trilium
当社区发布新版本时,升级非常简单:
Bash
cd ~/docker/trilium
docker compose pull
docker compose up -d
结语
通过 Docker Compose + Caddy 的组合,我们不仅优雅地搭建好了属于自己的私有云笔记,还顺便构建了一套强大的多站点轻量网关架构。告别了 Nginx 繁琐的证书配置,Caddy 让这一切变得极其简单和现代。
如果你在搭建过程中遇到任何问题,欢迎在下方评论区留言讨论!