嫌 Google Analytics 太重?Plausible 隐私合规流量统计 VPS 自托管
2026-08-15 · DevCraft Studio
在 1G 内存 VPS 上用 Docker 跑 Plausible,告别 Cookie 横幅与数据外泄,讲清域名接入、数据备份与和 Cloudflare 配合,适合外贸/独立站。
延伸阅读
更多相关攻略推荐:【年付性价比 01】年付 VPS 性价比排行 2026:同配置谁最值、团队知识库别再用在线文档了?BookStack 自托管 Wiki V、【10刀以内VPS系列 01】年付不到70块钱的便宜VPS,到底能用、【支付宝微信 02】支付宝/微信怎么买国外 VPS?2026 支持人、从 Git Push 到秒级上线:CI/CD 流水线与"无中断"发布。
为什么要从 Google Analytics "叛逃"
做外贸站、独立站或者个人博客的朋友,十有八九第一反应是挂个 Google Analytics(GA4)。这东西确实免费、功能全,但 2026 年的今天,它对很多中小站点来说已经"重"得不合时宜了。
最大的麻烦是合规。GA4 默认会读取用户的设备信息、粗略地理位置,并在多数司法辖区触发 Cookie 同意横幅(Cookie Consent Banner)的要求。欧盟的 GDPR、英国的 PECR、加州的 CCPA 都把"先征求同意再追踪"写进了规矩。你要么在网页上弹一个丑陋的同意条,要么冒着被罚款的风险偷偷统计,而欧盟对违规的罚款上限是企业全球年营业额的 4%,这不是闹着玩的。
第二个问题是数据归属。你把每一个访客的浏览行为喂进了 Google 的广告生态。对做独立站的人来说,这相当于把"谁在看我的产品、从哪来、停留多久"这种核心情报,免费送给了一家靠广告吃饭的公司。它转头就能拿去优化对手的广告投放,等于花钱帮竞争对手练级。
第三是性能与体验。GA4 的追踪脚本体积大约在 45KB 上下,还要异步加载一整套标签管理器逻辑,对本来就不大的落地页是个实打实的拖累。更别提它的仪表盘,功能堆到让人头晕,而你真正关心的"今天来了多少人、从哪里来、哪个页面最受欢迎",反而被埋在一层又一层的菜单里。
所以越来越多站长开始找轻量替代:不要 Cookie、不要横幅、不要数据外流,但能给我干净利落的核心指标。Plausible 就是这条路上的头号选手,而把它的社区版跑在自有 VPS 上,又能把数据主权彻底拿回来。
Plausible 到底是什么
一句话:Plausible 是一个开源、隐私优先的网站流量统计工具,定位就是"无 Cookie 的 Google Analytics 替代品"。它背后的代码以 AGPL-3.0 许可证开放(社区版 Community Edition,简称 CE),意味着你可以自由下载、自己部署、自己掌控全部数据,永远不必给 Plausible 公司交一分钱。
它的隐私设计是"从源头就少收"。Plausible 不设置 Cookie、不使用持久标识符、不存储访客的原始 IP 地址,也不会去拼装某个具体用户的画像。官方文档明确写明了它符合 GDPR、CCPA、PECR 这三大隐私法规,因此绝大多数情况下你根本不需要在网站上挂 Cookie 同意横幅。云版本的数据全部处理在欧盟境内的服务器上(德国,绿色能源供电),而自托管版本则把选址权完全交给你。
技术上,Plausible 跑在 Elixir 加 Phoenix 框架上,配 PostgreSQL 16 存账户与站点配置、ClickHouse 24.3 存海量事件数据。这个组合在处理高并发统计写入时非常省心。它的追踪脚本只有不到 1KB,比 GA4 小了几十倍,对页面加载速度几乎零影响。
社区活跃度也够看:GitHub 上约有 2.46 万颗星,2026 年 4 月发布的 v2.1.4 仍是目前稳定的长期版。需要注意的是,Plausible 在"设计哲学"上刻意只做聚合统计,它不记录单个用户的会话、不做录屏回放、不搞用户级分群。如果你要的是那种"看某个张三在网站上点了什么"的能力,那它天生就不是你的菜,得去看 PostHog 这类产品,但后者生产环境要 32GB 内存,完全是另一个量级的负担。
自托管还是用官方云?先把账算清楚
Plausible 提供两条路:官方的托管云(订阅制)和你自己的服务器(社区版)。别一听"免费"就冲,先想清楚代价。
官方云按页面浏览量收费,常见档位是每月 9 到 19 美元,好处是真省心,CDN、高可用、备份、安全补丁、升级全由官方包办,你只管看数据。但它有一个绕不开的点:你的数据躺在 Plausible 的服务器上。
自托管则反过来:软件免费,但服务器、CDN、备份、容量规划、在线率、安全、升级节奏全部是你自己的事。官方文档很直白地提醒:"自托管是一种真正的承诺。"云上发现新机器人,官方一秒全网屏蔽;你自托管的实例只看得见自己的流量,机器人过滤只能做到基础级别(按 User-Agent 和引荐垃圾域名过滤),而云版能排除约 3.2 万个数据中心 IP 段。
还有功能差异要心里有数。社区版因为是长期发布版(一年两次),不会立刻拿到最新特性,而且以下高级功能在 CE 里没有:营销漏斗(funnels)、用户旅程(user journeys)、电商营收目标、单点登录(SSO)、站点 API。如果你只是要干净的流量看板,这些缺憾基本无感;但如果你做电商想追踪"加购到付款"的转化漏斗,就得权衡了。
算笔经济账:一台够跑 Plausible 的 2GB 内存 VPS,在 RackNerd、CloudCone 这类便宜商家年付大概 10 到 15 美元,平摊到每月 1 到 2 美元,比官方云便宜一大截,还顺手把数据主权也拿回来了。对预算敏感、又想练手运维的独立站主,自托管无疑是更香的选法。
1G 内存的便宜 VPS 到底够不够跑
这是这篇干货最关键的问题,因为看这篇文章的你,八成是想用一台最便宜的年付小鸡把事办了。结论先给:裸跑 1GB 内存基本会翻车,但加一点 swap 后低流量站点能活。
Plausible 官方给的最低建议是 2GB 内存,并且 CPU 要支持 SSE 4.2 或 ARM 的 NEON 指令集(这是 ClickHouse 的硬要求)。实测数据:在 4 核 8GB 的环境里,整套服务空闲时吃掉约 1.8GB 内存,在每秒 500 个事件的压力下峰值约 2.45GB,其中 ClickHouse 一家就占了 1.2GB 以上。换句话说,ClickHouse 才是内存黑洞,不是那个 Elixir 写的统计应用。
有站长在 1GB 内存、1 核 CPU 的 VPS 上实测:不开 swap 直接崩,开了 2GB swap 之后,每天几十个访问的小站稳稳跑了下来,CPU 常年 10% 左右、内存加 swap 占用约 90%。但他也老实提醒:一旦流量上来(每天几千访问),这台机器会"当场去世"。所以这条路的定位很清晰,只适合个人博客、测试站、访问量极低的页面;真要正经做独立站,请直接上 2GB 内存起步。
选机器时,RackNerd 和 CloudCone 的 2GB 内存年付套餐是性价比标杆:同样是几美元一个月的价位,给了足够 Plausible 呼吸的内存。下单前确认两件事:CPU 支持 SSE 4.2(x86 基本都支持,ARM 看 NEON),以及商家允许你开 swap、装 Docker。
还有一个救命设置:ClickHouse 默认不给自己设内存上限,流量一大它会欢快地吃光整台机器然后 OOM 重启。解决办法是挂一个配置文件把内存占比锁死,比如把可用内存比例限制在 40%:
<?xml version="1.0"?>
<clickhouse>
<max_server_memory_usage_to_ram_ratio>0.4</max_server_memory_usage_to_ram_ratio>
</clickhouse>把这个文件挂进 ClickHouse 容器的 config.d 目录,1GB 小鸡也能把 ClickHouse 压在约 400MB 以内,不至于把整台 VPS 拖垮。
Docker 一行命令起步
假设你已经有一台装好系统的 Debian 或 Ubuntu VPS,并且解析好了一个子域名(比如 stats.yourdomain.com,A 记录指向你的服务器 IP,端口 80/443 在防火墙放行)。接下来全程用 root 或带 sudo 的账号操作。
第一步,装 Docker 和 Docker Compose。官方一键脚本最省事:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo bash get-docker.sh
sudo systemctl enable --now docker
docker compose version第二步,把社区版仓库拉下来:
git clone https://github.com/plausible/community-edition.git plausible
cd plausible第三步,写环境配置。先建一个空的 .env,再填入公开访问地址和你用 openssl 生成的密钥。注意 SECRET_KEY_BASE 一旦设定就不要改,它管着会话和一堆派生密钥:
touch .env
echo "BASE_URL=https://stats.yourdomain.com" >> .env
echo "SECRET_KEY_BASE=$(openssl rand -base64 48)" >> .env
echo "TOTP_VAULT_KEY=$(openssl rand -base64 32)" >> .env
chmod 600 .env第四步,一键拉起:
docker compose up -d等镜像下载、数据库初始化完成(看日志 docker compose logs -f 确认没有报错),浏览器打开你的子域名,应该就能看到"注册管理员账号"的页面。填完邮箱密码,添加你的网站,Plausible 会给你一段追踪脚本,把它粘进你主站每个页面的 <head> 里就行。
反向代理加 HTTPS:Caddy 最省心
Plausible 容器默认监听 8000 端口,直接裸奔在公网既不雅观也不安全。正确做法是把它绑在本地回环地址,前面再挡一层反向代理来终止 HTTPS。
如果你想要"最懒"的方案,用 Caddy。它自带自动申请和续期 Let's Encrypt 证书,连一行 SSL 配置都不用写。一个最简 Caddyfile 长这样:
stats.yourdomain.com {
reverse_proxy 127.0.0.1:8000
}把上面这段存成 /etc/caddy/Caddyfile,启动 Caddy,证书的事它全自动搞定。如果你更习惯 Nginx,也完全可以,只是要自己配 server_name、proxy_pass 到 127.0.0.1:8000,再用 certbot 申请证书,网上教程一抓一大把,这里不展开了。
关键原则只有一条:docker-compose 里把端口映射写成 127.0.0.1:8000:8000,而不是 0.0.0.0:8000:8000。前者只对本机开放,外部直接打 IP:8000 是连不进来的,安全得多。
把统计脚本藏进自己域名,顺便用上 Cloudflare
事情到上一步还没完。很多访客装了 uBlock、AdGuard 之类的广告拦截插件,它们内置的过滤列表里就躺着 plausible.io 这种统计域名。结果就是:你自托管了,但一部分人的访问照样没被统计到,数据缺了一块。
解法很巧妙:在你的主站(已经被用户信任、不会被拦的一手域名)上做反代,把 Plausible 的脚本和上报接口"伪装"成主站自己的路径。在 Nginx 里加两条规则:
location = /js/visit.js {
proxy_pass https://stats.yourdomain.com/js/script.js;
proxy_set_header Host stats.yourdomain.com;
}
location = /api/event {
proxy_pass https://stats.yourdomain.com/api/event;
proxy_set_header Host stats.yourdomain.com;
}然后把你主站里的追踪脚本改成从 /js/visit.js 加载、上报到 /api/event。浏览器一看请求的是你自己域名下的路径,过滤列表根本不认识,自然就放行了。实测这一招能把被拦截掉的流量补回一大半。
再叠一层 Cloudflare 就更稳了。把你的域名 NS 接进 Cloudflare,给 stats 子域名也开启橙色云(Proxy 状态),好处有三:一是隐藏你的 VPS 真实 IP,抗 DDoS、防被扫;二是 Cloudflare 的边缘网络能帮你顶住突发流量;三是免费签发 SSL。设置时把 SSL/TLS 模式选成 Full(strict),并确认 analytics 的 /api/event 上报端点没被 CDN 缓存,事件接口必须是动态回源的,缓存了数据就发不出去。Cloudflare 的官方文档也建议对这类动态 API 套用绕缓存规则,避开边缘缓存。
数据备份:别让几个月的统计一夜归零
自托管最容易被新手忽略的一步就是备份。云版有官方兜底,你自己跑的实例,数据库炸了就是真炸了。Plausible 的数据分两摊:PostgreSQL 存账户和站点设置,ClickHouse 存事件。两样都得备。
PostgreSQL 用 pg_dump 最稳。因为跑在容器里,直接进容器执行:
docker compose exec plausible_db pg_dump -U plausible plausible_db > backup_$(date +%F).sqlClickHouse 的数据备份相对粗暴但有效:直接打包它的数据卷目录 /var/lib/clickhouse,或者进容器用 clickhouse-client 导出。更省事的做法是连数据卷一起用 restic、borg 这类增量备份工具定时打包,再 rclone 推到另一台机器或对象存储。
无论你用哪种方案,记住一条铁律:每次升级 Plausible 版本之前,先完整备份一次。升级偶尔会动 ClickHouse 的表结构,万一翻车,有备份你才能原路退回。备份脚本用 cron 每天凌晨跑,存到和 VPS 不在同一个物理位置的远端,这样连商家跑路或硬盘损坏都能扛住。