使用 Docker Compose 部署 Umami 并使用 Caddy 实现 HTTPS 反向代理

本文介绍如何部署一款 Web 流量统计工具 —— Umami。将把 Umami 接入到上文提到的 web_network 中,让 Caddy 自动为其实现 HTTPS 反向代理。

发布于 2 月前
阅读时间:
10–15 分钟

在上一篇文章中,我们通过 Docker Compose 成功搭建了 Caddy 统一网关,并创建了一个独立的外部网络 web_network

有了这个坚实的底层基础,今天我们要来部署一款非常强大、开源且注重隐私的 Web 流量统计工具 —— Umami(可完美替代 Google Analytics)。我们将把 Umami 接入到上文提到的 web_network 中,让 Caddy 自动为其实现 HTTPS 反向代理。

架构原理

在继续之前,我们先看一下整体的流量走向:

  1. 访客访问你的统计域名(如 analytics.yourdomain.com)。
  2. 请求到达 Caddy 容器(上文已部署,监听宿主机 80/443 端口)。
  3. Caddy 通过内部网络 web_network,直接将请求转发给 Umami 容器的 3000 端口。
  4. Umami 容器在后台与 PostgreSQL 数据库容器通信。

整个过程中,Umami 和数据库都不需要向宿主机暴露任何端口,极大地保证了服务器的安全。

部署步骤

第一步:准备工作目录

在服务器上为 Umami 创建一个独立的工作目录(建议与上文的 caddy-proxy 目录平级):

Bash

mkdir -p ~/umami && cd ~/umami

第二步:编写 docker-compose.yml

~/umami 目录下创建 docker-compose.yml 文件。我们将定义两个服务:Umami 主程序和 PostgreSQL 数据库。

YAML

version: '3.8'

services:
  umami-db:
    image: postgres:15-alpine
    container_name: umami_db
    restart: unless-stopped
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami_user
      POSTGRES_PASSWORD: your_secure_password # 请更改为你的强密码
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
    networks:
      - web_network

  umami:
    image: ghcr.io/umami-software/umami:postgresql-latest
    container_name: umami_app
    restart: unless-stopped
    environment:
      DATABASE_URL: postgres://umami_user:your_secure_password@umami-db:5432/umami
      APP_SECRET: your_random_long_string_here # 填入一段随机长字符串,用于加密
    depends_on:
      - umami-db
    # 注意:这里不需要暴露端口到宿主机(不需要 ports 映射)
    networks:
      - web_network

networks:
  # 加入上文创建的、供 Caddy 统一调度的外部网络
  web_network:
    external: true

⚠️ 关键点:这里的 networks 必须设置为 external: trueweb_network。这样,新部署的 umami 容器才能与上文部署的 caddy 容器处于同一网络下,实现互联互通。

第三步:启动 Umami 服务

在当前目录下执行命令,让数据库和 Umami 服务在后台运行:

Bash

docker-compose up -d

启动可能需要一两分钟,因为 Umami 首次运行会自动连接数据库并初始化表结构。你可以通过 docker-compose logs -f umami 查看初始化进度。

第四步:配置 Caddy 反向代理

关于 Caddy 容器的部署、web_network 网络的独立创建以及证书的自动申请逻辑,我们在上文中已经详细介绍并完成了部署。现在,我们只需要将 Umami 服务接入到现有的 Caddy 中即可。

进入你上文的 Caddy 配置目录(如 ~/caddy-proxy),修改 Caddyfile,追加 Umami 的域名和反向代理配置:

Nginx

# 上文已有的其他配置...
yourdomain.com {
    reverse_proxy backend_service:8080
}

# 新增:Umami 统计服务的配置
analytics.yourdomain.com {
    # 这里的 umami_app 对应 umami 容器的 container_name
    reverse_proxy umami_app:3000
}

💡 提示:请确保 analytics.yourdomain.com 的 DNS 解析已经指向了你的服务器 IP。

修改完成后,无需重启 Caddy 容器,只需在 Caddy 目录下执行热重载命令:

Bash

docker-compose exec -w /etc/caddy caddy caddy reload

Caddy 会在后台悄无声息地为你的新域名 analytics.yourdomain.com 申请 Let’s Encrypt / ZeroSSL 证书。

验证与使用

  1. 打开浏览器,访问 https://analytics.yourdomain.com
  2. 你应该能看到满怀科技感的 Umami 登录界面。
  3. 默认管理员账号admin
  4. 默认密码umami
  5. 登录后,请务必第一时间前往设置(Settings)修改默认密码

随后,你就可以在 Umami 后台“添加网站”,获取一小段 JS 统计代码,将其粘贴到你的博客或网站中。由于 Caddy 已经全自动帮我们配置好了 HTTPS 和 HTTP/3,你的统计代码在各种现代浏览器中都能完美、安全地加载。

总结

得益于我们在上文中设计的独立网络 web_network 方案,整个扩展过程变得极其丝滑。我们部署 Umami 时,无需担心端口冲突,也不需要手动配置复杂的 SSL 证书。只需要在 Umami 的 Compose 文件中声明加入该网络,并在 Caddyfile 中用容器名指向它,HTTPS 反向代理便大功告成!

2,388字
发布时间:2026/06/09
最后修改:2026/06/10
标签:, ,