【隐私分析 02】2026 实测:Plausible 自建轻量分析,2GB VPS 摆脱 GA 与月费(避坑)

手把手教你用一台 2GB 内存的便宜 VPS 自建 Plausible Community Edition:Web + Postgres + ClickHouse 三件套、SMTP 邮件、自有域名反拦截,以及 CE 和云版的功能差异避坑。读完你就能拿到亚秒级、免 Cookie 横幅的站点分析,彻底告别 GA4 的复杂与月费。

先说结论:如果你只是想看自己网站每天有多少人访问、从哪来、看了哪些页面,完全没必要把 Google Analytics 那套又重又绕的东西绑在站上。2026 年我在一台 2GB 内存的便宜 VPS 上把 Plausible Community Edition(简称 CE)跑了起来,整个统计脚本只有约 1KB,不写 Cookie、不需要欧盟那种烦人的同意横幅,看板打开基本是亚秒级。这篇文章就是把从买机器到上线、再到踩坑的全过程讲清楚,照着做你也能摆脱 GA 和月费。

延伸阅读

更多相关攻略推荐:2026 VPS 选购决策树与白皮书:一张图看懂怎么买2026 海外 VPS 行业趋势年报:价格、架构与格局全景如何给 VPS 厂商做"信用评估":跑路、超售与售后风险排查手册买 VPS 别只看标价:带宽超支、块存储、快照、IP 的真实总成本(【VPS性价比与隐藏成本 07】VPS 性价比怎么算:每美元能买到多

为什么要把 GA 踢了,自己搭 Plausible

GA4 现在越来越像一个"数据仓库"而不是"看板",事件、数据流、BigQuery linkage 一套套,普通内容站站长根本用不上。更麻烦的是合规:只要你的访客来自欧盟,就得弹 Cookie 同意横幅,否则就有 GDPR 风险。Plausible 走的是另一条路——它不采集个人数据、不种 Cookie,所以大多数司法辖区下你压根不需要同意横幅。

自建 CE 还有一个 GA 永远给不了你的好处:数据完全在你自己手里。访客的行为数据不出你的服务器,没人拿去卖广告,你也不会因为云版超量被按月收更多钱。CE 是 AGPL 开源的,自己跑不要给 Plausible 交一分钱,你只付 VPS 的租金。

  • 免 Cookie 横幅:不种 Cookie,多数地区合规默认过关。
  • 脚本约 1KB:对页面加载速度几乎零影响,Core Web Vitals 更稳。
  • 看板亚秒级:单页展示核心指标,不用来回点。
  • 数据主权:事件只存在你的机器上,想保留几年就几年。

准备工作:一台 2GB 的 VPS 就够了

Plausible CE 真正吃内存的是 ClickHouse。官方和社区普遍给出的底线是 2GB 内存,1GB 能跑但很挤,遇到数据量稍微涨一点就容易 OOM。CPU 方面要注意:ClickHouse 要求处理器支持 SSE 4.2 或 NEON 指令集,现在主流 x86 VPS 基本都满足,但下单前最好确认一下机型说明。

硬盘给 20GB 以上就很宽裕,分析数据按列存,体积小得惊人。系统用 Ubuntu 22.04 或 24.04 都行。商家方面,像 Contabo 的 CAX/VPS 系列经常给到 4GB 以上内存却只卖几欧,性价比极高;RackNerd 常年有年付十几刀的特价机,做这种轻量分析足够;如果你更看重网络和亚洲回程,DMIT 的机器延迟低、线路干净,适合把看板放在离访客近的地方。三家都可以,挑离你用户近、内存够的就行。

  • 内存:2GB 起步,4GB 更舒服。
  • 硬盘:20GB 以上 SSD。
  • 系统:Ubuntu 22.04 / 24.04 LTS。
  • 域名:准备一个子域,比如 stats.yourdomain.com,并解析到机器 IP。

安装 Docker 与准备环境

先在新机器上装好 Docker 和 Docker Compose v2。官方一键脚本最省事:

curl -fsSL https://get.docker.com | sh sudo usermod -aG docker $USER newgrp docker docker --version docker compose version

把你的子域(例如 stats.yourdomain.com)用 A 记录指向这台 VPS 的公网 IP,等 DNS 生效。后面我们用 Caddy 做反代自动签发 Let's Encrypt 证书,所以 80 和 443 端口要放通。顺手开一下防火墙:

sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable

克隆官方 Community Edition 仓库

别自己手写一大堆 compose 配置,Plausible 官方维护了一个 community-edition 仓库,里面把三个服务都定义好了。直接克隆:

git clone -b v3.2.0 --single-branch https://github.com/plausible/community-edition plausible-ce cd plausible-ce

仓库里自带的 compose.yml 定义了三件套:plausible(分析 Web 服务,镜像 ghcr.io/plausible/community-edition:v3.2.x)、plausible_db(postgres:16-alpine,存账号和站点配置)、plausible_events_db(clickhouse/clickhouse-server:24.12-alpine,存事件数据)。你基本不用改它,只需要补一个 .env。

配置 .env:BASE_URL、密钥、SMTP 三大件

仓库里有 .env.example,复制成 .env 再填。最关键的三样是 BASE_URL、SECRET_KEY_BASE 和 SMTP。

cp .env.example .env openssl rand -base64 64 openssl rand -base64 32

第一行生成的是会话签名密钥,第二行可以当 Postgres 密码用。把 .env 里这几个值填好:

BASE_URL=https://stats.yourdomain.com SECRET_KEY_BASE=贴上你 openssl rand -base64 64 的输出 DISABLE_REGISTRATION=invite_only MAILER_EMAIL=analytics@yourdomain.com SMTP_HOST_ADDR=smtp.resend.com SMTP_HOST_PORT=587 SMTP_USER_NAME=resend SMTP_USER_PWD=你的SMTP密码 SMTP_HOST_SSL_ENABLED=true

这里有三个最容易踩的坑。第一,BASE_URL 必须和你看板的真实访问地址一字不差,包含 https://,否则登录后会无限跳转。第二,SECRET_KEY_BASE 只在第一次开机前设一次,之后千万别改——改了所有已登录会话和密码重置链接全部失效。把它和 Postgres 密码一起备份好。第三,SMTP 一定要配,否则你收不到注册确认邮件,也做不了找回密码,等于把自己锁在外面。

启动、初始化与反代

直接拉起整套服务:

docker compose up -d

第一次会下载镜像并自动建库、跑迁移,耐心等一两分钟。用 docker compose ps 看三个容器是否都 healthy。如果你让 Plausible 自己处理 SSL,就在 compose.override.yml 里暴露 80/443 并设 HTTP_PORT=80、HTTPS_PORT=443;更常见的做法是前面挂一个 Caddy,几行配置就能自动续证书:

stats.yourdomain.com { reverse_proxy localhost:8000 }

浏览器打开 https://stats.yourdomain.com,创建第一个账号(它会是管理员),然后添加你的网站域名,复制官方给的那一行统计脚本。注意:自建后脚本 src 应该用你自己的域名,例如 https://stats.yourdomain.com/js/script.js,而不是 plausible.io。用自己的域名有两个好处:一是访客数据不进任何第三方,二是很多广告拦截插件默认只拦 plausible.io,用自己的子域能显著降低被误拦的概率。

把脚本塞进网站,并躲开拦截

把下面这行加进你网站每个页面的 <head> 里(如果是 WordPress 就塞进主题 header,如果是静态站就塞进模板):

<script defer data-domain="yourdomain.com" src="https://stats.yourdomain.com/js/script.js"></script>

这行就是全部追踪代码,没有 Cookie,没有额外标签。为了进一步反拦截,可以再加一条 Caddy 的 rewrite,把 /js/script.js 在本地响应,避免被识别成外部统计域名。另外很多拦截列表是按 "plausible" 关键字匹配的,把子域起成 stats. 而不是 plausible. 也能少被误杀。上线后等几分钟,看板里就能看到实时访客了。

CE 与云版到底差在哪(避坑重点)

这是中文圈教程最爱漏的一段。Plausible 官方把代码分成 CE(免费自托管)和云版(订阅)。自托管能省月费,但也要接受 CE 砍掉的几个"高级功能":

  • 营销漏斗(Funnels)、用户旅程(User Journeys)、电商收入目标:CE 没有,只有云版才有。
  • SSO 与 Sites API:团队协作、自动化接入在 CE 里不可用。
  • Bot 过滤精度:云版有进阶的机器人过滤(约 3.2 万个数据中心 IP 段),CE 只有基于 User-Agent 和引荐垃圾域名的基础过滤,偶尔会混进一些爬虫。
  • 数据可移植与高级支持:云版有真人支持,CE 是社区支持,安全补丁要你自己跟。

所以避坑点很明确:如果你只是要干净的流量看板,CE 完全够;如果你要做电商转化漏斗或公司级 SSO,自建就别勉强,要么上云版,要么另外找方案。另外 CE 是半年一次的长期发布,新功能不会像云版那样每周更新,这也是"自托管是一种长期承诺"的真实含义。

2GB 内存规划与常见踩坑

在 2GB 机器上跑,资源要算细一点。大致分配:ClickHouse 最吃内存,给它留 1GB 以上余量;Postgres 300–500MB;Plausible Web 300MB 左右;系统本身再吃掉几百 MB。如果内存紧张,官方仓库的 clickhouse 配置目录里有 low-resources.xml,挂上它能调低 ClickHouse 的资源占用。顺便提醒一句:swap 最好还是开个 1–2GB,虽然 ClickHouse 官方不推荐依赖 swap,但作为 2GB 小机的内存安全垫,能在突发流量时避免整个容器被 OOM killer 直接干掉,代价只是偶尔慢一点点。

  • 坑一:SECRET_KEY_BASE 改了会话全废,第一次设好就备份,别手痒。
  • 坑二:BASE_URL 写错导致登录死循环,必须含 https:// 且与访问地址一致。
  • 坑三:没配 SMTP 收不到邮件,注册卡在验证环节。
  • 坑四:1GB 内存硬跑会 OOM,ClickHouse 一崩溃事件就写不进。
  • 坑五:CE 没有漏斗和 SSO,需求错配比技术坑更致命。

备份、升级与收尾

自托管等于你自己当运维。备份要同时保住 Postgres 和 ClickHouse 两个数据卷,缺一不可:

docker compose exec plausible_db pg_dump -U plausible plausible > pg-$(date +%F).sql docker compose exec plausible_events_db clickhouse-client --query "BACKUP TABLE plausible_events TO File('/backups/events')"

升级时盯紧 GitHub 上的 releases,先看官方升级 wiki,再拉新镜像 docker compose pull && docker compose up -d。安全更新出来要尽快打,因为 CE 的补丁只有你自己应用才对你生效。最后把 DISABLE_REGISTRATION 设成 invite_only,防止陌生人乱注册你的实例。

整套下来,一台 ContaboRackNerdDMIT 的 2GB 小机,一年租金几十块人民币,换来的是干净、快速、合规、完全自主的站点分析。值不值,你打开看板看到那个亚秒级加载的瞬间就懂了。