目录

Plausible Analytics 全方位技术指南:隐私优先的开源网站统计平台

Plausible 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ähtMarko 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:追踪子步骤完成情况

启用后,Plausible 会自动解析 URL 中的搜索查询参数(如 ?q=keyword),显示访客在你的站内搜索了什么关键词,帮助内容优化。

2.5 异常值排除(Exclusions)

支持通过 IP 地址、Certain countries、自定义过滤器排除异常流量(如你自己的访问、内部测试流量),确保数据真实反映用户行为。

可以生成只读的公开链接,嵌入到 Notion、Obsidian 或其他文档中,无需登录即可查看实时数据,适合向客户或团队展示网站状态。

2.7 一次页面访问如何流过系统

以一个用户打开 https://your-site.com/page 为例,数据从浏览器到仪表盘的流转路径:

  1. 浏览器加载页面 HTML,遇到 <script defer data-domain="your-site.com" src="https://analytics.your-domain.com/js/script.js">,异步下载 ~1KB 的追踪脚本。
  2. 脚本执行后,构造一个 POST /api/event 请求,body 里只有聚合字段:domainurlreferrerscreen_width,不携带 Cookie,不发送任何用户标识。
  3. Plausible 后端(Elixir/Phoenix)收到请求,先校验 domain 是否在已注册站点列表里(PostgreSQL 查询),再写入一条事件记录。
  4. 事件明细写入 ClickHouse(时间序列存储),站点元数据、用户账号、目标配置留在 PostgreSQL。
  5. 用户打开仪表盘时,Phoenix 查询 ClickHouse 聚合出独特访客数、浏览量、来源分布等指标,渲染成 JSON 返回前端。

这条链路里有两个设计要点:第一,脚本不上传 Cookie,后端也不下发 Cookie,所以不需要 Cookie Consent 弹窗;第二,ClickHouse 只存聚合事件,没有 user_id 字段,从数据模型层面就排除了跨会话追踪的可能。这也是 Plausible 能在 GDPR 合规上做到"开箱即用"的根因——不是配置出来的,是 schema 决定的。


三、安装部署:Docker 自托管完整指南

Plausible Analytics 采用 Elixir/Phoenix 技术栈构建,自托管版本通过 Docker 容器化部署,数据存储在 PostgreSQL 中,时间序列数据存储在 ClickHouse 中。

3.1 系统要求

要求最低配置
CPU1 Core
内存1 GB
磁盘5 GB+
Docker20.10+
Docker Compose1.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=10000

3.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 AnalyticsGoogle 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?

  1. 数据主权:你的所有访问数据存储在自己的服务器上,没有任何第三方接触
  2. 透明可审计:所有追踪逻辑开源可查,你可以确认它确实没有偷偷收集额外数据
  3. 灵活定制:可根据业务需求修改源码,不受平台功能限制
  4. 无 Vendor Lock-in:不用担心平台涨价、服务终止或条款变更
  5. 社区驱动:活跃的开源社区持续贡献插件、主题和集成

6.2 社区插件与工具


七、高级配置与运维

7.1 数据保留策略

Plausible Self-hosted 默认保留 6 个月的数据。可以通过环境变量调整:

DATA_RETENTION_RETENTION_TIME_IN_DAYS=180

7.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.mmdb

7.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