不想被大厂"监控"?试试这个开源方案
你的网站装了 Google Analytics,但总觉得数据被第三方掌控不太放心?想要实时统计访问数据,又不想折腾复杂的配置?今天介绍的 Umami 或许能解决你的困扰。
这是一个在 GitHub 上获得 3.2 万 Star 的开源项目,专门用来做网站数据分析,最大的特点是数据完全由你自己掌控。
用了什么技术?
前端用的是 Next.js + TypeScript,后端是 Node.js 18 + Prisma,数据存在 PostgreSQL 里。整个项目 97% 的代码都是 TypeScript 写的,类型安全做得很到位。
部署方式也很灵活,可以直接用 Docker 一键启动,也可以从源码编译。项目用 pnpm 管理依赖,测试用的是 Cypress 和 Jest。
能解决什么问题?
第一是隐私。Umami 不用 Cookie 追踪用户,数据存在你自己的服务器上,符合 GDPR 等隐私法规。用户的访问记录都是匿名化处理的。
第二是性能。追踪脚本很小,压缩后不到 2KB,异步加载不会拖慢页面速度。数据是实时的,打开后台就能看到最新的访问情况。
第三是简单。用 Docker 的话,一行命令就能跑起来,默认账号是 admin/umami,登录就能用。
工作原理
整个流程是这样的:用户访问你的网站 → 执行追踪脚本 → 数据发送到 Next.js 的 API 接口 → 通过 Prisma 存入 PostgreSQL → 后台实时展示统计结果。
代码结构也很清晰:
src/app/ 是 Next.js 的页面和路由
src/components/ 放 React 组件
src/lib/ 是工具函数和 API 层
prisma/ 里是数据库的表结构定义
数据访问用的是 Repository 模式,Prisma 封装了所有数据库操作。统计功能用了时间序列聚合算法,可以高效处理大量访问记录。
适合什么场景?
个人博客、企业官网、SaaS 产品、开源项目的官网,基本上任何需要统计访问数据的网站都能用。
如果你在意数据隐私,或者不想依赖第三方服务,Umami 是个不错的选择。
怎么用?
Docker 部署(推荐):
git clone https://github.com/umami-software/umami.git
cd umami
docker compose up -d
# 访问 http://localhost:3000
源码部署:
pnpm install
echo "DATABASE_URL=postgresql://user:pass@localhost:5432/umami" > .env
pnpm run build
pnpm run start
接入网站:
在你的网页里加一行代码就行:
<script async src="http://your-domain/script.js"
data-website-id="your-id"></script>
技术细节
Prisma 做了类型安全的数据库操作,自动管理数据库迁移,支持 PostgreSQL 等多种数据库。
Next.js 用的是最新的 App Router,API 接口和页面都在一个项目里,前后端统一开发。
工程化方面,用 pnpm workspace 管理 Monorepo,代码规范用 ESLint 和 Prettier,测试覆盖也比较完整。
数据安全
所有数据都存在你自己的服务器上,不会发送给第三方。追踪的时候不收集用户的个人信息,只记录匿名的访问行为。代码完全开源,可以自己审计。
性能方面,追踪脚本压缩后小于 2KB,异步加载不影响页面,数据实时更新,能支撑百万级的访问量。
更新维护
项目很活跃,已经发布了 100 个版本,最新的是 2024 年 11 月的 v3.0.0。
更新也很简单:
# 源码更新
git pull && pnpm install && pnpm run build
# Docker 更新
docker compose pull
docker compose up --force-recreate -d
适合学习吗?
如果你在学全栈开发,这个项目是个很好的参考案例。可以学到 Next.js 13+ 的新特性、Prisma 的数据库设计、如何开发轻量级的 SDK、Docker 容器化部署、E2E 测试的实践等等。
总结
Umami 用现代的技术栈解决了网站分析的几个核心问题:隐私保护、性能优化、使用简单。对于不想把数据交给大厂的开发者来说,是个实用的工具。
关注《云栈大前端》,每周分享前端、移动端、全栈领域的优质开源项目
配套资源
📦 Github:umami-software/umami
📖 使用文档:umami.is/docs
🎬 Prometheus监控系统教程:https://yunpan.plus/t/362-1-1
🎬 PostgreSQL数据库学习:https://yunpan.plus/t/39-1-1
标签:#Umami #Github #Next.js #Web分析 #开源项目 #数据统计 #隐私保护