Umami 轻量级开源网站分析工具
Umami介绍
Umami 是一款简单、快速、注重隐私的开源网站分析工具,目标是提供 Google Analytics 的开源替代方案。
GitHub 地址: https://github.com/umami-software/umami
Umami 的独特优势:
- 完全开源,代码透明可审计
- 隐私优先设计,不使用 Cookie,不跟踪个人
- 追踪脚本极小(仅 2KB),不影响网站性能
- 界面简洁,关键指标一目了然
- 数据完全自主,隐私安全有保障
- 支持多网站,一个实例管理所有网站
工作原理
Umami 采用轻量级追踪方案
┌─────────────────────────────────────────────────────────────────┐
│ 访客浏览器 │
│ │
│ 加载网站 → 执行 Umami 追踪脚本(2KB) │
│ │
│ 收集数据: │
│ - 页面 URL │
│ - 访问时间 │
│ - 屏幕分辨率 │
│ - 浏览器/操作系统 │
│ - 来源网站(referrer) │
│ - 国家/地区(通过 IP 地理定位) │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Umami Server │
│ │
│ 接收追踪数据 → 存储到 PostgreSQL 数据库 │
│ │
│ 数据处理: │
│ - 实时数据更新 │
│ - 会话聚合 │
│ - 统计计算 │
│ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ Umami Dashboard │
│ │
│ 数据可视化: │
│ - 实时访客 │
│ - 页面浏览 │
│ - 访问来源 │
│ - 地理分布 │
│ - 设备统计 │
│ │
└─────────────────────────────────────────────────────────────────┘追踪脚本工作流程:
- 访客访问网站,加载 Umami 追踪脚本
- 脚本收集基本访问数据(无 Cookie,无个人识别)
- 数据以 JSON 格式发送到 Umami 服务器
- 服务器解析并存入数据库
- Dashboard 实时展示统计数据
安装
这里只推荐 docker 安装
创建 docker-compose.yml :
yml
services:
umami:
image: ghcr.io/umami-software/umami:latest
container_name: umami
restart: unless-stopped
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgresql://umami:umami_password@db:5432/umami
- DATABASE_TYPE=postgresql
- APP_SECRET=your_random_secret_key
depends_on:
- db
volumes:
- ./umami-data:/app/data
db:
image: postgres:15-alpine
container_name: umami_db
restart: unless-stopped
environment:
- POSTGRES_USER=umami
- POSTGRES_PASSWORD=umami_password
- POSTGRES_DB=umami
volumes:
- ./db-data:/var/lib/postgresql/data
volumes:
umami-data:
db-data:说明:
umami 服务(统计应用)
image:从 GitHub Container Registry 拉取最新的 Umami 镜像。container_name:给容器起名umami,方便管理(执行docker logs umami等)。restart: unless-stopped:容器崩溃或 Docker 重启后会自动启动,除非手动停止。ports: "3000:3000":将宿主机的 3000 端口映射到容器内的 3000 端口,Umami 默认在此端口运行。environment:配置环境变量(Umami 的所有配置都通过环境变量传入):DATABASE_URL:数据库连接字符串,格式postgresql://用户名:密码@数据库主机:端口/数据库名。 这里的db是数据库服务的容器名,因为 Docker Compose 会自动创建一个网络,两个容器可以通过服务名互相访问。 用db:5432就连接到了下面的 PostgreSQL 容器。DATABASE_TYPE=postgresql:告知 Umami 使用 PostgreSQL(也可以用 MySQL,但当前配置的是 pg)。APP_SECRET:用于加密 session 和生成 JWT 的密钥,务必修改为随机字符串(比如openssl rand -hex 32生成一个)。
depends_on: - db:控制启动顺序,确保db容器先启动,然后才启动umami。 但这只保证启动顺序,不保证数据库完全就绪,不过 Umami 会自行重试连接。volumes: - ./umami-data:/app/data:将宿主机的./umami-data目录挂载到容器内的/app/data(Umami 运行中可能产生的数据,如上传的图标、导出的 CSV 等)。 这是为了持久化 Umami 自身的文件,与数据库无关。
db 服务(PostgreSQL 数据库)
image: postgres:15-alpine:使用基于 Alpine 的 PostgreSQL 15 镜像,体积小、资源省。container_name: umami_db:数据库容器命名。restart: unless-stopped:同应用容器一样自动重启。environment:POSTGRES_USER=umami:创建数据库用户umami。POSTGRES_PASSWORD=umami_password:设置该用户的密码。POSTGRES_DB=umami:自动创建一个名为umami的数据库,并将所有权赋给umami用户。
volumes: - ./db-data:/var/lib/postgresql/data:将数据库文件(表、索引等)持久化到宿主机的./db-data目录,即使容器销毁数据也不会丢失。./db-data是相对于docker-compose.yml所在目录的路径,启动后会自动创建。
启动服务:
bash
# 启动服务
docker-compose up -d
# 查看运行状态
docker-compose ps
# 查看日志
docker-compose logs -f访问 Web 界面:
http://your-server-ip:3000
默认账号:admin
默认密码:umami首次登录后请立即修改密码!
使用mysql数据库版本:
yml
services:
umami:
image: ghcr.io/umami-software/umami:latest
container_name: umami
restart: unless-stopped
ports:
- "3000:3000"
environment:
- DATABASE_URL=mysql://umami:umami_password@db:3306/umami
- DATABASE_TYPE=mysql
- APP_SECRET=your_random_secret_key
depends_on:
- db
db:
image: mysql:8
container_name: umami_db
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=root_password
- MYSQL_USER=umami
- MYSQL_PASSWORD=umami_password
- MYSQL_DATABASE=umami
volumes:
- ./db-data:/var/lib/mysql如果已经安装有数据库,可以直接使用即可,但使用前先新建umami数据库
新建一个用户给umami:
sql
CREATE DATABASE IF NOT EXISTS umami CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'umami'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT ALL PRIVILEGES ON umami.* TO 'umami'@'%';
FLUSH PRIVILEGES;