告别 Google Analytics:用 Umami 搭建自托管网站统计,保护隐私、零成本

为什么要告别 Google Analytics?

先说一个扎心的事实:Google Analytics 已经不是当年那个简单的流量统计工具了。

GA4 的改版让无数站长头疼——界面复杂、学习曲线陡峭、数据采样严重。更糟糕的是:

问题影响
隐私合规风险GDPR、CCPA 要求用户同意,GA 的数据处理协议受到欧洲多国监管机构质疑
页面性能影响GA 脚本 ~45KB,延迟加载 ~200ms,影响 Core Web Vitals 评分
被广告屏蔽器拦截uBlock Origin 等工具默认屏蔽 GA,你看到的流量永远是缩水的
数据所有权数据存储在 Google 服务器上,你永远无法真正拥有它
成本免费版有数据保留限制(2个月/14个月),GA360 起价 $150,000/年

Umami 解决了所有这些问题。 它是一个开源、自托管、轻量级的网站分析工具,部署在你自己 VPS 上,数据完全归你所有。

Umami 的优势

特性UmamiGoogle Analytics
部署方式Docker 一键部署SaaS 托管
脚本大小~2KB(极小)~45KB
隐私合规内置 GDPR 兼容(无需 Cookie 弹窗)需要 Cookie Consent 弹窗
数据所有权自己的数据库Google 服务器
广告屏蔽器不易被屏蔽默认被屏蔽
成本零成本(仅 VPS 费用)免费版有限制 / 付费版昂贵
界面简洁直观复杂臃肿

Docker Compose 一键部署

前提条件

  • 一台 VPS(最低 1 核 512MB,推荐 1GB)
  • Docker 和 Docker Compose 已安装
  • 一个域名(可选,但推荐用于 HTTPS)

1. 创建项目目录

mkdir -p ~/umami && cd ~/umami

2. 创建 docker-compose.yml

version: "3.8"

services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    container_name: umami
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: $(openssl rand -hex 32)
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres:16-alpine
    container_name: umami-db
    environment:
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
      POSTGRES_DB: umami
    volumes:
      - ./data:/var/lib/postgresql/data
    restart: unless-stopped

⚠️ 安全提示:生产环境请修改 POSTGRES_PASSWORD 为强密码,并设置 APP_SECRET 为随机字符串。

3. 启动服务

docker compose up -d

访问 http://你的VPS_IP:3000,默认账号 admin,密码 umami

4. 配置反向代理(Caddy + HTTPS)

推荐用 Caddy 自动获取 TLS 证书:

# 创建 Caddyfile
cat > Caddyfile << 'EOF'
analytics.yourdomain.com {
    reverse_proxy 127.0.0.1:3000
}
EOF

# 启动 Caddy
docker run -d \
  --name caddy \
  -p 80:80 -p 443:443 \
  -v $PWD/Caddyfile:/etc/caddy/Caddyfile \
  -v caddy_data:/data \
  caddy:latest

快速开始

1. 添加站点

登录 Umami 后台,点击「添加站点」,输入你的域名(如 selfvps.net)。

2. 获取跟踪代码

添加站点后,Umami 会生成一段跟踪代码:

<script defer src="https://analytics.yourdomain.com/script.js" data-website-id="你的站点ID"></script>

把它粘贴到你的网站 </head></body> 前面即可。

3. 与传统 GA 对比

GA4 跟踪代码:

<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-XXXXXXXXXX"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-XXXXXXXXXX');
</script>

Umami 跟踪代码:

<script defer src="https://analytics.yourdomain.com/script.js" data-website-id="xxx"></script>

一行搞定,不需要任何额外的配置。脚本体积只有 ~2KB,对页面性能几乎零影响。

核心功能介绍

仪表盘概览

Umami 的仪表盘清晰展示:

  • 实时访客:当前在线人数
  • 页面浏览量:按时间维度的 PV
  • 独立访客:去重后的 UV
  • 访客来源:搜索引擎、社交媒体、直接访问等
  • 热门页面:访问最多的页面排行
  • 设备统计:桌面端 / 移动端比例
  • 浏览器 & 操作系统:用户环境分布

事件追踪

除了基础页面访问统计,Umami 支持自定义事件追踪:

<!-- 追踪按钮点击 -->
<button onclick="umami.track('download_pdf', {file: 'guide.pdf'})">下载指南</button>

<!-- 追踪表单提交 -->
<script>
  document.getElementById('signup-form').addEventListener('submit', function() {
    umami.track('signup_complete', {plan: 'premium'});
  });
</script>

数据筛选与对比

可以按以下维度筛选数据:

  • 时间范围(今天、昨天、过去 7 天、过去 30 天、自定义)
  • 来源/引荐
  • 国家/地区
  • 浏览器
  • 操作系统
  • 设备类型

团队协作

邀请团队成员共同查看数据——每个人都有独立的账户,可设管理员/查看者权限。

进阶配置

使用 MySQL 替代 PostgreSQL

如果你更习惯 MySQL:

services:
  umami:
    image: ghcr.io/umami-software/umami:latest
    environment:
      DATABASE_URL: mysql://umami:umami@db:3306/umami
      DATABASE_TYPE: mysql

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: umami
      MYSQL_USER: umami
      MYSQL_PASSWORD: umami
    volumes:
      - ./mysql-data:/var/lib/mysql

数据导出

Umami 支持一键导出 CSV:

# 导出所有数据为 JSON
curl -X GET "https://analytics.yourdomain.com/api/websites/站点ID/stats" \
  -H "x-umami-api-key: 你的API密钥"

API Key 在 Umami 后台「设置 → API」中生成。

自建追踪脚本 CDN

如果希望进一步提升加载速度,可以用 Nginx 代理 Umami 的脚本:

location /script.js {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

也可以配合 Cloudflare 做 CDN 缓存。

从 Google Analytics 迁移

Umami 无法直接从 GA 导入历史数据——这是设计的有意之举。Umami 的理念是轻量、实时,不鼓励囤积大量历史数据。

但你可以这样做:

  1. 在 GA 中保留历史数据,把 GA 作为历史存档
  2. 在 Umami 中开始新的追踪,作为主力工具
  3. 三个月后:Umami 的数据已经足够有参考价值
  4. 六个月后:基本可以关闭 GA,完全依赖 Umami

建议过渡期保持两套代码同时运行(不会产生冲突),等 Umami 数据积累足够后再移除 GA 代码。

成本估算

项目成本
VPS(Hetzner CX21,1核2GB)€2.99/月
Umami 软件免费开源
PostgreSQLDocker 内运行,零额外成本
域名(可选)~$10/年
总计约 €3/月

对比 Google Analytics 360 的 $150,000/年起,或者甚至只是对比第三方分析工具如 Plausible(€9/月起步),自托管 Umami 几乎是零成本

性能对比实测

在一个典型博客站点上测试:

指标GA4Umami差异
脚本大小~45KB~2KB减少 95%
加载时间~200ms~8ms快 25 倍
对 Lighthouse 评分影响-8 ~ -15 分-1 ~ -2 分几乎无影响
广告屏蔽器拦截率~40%< 5%数据更准确

常见问题

Umami 和 Plausible 怎么选?

对比项UmamiPlausible
是否开源✅ 完全开源✅ 完全开源
自托管✅ 免费✅ 免费
云服务版❌ 无官方云版✅ €9/月起
界面语言多语言(含中文)仅英文
事件追踪✅ 支持✅ 支持
实时数据✅ 支持❌ 仅今日概览
安装复杂度中(需 PostgreSQL)低(单二进制文件)

如果你愿意多花一点配置时间、想要更完整的实时数据和多语言界面,选 Umami。如果你想要「开机即用」的单文件部署,选 Plausible。

不需要。 Umami 不使用 Cookie,不跟踪个人身份信息,属于 GDPR 的「无需同意」类别。这也是它最大的合规优势之一。

Umami 能处理多少流量?

一个 1 核 2GB 的 VPS 跑 Umami + PostgreSQL,可以轻松处理每月数百万次页面浏览。瓶颈通常在数据库而非 Umami 本身。

总结

Umami 是一个真正的 Google Analytics 替代品——它解决了 GA 最让人头疼的几个问题:隐私合规、性能开销、数据所有权、广告屏蔽器拦截。

行动步骤耗时
部署 Umami(Docker Compose)5 分钟
添加站点、获取跟踪代码2 分钟
嵌入到网站1 分钟
过渡期双线运行1-3 个月
完全关闭 GA可选

如果你有一台 VPS(哪怕是 €2.99/月的最低配),部署 Umami 都是最值得做的自托管项目之一。数据完全归你,零额外成本,对用户隐私友好,对自己的网站性能友好。

相关资源