Plausible Analytics 全方位技术指南:隐私优先的开源网站统计平台
posts posts 2026-05-17T20:25:00+08:00深入解析 Plausible Analytics:隐私友好的开源网站统计平台,涵盖特性、安装、配置及与 Google Analytics 的全面对比。技术指南, 开源工具Plausible, Analytics, Web Analytics, Privacy, Open Source, Docker, Self-hostedPlausible Analytics 全方位技术指南:隐私优先的开源网站统计平台
引言
Plausible Analytics 的取舍很直接:放弃跨会话用户画像、放弃复杂维度报表、放弃与广告平台的深度集成,换来无 Cookie、无 PII、无隐私弹窗的聚合统计。这个取舍决定了它的适用边界——个人博客、企业官网、政务医疗教育类网站这类"只需要知道访问量和来源"的场景,Plausible 的指标集已经够用;需要漏斗分析、用户级留存、BigQuery 导出的场景,仍然得回到 Google Analytics 4。
Google Analytics 因隐私政策复杂、数据收集范围过宽以及 GDPR 合规要求严格,正在被越来越多的开发者和企业弃用。Plausible 作为自托管网站分析的主流选择,技术栈是 Elixir/Phoenix + PostgreSQL + ClickHouse,脚本体积 ~1KB,部署形态是 Docker Compose 单机起。
学习目标
读完本文后,你应能:
- 说清 Plausible “无 Cookie + 聚合统计” 这个设计放弃了哪些 GA 能力,又换来了哪些合规和性能优势。
- 跟着一次页面访问走完 script.js 加载、事件上报、PostgreSQL 写元数据、ClickHouse 写事件、仪表盘查询的完整链路。
- 用 Docker Compose 在 10 分钟内起一套生产可用的 Plausible,包括 PostgreSQL、ClickHouse、Nginx 反代和 SMTP。
- 在 Plausible 和 GA4 之间做选型时,能列出 14 个维度的差异并判断自己的需求落在哪一侧。
一、什么是 Plausible Analytics?
Plausible Analytics 是一款由 Uku Täht 和 Marko Saric 主导开发的隐私优先、轻量级、开源网站统计工具。它于 2019 年正式发布,旨在为网站提供一种与 Google Analytics 完全不同的分析体验——不追踪个人用户、不使用 Cookie、不需要烦人的隐私弹窗,同时提供所有你最关心的网站访问数据。
1.1 设计原则
Plausible 的设计围绕三个原则:
| 原则 | 说明 |
|---|---|
| 隐私优先 | 不收集个人身份信息(PII),不追踪用户跨站行为,不使用 Cookie |
| 轻量至上 | 仪表盘脚本仅 ~1KB(vs GA4 的 ~50KB+),不影响页面加载速度 |
| 简洁可读 | 仪表盘只有你最需要的数据,没有复杂的维度和报表迷宫 |
1.2 许可证与版本
Plausible 提供两个版本:
- Cloud 版:托管在 plausible.io,按月付费,省去运维麻烦
- Self-hosted 版:MIT 许可证开源免费,允许完全私有化部署
本文重点聚焦 Self-hosted 开源版,因为这才是技术深度用户和企业的核心关注点。
二、功能详解
Plausible Analytics 提供了一套精简但足够强大的分析功能集,所有数据均为聚合统计,不涉及个人用户追踪。
2.1 网站概览(Dashboard)
登录后的首页即为网站概览仪表盘,展示以下核心指标:
- 独特访客数(Unique Visitors):以 24 小时窗口去重统计的真实访问人数
- 浏览量(Pageviews):页面被加载的总次数
- 访问时长(Bounce Rate / Visit Duration):单页跳率与平均停留时长
- 流量来源(Traffic Sources):直接访问、搜索引擎、社交媒体、引荐链接等
- Top 页面(Top Pages):访问量最高的页面排行
- 国家/设备/浏览器分布:访问者的地理、设备和浏览器信息
2.2 自定义事件(Custom Events)
Plausible 支持通过 JavaScript API 追踪任意自定义事件,适合追踪按钮点击、表单提交、文件下载等业务关键行为。
// 基本自定义事件
window.plausible("Register")
// 带访问量的事件
window.plausible("Purchase", { props: { value: 99.9 } })
// 电子商分类事件
window.plausible("Purchase", {
props: {
method: "Credit Card",
currency: "USD",
items: ["item_1", "item_2"]
}
})2.3 目标转化(Goals)
通过设置目标,可以追踪特定事件的转化率,例如注册转化率、付费漏斗等。Goals 支持:
- Count 目标:统计事件触发次数
- Conversion 目标:设置起点和终点,追踪漏斗转化
- Micro conversions:追踪子步骤完成情况
2.4 站内搜索(Site Search)
启用后,Plausible 会自动解析 URL 中的搜索查询参数(如 ?q=keyword),显示访客在你的站内搜索了什么关键词,帮助内容优化。
2.5 异常值排除(Exclusions)
支持通过 IP 地址、Certain countries、自定义过滤器排除异常流量(如你自己的访问、内部测试流量),确保数据真实反映用户行为。
2.6 分享与嵌入(Shared Links)
可以生成只读的公开链接,嵌入到 Notion、Obsidian 或其他文档中,无需登录即可查看实时数据,适合向客户或团队展示网站状态。
2.7 一次页面访问如何流过系统
以一个用户打开 https://your-site.com/page 为例,数据从浏览器到仪表盘的流转路径:
- 浏览器加载页面 HTML,遇到
<script defer data-domain="your-site.com" src="https://analytics.your-domain.com/js/script.js">,异步下载 ~1KB 的追踪脚本。 - 脚本执行后,构造一个
POST /api/event请求,body 里只有聚合字段:domain、url、referrer、screen_width,不携带 Cookie,不发送任何用户标识。 - Plausible 后端(Elixir/Phoenix)收到请求,先校验
domain是否在已注册站点列表里(PostgreSQL 查询),再写入一条事件记录。 - 事件明细写入 ClickHouse(时间序列存储),站点元数据、用户账号、目标配置留在 PostgreSQL。
- 用户打开仪表盘时,Phoenix 查询 ClickHouse 聚合出独特访客数、浏览量、来源分布等指标,渲染成 JSON 返回前端。
这条链路里有两个设计要点:第一,脚本不上传 Cookie,后端也不下发 Cookie,所以不需要 Cookie Consent 弹窗;第二,ClickHouse 只存聚合事件,没有 user_id 字段,从数据模型层面就排除了跨会话追踪的可能。这也是 Plausible 能在 GDPR 合规上做到"开箱即用"的根因——不是配置出来的,是 schema 决定的。
三、安装部署:Docker 自托管完整指南
Plausible Analytics 采用 Elixir/Phoenix 技术栈构建,自托管版本通过 Docker 容器化部署,数据存储在 PostgreSQL 中,时间序列数据存储在 ClickHouse 中。
3.1 系统要求
| 要求 | 最低配置 |
|---|---|
| CPU | 1 Core |
| 内存 | 1 GB |
| 磁盘 | 5 GB+ |
| Docker | 20.10+ |
| Docker Compose | 1.29+ |
3.2 Docker Compose 完整配置
以下是一份生产级别可用的完整 docker-compose.yml 配置,包含 PostgreSQL、ClickHouse、Plausible 本体以及可选的 Nginx 反向代理:
version: "3.8"
x plausible-defaults: &plausible-defaults
APP_IP: "0.0.0.0"
BASE_URL: "https://analytics.your-domain.com"
SECRET_KEY_BASE: "替换为你的64字符随机密钥"
DISABLE_AUTH: "false"
DISABLE_REGISTRATION: "false"
services:
plausible:
image: plausible/analytics:v2.1.0
restart: unless-stopped
depends_on:
plausible_db:
condition: service_healthy
plausible_events_db:
condition: service_healthy
env_file:
- plausible_conf
ports:
- "127.0.0.1:8000:8000"
volumes:
- plausible_data:/data
plausible_db:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_DB: plausible
POSTGRES_USER: plausible
POSTGRES_PASSWORD: "替换为你的数据库密码"
POSTGRES_PASSWORD: "替换为你的数据库密码"
volumes:
- plausible_db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U plausible"]
interval: 10s
timeout: 5s
retries: 5
plausible_events_db:
image: clickhouse:2024-alpine
restart: unless-stopped
environment:
CLICKHOUSE_DB: plausible
CLICKHOUSE_USER: plausible
CLICKHOUSE_PASSWORD: "替换为你的ClickHouse密码"
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: 1
volumes:
- plausible_events_db_data:/var/lib/clickhouse
- ./clickhouse/logger.xml:/etc/clickhouse-server/config.d/logger.xml:ro
healthcheck:
test: ["CMD-SHELL", "wget --spider -q localhost:8123/ping"]
interval: 10s
timeout: 5s
retries: 5
mail:
image: bytemark/smtp:release7
restart: unless-stopped
environment:
SUBMISSION_SMTP_HOST: "smtp.your-provider.com"
SUBMISSION_SMTP_PORT: "587"
SUBMISSION_SMTP_USER: "your-smtp-user"
SUBMISSION_SMTP_PASSWORD: "替换为你的SMTP密码"
SUBMISSION_SMTP_FROM_ADDRESS: "analytics@your-domain.com"
plausible_proxy:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
- ./nginx/conf.d:/etc/nginx/conf.d:ro
- ./certs:/etc/letsencrypt:ro
depends_on:
- plausible
volumes:
plausible_data:
plausible_db_data:
plausible_events_db_data:3.3 Plausible 环境配置文件
创建 plausible_conf 文件:
# plausible_conf
# 基础配置
APP_IP=0.0.0.0
PORT=8000
BASE_URL=https://analytics.your-domain.com
# 数据库配置
DATABASE_URL=postgres://plausible:你的数据库密码@plausible_db:5432/plausible
CLICKHOUSE_DATABASE_URL=http://plausible_events_db:8123/plausible
# 认证配置
SECRET_KEY_BASE=你的64字符随机密钥(使用 openssl rand -hex 64 生成)
DISABLE_AUTH=false
DISABLE_REGISTRATION=false
# SMTP 邮件配置(用于发送注册邀请邮件)
SMTP_HOST_ADDR=smtp.your-provider.com
SMTP_HOST_PORT=587
SMTP_USER=your-smtp-user
SMTP_PASSWORD=你的SMTP密码
SMTP_FROM_ADDRESS=analytics@your-domain.com
# 可选:GeoIP 数据库(用于地理位置统计)
GEOIP_DB_PATH=/data/GeoLite2-City.mmdb
# 可选:开放注册上限
MAX_VISITORS_LIMIT=100003.4 Nginx 反向代理配置
创建 nginx/conf.d/plausible.conf:
# nginx/conf.d/plausible.conf
upstream plausible {
server plausible:8000;
}
server {
listen 80;
server_name analytics.your-domain.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name analytics.your-domain.com;
ssl_certificate /etc/letsencrypt/live/analytics.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/analytics.your-domain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
client_max_body_size 50M;
location / {
proxy_pass http://plausible;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}3.5 启动服务
# 生成安全密钥
openssl rand -hex 64
# 将输出填入 SECRET_KEY_BASE
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f plausible服务启动后,访问 https://analytics.your-domain.com 即可看到 Plausible 管理界面,首次访问需要创建管理员账户。
四、添加追踪脚本
4.1 标准脚本标签
在网站 HTML 的 <head> 中添加:
<script defer data-domain="your-website.com" src="https://analytics.your-domain.com/js/script.js"></script>4.2 自定义事件追踪
如果使用了 SPA(单页应用)或需要手动触发事件追踪:
<script>
window.plausible = window.plausible || function() {
(window.plausible.q = window.plausible.q || []).push(arguments)
}
</script>
<script defer data-domain="your-website.com" src="https://analytics.your-domain.com/js/script.js"></script>
<!-- 页面加载完成后的自定义事件 -->
<script>
// 追踪文件下载
document.querySelectorAll('.download-btn').forEach(btn => {
btn.addEventListener('click', () => {
plausible("Download", { props: { file: btn.dataset.file } })
})
})
// 追踪搜索行为
document.querySelector('.search-form').addEventListener('submit', (e) => {
const query = e.target.querySelector('input[name="q"]').value
plausible("Search", { props: { query } })
})
</script>4.3 脚本属性说明
| 属性 | 说明 |
|---|---|
data-domain | 指定追踪的网站域名(必须与 Plausible 后台添加的网站一致) |
src | 指向你自托管的 Plausible 实例的脚本地址 |
defer | 延迟加载,不阻塞页面渲染 |
五、与 Google Analytics 的全面对比
| 维度 | Plausible Analytics | Google Analytics 4 |
|---|---|---|
| 隐私政策 | 简洁,无第三方数据共享 | 复杂,深度追踪,15+ privacy policies |
| Cookie 依赖 | ❌ 无需 Cookie,欧盟无需弹窗 | ✅ 需要 Cookie Consent |
| GDPR 合规 | 完全合规,开箱即用 | 需额外配置和 legal review |
| 追踪脚本大小 | ~1 KB | ~50 KB+ |
| 数据所有权 | 完全属于你自己 | Google 持有,受服务条款约束 |
| 许可证 | MIT 开源 | 专有 proprietary |
| 托管方式 | 自托管(完全私有) | 仅云端(Google 服务器) |
| 学习曲线 | 极低,5 分钟上手 | 高,报表复杂且不断变化 |
| 数据刷新 | 实时 | 有 24-48h 处理延迟 |
| 用户追踪能力 | 仅聚合统计 | 可追踪个人用户行为(跨会话) |
| 自定义维度 | 有限(通过自定义事件) | 丰富(自定义维度/指标) |
| 定价 | 自托管免费,Cloud 版 $9/月起 | 免费(有限制),GA360 $150k+/年 |
| API | 有限 | 丰富(GA Data API) |
| 适用场景 | 隐私敏感、合规要求高、轻量优先 | 需要复杂行为分析、商业智能 |
5.1 什么场景适合用 Plausible?
- ✅ 个人博客、小型内容网站 → 不需要复杂报表,简单统计足够
- ✅ 欧盟网站(GDPR/CCPA 严格) → 无 Cookie 弹窗需求
- ✅ 企业内部门户 → 数据不出境,完全私有化
- ✅ 政府/医疗/教育类网站 → 隐私合规刚需
5.2 什么场景仍然需要 Google Analytics?
- ❌ 需要跨设备、跨会话的精准用户画像
- ❌ 需要与 Google Ads/Google Marketing Platform 深度集成
- ❌ 需要高级电商漏斗分析(支持 BigQuery 导出)
- ❌ 流量巨大(>1000 万/月)且需要 SLA 保障
六、开源优势与社区生态
6.1 为什么选择开源 Plausible?
- 数据主权:你的所有访问数据存储在自己的服务器上,没有任何第三方接触
- 透明可审计:所有追踪逻辑开源可查,你可以确认它确实没有偷偷收集额外数据
- 灵活定制:可根据业务需求修改源码,不受平台功能限制
- 无 Vendor Lock-in:不用担心平台涨价、服务终止或条款变更
- 社区驱动:活跃的开源社区持续贡献插件、主题和集成
6.2 社区插件与工具
- awesome-plausible — 官方维护的资源列表
- plausible-known-visitors — 用于排除已知 IP 的管理插件
- hugo-mod-plausible — Hugo 静态网站的集成模块
- Eleventy Analytics — Eleventy 的 Plausible 插件
- Netlify Plugin Plausible — Netlify 一键集成
七、高级配置与运维
7.1 数据保留策略
Plausible Self-hosted 默认保留 6 个月的数据。可以通过环境变量调整:
DATA_RETENTION_RETENTION_TIME_IN_DAYS=1807.2 GeoIP 地理定位
下载 MaxMind GeoLite2 数据库以启用国家/城市级别的地理位置统计:
# 下载 GeoIP 数据库
wget -O GeoLite2-City.mmdb https://ow.ly/placeholder
mv GeoLite2-City.mmdb ./data/
# 在 plausible_conf 中配置路径
GEOIP_DB_PATH=/data/GeoLite2-City.mmdb7.3 备份策略
# PostgreSQL 备份
docker-compose exec plausible_db pg_dump -U plausible plausible > backup_$(date +%Y%m%d).sql
# ClickHouse 备份(生产环境推荐使用 ClickHouse Keeper)
docker-compose exec plausible_events_db clickhouse-client --query "BACKUP DATABASE plausible TO Disk('default', 'backup_$(date +%Y%m%d)')"7.4 升级维护
# 查看最新版本
docker pull plausible/analytics:latest
# 停止服务
docker-compose down
# 拉取最新版本
docker-compose pull
# 重启服务(会自动执行数据库迁移)
docker-compose up -d
# 确认迁移成功
docker-compose logs plausible | grep "migration"八、采用顺序与选型决策
Plausible 的采用顺序建议从 Cloud 版试用起步,再过渡到自托管,最后才考虑深度定制:
- 只想验证指标集是否够用:先开 plausible.io 的 Cloud 版($9/月),把追踪脚本挂到网站上跑两周。这一步零运维成本,能快速判断 Plausible 的指标集是否覆盖你的需求。
- 数据必须留在自有基础设施:用本文第三节的 Docker Compose 配置起一套自托管,PostgreSQL + ClickHouse + Nginx 反代 + SMTP 四件套。运维成本集中在 ClickHouse 的磁盘监控和 PostgreSQL 的备份。
- 需要定制追踪逻辑或对接内部系统:基于自托管版本扩展自定义事件、Webhook 集成、GeoIP 数据库。这一步开始接触源码,注意 Plausible 是 AGPL 许可证,修改后的代码如果对外提供服务需要开源。
回到 Plausible 和 GA4 的选型:如果你的需求是"知道每天有多少人来、从哪来、看了什么页面",Plausible 的指标集已经够用,且合规成本远低于 GA4;如果你需要漏斗分析、用户级留存、与 Google Ads 联动的归因数据,Plausible 目前给不了,仍然得用 GA4。两者并不互斥——很多站点同时挂 Plausible 看实时流量,挂 GA4 做深度分析,按需取用。
参考链接:
- 官网:https://plausible.io
- GitHub:https://github.com/plausible/analytics
- 官方文档:https://plausible.io/docs
- 社区论坛:https://github.com/plausible/analytics/discussions