Umami:开源自托管网站统计,无 Cookie 的 Google Analytics 替代

每个做独立站或小型项目的开发者迟早会遇到一个问题:用 Google Analytics 担心合规与性能,用 Plausible 之类的云服务又想把数据握在自己手里。Umami 是这个清单里反复出现的名字——一个以隐私优先为卖点的开源网站分析工具,MIT 协议,自托管,部署一个 Node 服务加一个数据库就能跑起来。

> “Umami is a simple, fast, privacy-focused alternative to Google Analytics.” —— 项目自述

它的核心定位是替代 GA 但不依赖 Cookie、不采集可识别个人身份的信息,因此大多数情况下无需在网站上挂 Cookie 横幅。

核心特性

  • 不依赖 Cookie:访客标识不写入浏览器,符合 GDPR / CCPA 等隐私法规的常见要求
  • 轻量脚本:跟踪脚本体积小,对页面加载速度影响有限
  • 多站点管理:一个后台可以挂多个网站域名,分别查看数据
  • 常规指标齐全:页面浏览(PV/UV)、来源、地理位置、设备/浏览器、会话时长等
  • 实时数据:可以看到当前在线的访客和正在浏览的页面
  • 自定义事件:除页面浏览外,可以追踪按钮点击、表单提交等
  • 可分享看板:可以把单个站点的统计页面通过链接分享给非管理员

对于中小型网站、内容博客、独立开发者项目,Umami 提供的能力基本够用。

部署准备

根据官方 README,源码部署需要满足:

  • Node.js 18.18+
  • PostgreSQL 12.14+(需提前准备好数据库实例)

如果你不想自己维护 Node 环境和数据库,Docker 部署更省事,只需一台装了 Docker 与 Docker Compose 的服务器即可。

源码部署

先把代码拉下来并安装依赖:

git clone https://github.com/umami-software/umami.git
cd umami
pnpm install

接着在项目根目录新建一个 .env 文件,填入数据库连接字符串:

DATABASE_URL=postgresql://username:mypassword@localhost:5432/mydb

其中 usernamemypasswordmydb 替换成你实际数据库的凭证和库名。如果想修改内部 UI API 调用的基础路径,可以加一个 API_URL 环境变量,比如 API_URL=/internal-api(走 BASE_PATH 下的相对路径),或者 API_URL=https://api.example.com/api(指向完全独立的域名)。

然后执行构建:

pnpm run build

这一步会根据 .env 里的配置在数据库中创建必要的表。首次部署还会自动生成一个默认管理员账号:用户名 admin,密码 umami(首次登录后务必修改)。

最后启动服务:

pnpm run start

默认监听 http://localhost:3000。生产环境通常用 Nginx 做反代对外提供服务,而不是直接暴露 3000 端口。

后续更新版本时按以下顺序操作即可:

git pull
pnpm install
pnpm build

Docker 部署

如果想跳过 Node 环境配置,Docker 是最省心的方式。官方维护的镜像可以直接拉取:

docker pull docker.umami.is/umami-software/umami:latest

也可以用项目自带的 Compose 文件一键启动(Compose 会同时拉起 Umami 和一个 PostgreSQL):

docker compose up -d

启动后访问 http://:3000,用默认账号登录即可。Docker 部署的更新方式:

docker compose pull
docker compose up --force-recreate -d
Docker Compose 启动后终端输出的容器启动日志-1
📷 Ilija Boshkov / Unsplash License / 来源

> Docker Compose 方式默认配置里的数据库账号、密码都是公开示例值,正式上线前请务必修改;docker compose.yml 中端口、卷挂载路径也建议根据实际环境调整。

基础使用流程

部署完成后,常见的上手路径是:

  1. admin / umami 登录后台
  2. 进入「设置」修改默认密码
  3. 在「网站」页面点击 Add website,填入站点名称和域名
  4. 系统会生成一段跟踪脚本(含 data-website-id),复制粘贴到你要统计的网站 “ 里
  5. 等待几分钟,刷新后台即可看到访问数据

{{图:添加新站点的表单界面,填入名称和域名的输入框}}

跟踪脚本支持两种加载方式:直接同步加载,或者加上 async / defer 异步加载,后者对页面渲染的阻塞更小。如果你的站点启用了 CSP,记得在策略里把 script-src 放行 Umami 的域名。

进阶用法

  • 自定义事件:在跟踪脚本之外,可以调用 umami.track('事件名', { key: 'value' }) 来记录任意事件,例如按钮点击、视频播放、表单提交等
  • 实时面板:可以查看”此刻”在线的访客数、最近访问的页面、来源国家等
  • 多用户与权限:可以邀请其他用户,按角色分配网站访问权限
  • 数据导出:支持通过 API 把数据拉出来自行做长期归档
  • 可分享看板:把单个站点的统计页面以只读链接分享给非管理员

{{图:Umami 仪表盘总览界面,展示访客趋势折线图和来源饼图}}

{{图:实时访问面板,列出当前在线访客的国家、设备与正在浏览的页面}}

Umami vs Plausible:怎么选

两个项目定位高度相似,都是隐私优先、开源、Cookieless 的网站统计,也都经常出现在”GA 替代品”清单上。差异主要在生态和部署模式上:

维度 Umami Plausible
协议 MIT AGPL(云版另算)
自托管 官方支持,文档完善 社区有自托管方案
云托管 官方提供 Umami Cloud 官方主推 Plausible Cloud
技术栈 Next.js + Node + PostgreSQL Elixir + ClickHouse(自托管)
部署难度 中等,依赖 Node 和 PG 偏简单(Plausible Cloud)
自定义事件 支持 支持
收入化方向 商业云服务 + 自托管 商业云服务

如果你的服务器上已经有 Node 和 PostgreSQL,Umami 自托管的门槛相对可控,且 MIT 协议在二次分发和定制上限制更少。如果不想碰服务器、希望几秒钟就能用上,Plausible Cloud 体验更顺。

简单说:Umami 适合”我想自己掌握数据、愿意折腾”的场景;Plausible Cloud 适合”我只想看几个数字”的场景。

适合谁用

  • 独立开发者和个人博客:不想被 GA 的弹窗和合规问题打扰
  • 中小企业官网:数据量不大,需要基本的访问分析
  • 注重隐私的站点:欧洲用户多、合规要求严格的行业
  • 已经在用 Plausible 但希望自托管:可以作为迁移候选
  • 多站点运营者:希望一个后台集中管理多个域名的数据

一些注意事项

  • 官方文档写的是 PostgreSQL 12.14+;如果服务器系统较老,先确认下数据库版本
  • 跟踪脚本需要正常联网才能上报数据,部署在内网或受限网络环境时注意连通性
  • 默认账号 admin / umami 是公开信息,首次登录后必须改密码,否则等于裸奔
  • 涉及多服务器、多域名时,注意 BASE_PATH 与反代配置,否则会出现资源 404
  • 跨实例迁移、备份恢复的具体操作建议以官方文档为准

总的来说,Umami 是一个”够用、好用、不烦人”的选择。它没有 GA 那么花哨的漏斗、细分维度与机器学习洞察,但对于绝大多数中小型网站来说,PV/UV、来源、事件这几项已经能回答大部分”流量从哪来、用户在看什么”的问题。把数据放在自己手里的安心感,是它最值得被选中的理由。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。