Umami:自建网站统计,不依赖第三方脚本
先说清定位差异:第三方统计擅长「跨站、多端、开箱即用」;自建方案擅长「数据自主、无第三方请求、可以随便改」。
一、部署
services:
db:
image: postgres:16-alpine
restart: always
environment:
- POSTGRES_DB=umami
- POSTGRES_USER=umami
- POSTGRES_PASSWORD=改成强密码
volumes: ["./pgdata:/var/lib/postgresql/data"]
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
restart: always
depends_on: [db]
ports: ["3000:3000"]
environment:
- DATABASE_URL=postgresql://umami:改成强密码@db:5432/umami
- DATABASE_TYPE=postgresql
- APP_SECRET=随便一串长随机字符
默认管理员账号在首次登录时修改,别用默认密码挂在公网上。
二、接入只有一行
<script async src="https://stats.你的域名/script.js"
data-website-id="站点ID"></script>
放进页面的 <head> 或页脚即可。它默认不做跨站追踪、不写 Cookie、不采集个人身份信息,这也是它比第三方脚本轻的原因。
三、和日志统计的区别
| 日志统计 | 前端埋点 | |
|---|---|---|
| 能测 | 所有请求,含爬虫 | 真实浏览器会话 |
| 测不到 | 停留时长、点击事件 | 被广告拦截的访客 |
| 准确性 | 不受拦截影响 | 约少一到三成 |
| 部署 | 解析日志,无需改页面 | 嵌入脚本 |
两者是互补的:日志告诉你「服务器被访问了多少次」,埋点告诉你「人在页面上做了什么」。
四、最有用的三张报表
- 来源:哪些站点/搜索引擎真的带来访问,决定外链该往哪投;
- 页面排行:哪几篇内容撑起流量,决定同类选题该不该继续写;
- 设备与分辨率:判断移动端优化值不值得做。
「实时在线」这类指标看着热闹,实际决策价值很低——除非你在做活动或直播。
五、隐私与合规
它默认不写 Cookie、不采集个人身份信息,这让合规工作简单很多。但要注意:
- 如果开了「事件追踪」记录点击,需要在隐私政策里说明;
- IP 地址仍会进服务器日志(这是所有网站都有的),保留期限要写清楚;
- 自建不等于匿名:你仍然可以关联到具体访客,所以内部要有使用规范。
六、被拦截了怎么办
浏览器插件和网络层面的拦截会让一部分访问统计不到。常见的三种缓解手段:
- 把统计域名放在主域名下(子路径或子域),比独立域名更容易通过;
- 服务端补充日志统计,两者对照能估算被拦截比例;
- 接受误差:统计的目标是看趋势,不是精确到个位。
七、什么时候不用它
如果你的需求只是「每天有多少人访问」,站内已有的日志统计方案更省事——不用嵌脚本、不受拦截影响,还顺带能看爬虫。它适合的是「想分析用户行为、且要求数据自主」的场景。
日志统计的做法见 数据合规落地 与 Cookie 退场之后的统计。
相关阅读
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。







评论