使用 Docker Compose 部署 Trilium 笔记并使用 Caddy 实现 HTTPS 反向代理

本文详细介绍了如何使用 Docker Compose 部署功能强大的层级式笔记软件 Trilium Notes。文章采用“网络解耦”的分离式架构,结合 Caddy 作为全局网关,不仅实现了 HTTPS 自动证书申请与安全的双重保障,更构建了一套便于未来无限扩展的多站点轻量网关架构。

发布于 4 天前
2,652字
阅读时间:
11–17 分钟

在碎片化信息爆炸的时代,一款趁手的笔记软件至关重要。Trilium Notes 是一款专为极客打造的层级式笔记软件,支持无限层级、富文本、Markdown、代码高亮、甚至自带网页剪藏和强大的脚本扩展功能。

为了实现多端同步和随时随地访问,将 Trilium 部署在云服务器上是最佳选择。本文将带你使用 Docker Compose 异步解耦部署 Trilium 笔记,并利用 Caddy 作为全局网关实现自动申请 SSL 证书(HTTPS)的反向代理方案。

为什么选择这种部署架构?

很多教程喜欢把 Caddy 和 Trilium 写在同一个 docker-compose.yml 文件里,这在前期很方便,但缺乏扩展性。本文采用 分离式架构

  1. 网络解耦:创建一个独立的 Docker 外部网络,Caddy 和 Trilium 各自管理自己的容器。
  2. 无限扩展:未来如果你想新增博客或其它 Web 服务,只需将其加入这个外部网络,在 Caddy 配置文件中加几行即可,无需重启其他服务。
  3. 端口安全:Trilium 的端口不需要暴露给宿主机,所有流量由 Caddy 统一把守,安全性极高。

前期准备

在开始之前,请确保你已经:

  1. 一台安装了 Docker 和 Docker Compose 的 Linux 服务器。
  2. 一个属于你的域名(例如:note.yourdomain.com)。
  3. 将该域名的 A 记录 解析到你服务器的公网 IP。
  4. 服务器开放了 80443 端口。

第一步:创建公共 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 的初始化欢迎页面:

  1. 选择 “I am a new user…”(我是新用户)
  2. 设置你的强登录密码。
  3. 进入后台,开始你的知识库构建之旅!

日常维护与进阶技巧

1. 未来如何添加新服务?

这就是分离式架构最迷人的地方。假设你未来部署了一个使用 80 端口的 WordPress 博客(容器名叫 wp-blog-app),你只需要:

  1. 让 WordPress 容器同样加入 web-network 网络。
  2. 修改 ~/docker/caddy/Caddyfile,追加内容:
    blog.yourdomain.com { reverse_proxy wp-blog-app:80 }
  3. ~/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 让这一切变得极其简单和现代。

如果你在搭建过程中遇到任何问题,欢迎在下方评论区留言讨论!

发布时间:2026/06/04
最后修改:2026/06/07
标签:, ,