在一天内构建了一个可自行托管的 Plausible + Sentry 替代方案
发布: (2026年2月28日 GMT+8 05:29)
3 分钟阅读
原文: Dev.to
Source: Dev.to
它的功能
在你的网站上放置一个 script 标签:
从此你即可获得:
- 页面浏览量、会话、唯一访客、跳出率
- 国家 / 地区 / 城市分布(使用本地 MaxMind GeoLite2 —— 无运行时 API 调用)
- 设备、操作系统、浏览器分布
- 引荐来源分类 —— 自然搜索、社交、邮件、推荐、直接访问
- UTM 活动追踪
- JavaScript 错误自动捕获(
window.onerror与unhandledrejection),按指纹分组 - 通过单个 HTTP 调用从任意后端手动上报错误
- 审计日志
- 带点击分析的短链追踪
所有数据均写入 你自己的数据库。没有任何信息会离开你的服务器。
形成一切的约束
共享主机意味着 没有 Redis、没有后台工作进程、没有守护进程、没有 WebSocket。你只能使用 PHP 和 MySQL。这迫使我们做出了一些有趣的决策。
在没有 Redis 的情况下实现限流
大多数限流器使用 Redis 或带时间戳的数据库表。我采用了基于文件的方式——为每个请求创建一个仅追加的 .req 文件,存放在按 IP 划分的目录中。统计最近的请求数 = 统计窗口内更新的文件数量。
// Count recent attempts — each file is one request
foreach (glob($userDir . "/*.req") as $file) {
if ($now - filemtime($file) (code snippet as provided)
如果你使用共享主机、想运行一个注重隐私的产品,或只是厌倦了为可以自行拥有的工具付费——不妨试一试。欢迎提交 Issue 和 Pull Request。
路线图(v2)
- 错误告警的 Webhook
- Redis 缓存(可选)
- 异步队列
如果你对哪些功能最重要有想法,请打开 Issue 进行讨论。