来给自己整一个山寨不蒜子(Bushi
不蒜子这服务吧,好用是好用,就是经常挂。挂了之后博客底下的访问量就一直在那转圈圈,看着心烦。与其天天等它恢复,不如自己整一个,反正 Cloudflare Workers 免费额度够用,KV 也白给。
于是就有了这个项目:busuanzi-cloudflare-workers。
一、这玩意儿是啥
简单说,就是一个部署在 Cloudflare Workers 上的访问统计服务,拿来替代不蒜子。
核心功能:
- 站点/页面的 PV(访问量)和 UV(访客数)统计
- 今日数据也能统计
- 兼容原版不蒜子的标签 ID,换个脚本地址就能直接用
- JSONP 接口也支持
- 隐私友好:只存 IP 的 SHA-256 哈希,原始 IP 不记录
- Pjax / swup 页面切换自动支持
说白了,就是不想再被不蒜子的稳定性绑架了 QWQ
二、怎么部署
第一步:克隆项目
1 | git clone https://github.com/kazeecho/busuanzi-cloudflare-workers.git |
第二步:创建 KV 命名空间
KV 是 Cloudflare 提供的键值存储,咱们拿它来存计数数据。
1 | npx wrangler kv namespace create BUSUANZI_KV |
跑完会输出一段配置,把那个 id 填到 wrangler.toml 里就行:
1 | [[kv_namespaces]] |
第三步:配置密钥
改一下 wrangler.toml 里的 SALT_SECRET,随便填个随机字符串:
1 | [vars] |
或者用命令行设置(更安全,密钥不会明文出现在配置文件里):
1 | npx wrangler secret put SALT_SECRET |
这个密钥是用来给 UV 去重哈希加盐的,别填太简单的。
第四步:部署
1 | npm run deploy |
完事,你的 Worker 就上线了。
三、怎么用
方式一:嵌入脚本(最省心)
跟原版不蒜子用法一模一样,就换个脚本地址:
1 | - <script src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js" defer></script> |
然后 HTML 里这些标签不用动,直接就能用:
| 标签 ID | 说明 |
|---|---|
busuanzi_site_pv |
全站总访问量 |
busuanzi_site_uv |
全站总访客数 |
busuanzi_page_pv |
单页面阅读量 |
busuanzi_page_uv |
单页面访客数 |
busuanzi_today_pv |
今日全站访问量 |
busuanzi_today_uv |
今日全站访客数 |
零修改迁移,舒舒服服。
方式二:直接调 API
想自己控制请求逻辑的,可以直接调接口:
1 | // 提交访问并获取数据 |
方式三:JSONP
老项目兼容需要 JSONP 的也支持:
1 | <script> |
详细的接口文档看这里:API.md
四、几个要注意的点
KV 并发计数
KV 不支持原子 increment,get → +1 → put 在高并发时可能丢几个计数。不过博客这种量级,一天能有几个并发?完全不用担心。
UV 归档
Cron Trigger 每天 UTC 00:05 跑一次归档,把昨天的 UV 加到累计值。记得确认 Worker 的 Cron Triggers 是开着的,不然 UV 数据会一直停留在昨天的当日值上。
花多少钱
| 资源 | 免费额度 | 博客大概用量 |
|---|---|---|
| Worker 请求 | 100,000 次/天 | ~200 次/天 |
| KV 读取 | 100,000 次/天 | ~200 次/天 |
| KV 写入 | 1,000 次/天 | ~200 次/天 |
| Cron 触发 | 5 次/天 | 1 次/天 |
免费额度完全够用,放心部署。
历史数据
历史数据没法从不蒜子搬过来,统计会从零开始。反正也不是啥大事,重新攒呗(雾
五、UV 去重是怎么搞的
简单说就是:sha256(IP + 当日日期 + 密钥)。
- 同一个 IP 同一天访问多次只算 1 次
- 哈希值没法反推出原始 IP,不侵犯隐私
- 每天的去重 key 48 小时后自动过期清理
所以你不用担心 IP 泄露的问题,存下来的只是一串不可逆的哈希值。
结语
自建统计服务的好处就是它不会再突然挂掉了(除非 Cloudflare 挂,那咱也没办法)。而且数据在自己手里,想怎么查就怎么查。
项目地址:busuanzi-cloudflare-workers
给孩子点个 star 吧,球球了 🙏





