在 DigitalOcean 上自托管 Plausible Analytics 2026 — 完整指南
Plausible Analytics 是一个开源的、隐私优先的网站测量工具,不需要 cookie 同意横幅,在 DigitalOcean Droplet 上自托管它可以让您完全控制分析数据,无需依赖第三方服务器。本指南介绍了选择合适的 Droplet 规格、使用 Docker Compose 部署、安装跟踪脚本以及规划长期数据备份的步骤。
目录
什么是 Plausible,它与 Google Analytics 有何不同?(隐私优先)
Plausible Analytics 是一款开源网站测量工具,设计为 Google Analytics 的轻量级、隐私意识型替代方案。其跟踪脚本重量不到 1KB,而 Google 的 gtag.js 要大几倍,大大降低了对页面加载时间的影响。关键区别是 Plausible 不使用 cookie,也不收集个人身份识别信息 (PII),如 IP 地址 — 相反,IP 被立即进行哈希处理且不永久存储。这意味着使用 Plausible 的网站不需要在 GDPR 或隐私指令下显示 cookie 同意横幅,不同于许多司法管辖区要求同意的 Google Analytics。仪表板设计用于单页阅读,显示关键指标如独立访问者、页面浏览、跳出率和访问时长,并按来源、页面、国家和设备分类 — 没有像 GA4 那样通常需要用户花时间学习的复杂多层菜单。自托管 Plausible 意味着所有分析数据保持在您的控制下,在您自己的基础设施上处理,没有与 Plausible Cloud(按流量计费的托管服务)相关的每月页面浏览限制。权衡是您需要自己负责服务器维护、安全补丁和备份 — 适合已具备 DevOps 能力的团队或正在为其他服务运行 Droplet 且想添加分析而不产生额外流量费用的团队。
- 无 cookie 且无 PII 收集 — 不需要 cookie 同意横幅
- 跟踪脚本小于 1KB — 对页面加载的影响小于 Google Analytics
- 单页仪表板,易于阅读 — 没有像 GA4 那样的复杂多层菜单
推荐的 Droplet 规格
Plausible 使用 ClickHouse 作为主要的分析事件数据库,即使流量较低也需要比典型 Web 应用程序更多的 RAM。Plausible 团队建议最低 2GiB RAM 以保证稳定的生产运营。对于月流量达约 100k 页面浏览的中小型网站,基础层 Droplet(共享 CPU)配置 2 GiB RAM / 1 vCPU / 50 GB SSD / 2,000 GiB 流量($12/月)足以通过 Docker Compose 运行 Plausible、PostgreSQL 和 ClickHouse。对于更高流量或单个实例上的多个网站,考虑使用 4 GiB RAM / 2 vCPU / 80 GB SSD / 4,000 GiB 流量($24/月)为 ClickHouse 提供足够的内存以进行实时查询而无延迟问题(定价截至 2026 年 7 月 — 请在您的提供商处验证当前费率)。对于泰国用户,sgp1(新加坡)是推荐的地区,在 DigitalOcean 的 15 个数据中心中延迟最低;blr1(班加罗尔)作为备选。创建 Droplet 时,启用云防火墙(无额外成本)以限制开放端口仅为 22(SSH)、80 和 443(HTTP/HTTPS),如果需要为 DNS 设置预先获得静态地址,可考虑使用保留 IP — 只要分配给活跃 Droplet 就免费。新的 DigitalOcean 用户可通过推荐链接 获得 $200 免费信用 → 来在提交前进行测试。
- Plausible 建议 2GiB RAM 最低配置,因为 ClickHouse 需要比典型 Web 应用程序更多的内存
- 轻到中等流量:基础 2 GiB RAM / 1 vCPU / 50GB SSD ($12/月) 足够
- 高流量或多个网站:4 GiB RAM / 2 vCPU / 80GB SSD ($24/月)
使用 Docker Compose 部署
创建 Droplet 并安装 Docker 和 Docker Compose 后,第一步是使用 git clone https://github.com/plausible/community-edition.git plausible && cd plausible 克隆官方 Plausible Community Edition 存储库,然后使用 cp plausible-conf.env.example plausible-conf.env 复制示例环境文件并编辑它以匹配您的实际域名,如 BASE_URL=https://plausible.yourdomain.com,并使用通过 openssl rand -base64 64 | tr -d '\n' 生成的随机字符串设置 SECRET_KEY_BASE。docker-compose.yml 定义了三个主要服务:plausible(主应用程序)、plausible_db(用于用户帐户和网站配置的 PostgreSQL)和 plausible_events_db(用于事件数据的 ClickHouse)。主应用程序的示例服务定义如下所示 plausible: image: ghcr.io/plausible/community-edition:v2 restart: always command: sh -c "sleep 10 && /entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh run" depends_on: [plausible_db, plausible_events_db] ports: ["8000:8000"]。配置准备就绪后,使用 docker compose up -d 启动所有服务;系统在首次运行时自动拉取镜像并创建数据库模式。使用 docker compose ps 检查容器状态,使用 docker compose logs -f plausible 查看日志。准备好后,Plausible 在 Droplet 内的端口 8000 上监听。最后一步是设置反向代理,如 Caddy 或 Nginx,并从 Let's Encrypt 获取 SSL 证书,以通过 HTTPS 在您配置的域上公开该服务 — Plausible 在生产环境中需要 HTTPS。反向代理设置完成后,访问域名将显示管理员帐户创建页面;输入电子邮件和密码以访问仪表板。
- 使用
git clone https://github.com/plausible/community-edition.git克隆存储库 - 在启动前在 plausible-conf.env 中设置 BASE_URL 和 SECRET_KEY_BASE
- docker-compose.yml 有 3 个主要服务:plausible(应用程序)、plausible_db(Postgres)、plausible_events_db(ClickHouse)
- 使用
docker compose up -d运行并使用docker compose ps检查状态
在您的网站上安装跟踪脚本
一旦 Plausible 服务器以 HTTPS 运行,通过点击仪表板中的"添加网站"并输入您的网站域名(如 example.com)来添加新网站。系统自动生成跟踪脚本,必须放在您想要测量的每个页面的 <head> 中。基本脚本格式是 <script defer data-domain="example.com" src="https://plausible.yourdomain.com/js/script.js"></script>,其中 data-domain 属性必须完全匹配您仪表板中注册的域名,src 必须指向您的自托管实例,而不是 plausible.io。对于使用 Next.js、Nuxt 或 WordPress 等框架构建的网站,您可以将这个相同的脚本放在主布局文件中或通过支持自定义脚本注入到头部的插件中。要追踪自定义事件(如登录按钮点击或文件下载),通过将文件名更改为 script.outbound-links.file-downloads.js 来启用扩展脚本。嵌入脚本并部署后,在浏览器中打开您的网站并返回 Plausible 仪表板 — 您应该在几秒内看到实时访问者计数增加。如果您看不到任何数据,请检查广告拦截器或浏览器扩展是否阻止了对您的 Plausible 域的请求,因为某些阻止分析的扩展可能会阻止包含"analytics"或"stats"的域 — 这就是为什么某些管理员选择不匹配常见过滤条款的子域名。
- 通过仪表板中的"添加网站"按钮添加新网站,该按钮会自动生成脚本
- 使用格式
<script defer data-domain="example.com" src="https://plausible.yourdomain.com/js/script.js"></script>将脚本嵌入到 head 中 - data-domain 必须完全匹配注册的域名;src 必须指向您的自托管实例,而不是 plausible.io
备份分析数据
基于真实使用经验,由于所有分析数据都驻留在您的 Droplet 上运行的 PostgreSQL 和 ClickHouse 中,备份规划完全由您负责 — 没有像云服务提供的自动备份。最简单的方法是使用数据库级备份,对 PostgreSQL 使用 pg_dump,通过容器命令如 docker compose exec plausible_db pg_dump -U postgres plausible_db > plausible_db_backup.sql,对 ClickHouse 您可以使用其内置备份机制或通过计划的 clickhouse-client 导出事件表。设置每日自动 cron 备份作业来运行这些备份命令,然后将生成的文件上传到 Droplet 外以防止总 Droplet 故障。另一种基础设施级别的方法是将 DigitalOcean Volume(块存储)连接到您的 Droplet,每 GiB 月费 $0.10,将其挂载为 ClickHouse 和 PostgreSQL 的数据目录,并创建 Volume 快照,每 GiB 月费 $0.06 — 这将备份与 Droplet 生命周期分离。对于包括配置和 Docker 镜像的完整系统备份,创建 Droplet 快照,每 GiB 月费 $0.06,这捕获了给定时刻的整个磁盘状态;它非常适合主要版本升级前的恢复点(定价截至 2026 年 7 月 — 请在您的提供商处验证当前费率)。无论采用哪种方法,都要从实际备份文件测试至少一次恢复以确认恢复过程确实有效 — 仅拥有备份文件是不够的。
- 数据库级备份:pg_dump 用于 PostgreSQL + 导出 ClickHouse 事件表作为每日 cron 作业
- 始终将备份文件存储在 Droplet 之外以防止 Droplet 故障时的完全丢失
- 使用 DigitalOcean Volumes($0.10/GiB/月)挂载为数据目录,与 Droplet 磁盘分离
- Volume 快照($0.06/GiB/月)或 Droplet 快照($0.06/GiB/月)用于主要更新前的恢复点
- 从实际备份文件测试至少一次恢复以验证恢复过程确实有效
何时使用此功能(真实用例)
在 DigitalOcean 上自托管 Plausible 适合特定的组织需求,而不是对每个人都最优。第一类是具有严格数据驻留或合规性要求的网站或组织 — 需要所有用户数据完全控制的基础设施上,不通过第三方服务器,通常在医疗保健、金融或政府部门中很常见,有严格的数据政策。第二类是流量如此之高以至于 Plausible Cloud 的每页面浏览成本明显超过固定 Droplet 成本的网站,因为自托管没有每事件费用,成本保持不变,无论流量如何(只要 Droplet 规格能处理)。第三类是已经为其主应用程序运行 Droplet 的团队,他们想添加分析而不添加另一个第三方依赖或隐私政策考虑。相反,对于没有专业服务器管理员的小团队,或流量保持 Plausible Cloud 比每月 Droplet 便宜的网站,托管 Plausible Cloud 服务可能在节省时间方面更具成本效益,避免维护、安全补丁、备份和监控。在提交自托管之前,评估您的团队是否具有基本的 DevOps 就绪状态 — 熟悉 Docker、反向代理、SSL 证书和资源监控 — 因为一旦您自托管,您将拥有所有责任。
- 具有严格数据驻留合规的组织,需要 100% 控制 — 例如医疗保健、金融、政府
- 流量如此之高以至于 Plausible Cloud 的每页面浏览成本明显超过月度 Droplet 成本的网站
- 已经在为其主应用程序运行 Droplet 的团队,他们想要分析而不添加更多第三方服务
- 没有专业服务器员工的小团队,或低流量网站 — 托管 Plausible Cloud 可能在时间上更经济
常见错误和修复
最常见的问题是 ClickHouse 消耗的内存超过您的 Droplet 提供的内存,导致容器被 OOM(内存不足)杀手杀死。迹象包括仪表板加载缓慢或 plausible_events_db 容器重复重启。修复:使用 docker stats 检查内存使用情况,如果 Droplet RAM 低于 2GiB,将 Droplet 大小调整为更高级别。第二个问题是忘记在 plausible-conf.env 中配置 SMTP,这阻止系统发送帐户确认电子邮件或周报告。添加 SMTP 变量如 SMTP_HOST_ADDR、SMTP_HOST_PORT、SMTP_USER_NAME 和 SMTP_USER_PWD 以匹配您的电子邮件提供商。第三是反向代理设置不正确导致混合内容错误或 HTTP/HTTPS 重定向循环,通常来自 BASE_URL 不匹配实际访问 URL 或反向代理未能转发 X-Forwarded-Proto 头以使容器理解请求是通过 HTTPS 来的。第四是磁盘填满来自累积的 ClickHouse 日志和事件数据,特别是高流量网站在多个月内。使用 df -h 定期监控磁盘空间,在磁盘满之前通过 Volumes 规划存储扩展。第五是几个月内忽视 Docker 镜像更新,错过关键安全补丁或错误修复。定期查看 Plausible Community Edition 发布说明,并按常规节奏安排更新。
- ClickHouse 消耗过量 Droplet 内存导致 OOM 杀死 — 检查 docker stats 并在需要时调整 Droplet 大小
- plausible-conf.env 中未配置 SMTP,导致帐户确认和周报告电子邮件中断
- BASE_URL 不匹配实际 URL 或反向代理未转发 X-Forwarded-Proto,导致重定向循环
最佳实践
为了长期保持自托管的 Plausible 实例稳定,从一开始就采用这些实践。首先,将 PostgreSQL 和 ClickHouse 数据目录分离到 DigitalOcean Volumes 而不是 Droplet 的主磁盘上,允许自由存储扩展而无需重新定位 Droplet,并简化与系统磁盘的独立快照备份。其次,启用 DigitalOcean 监控(免费,包括免费正常运行时间检查)以在 CPU、内存或服务响应性变得异常时立即发出警报。第三,按照之前描述的设置每日自动化 cron 备份作业,并在 DigitalOcean 之外保持至少一份备份副本以防止帐户级别或地区范围风险。第四,通过云防火墙限制管理员和 API 访问仅打开必要端口,并考虑在反向代理级别为敏感路径添加第二层基本认证。第五,如果运行多个 Droplet,使用 VPC(免费私有网络)隔离数据库实例与应用程序实例,减少暴露给公共互联网的攻击面。最后,在生产环境上运行主要版本更新之前在暂存环境上测试,特别是当迁移涉及大型数据库更改时,以最小化生产环境中更新期间的停机时间。始终遵循这些实践有助于您自托管的分析平台实现与托管云服务相当的稳定性,同时保留完整的数据控制。
- 将 PostgreSQL/ClickHouse 数据目录分离到 DigitalOcean Volumes 以实现独立于 Droplet 的自由存储扩展
- 启用 DigitalOcean 监控(免费)并设置正常运行时间检查以在资源异常时立即发出警报
- 设置每日自动化 cron 备份并在 DigitalOcean 之外保持至少一份副本