Umami:隐私友好的 Google Analytics 替代品
在当今数字化时代,数据分析对于网站和应用程序的成功至关重要。许多企业依赖 Google Analytics 来跟踪用户行为和网站性能,但随着隐私问题的日益严重,越来越多的人开始寻找替代方案。Umami 就是这样一个简单、快速且注重隐私的分析工具。
什么是 Umami?
Umami 是一个简单、快速、注重隐私的分析工具,听起来是不是很酷?它就像是 Google Analytics 的小兄弟,但更懂得保护你的隐私。Umami 不会像某些人一样偷偷收集你的数据,反而会让你安心地追踪网站的访问情况。
Umami 的超级能力
隐私保护:Umami 不用 cookies,也不收集任何个人信息。你可以放心地追踪数据,而不必担心被大数据公司盯上。
简单易用:Umami 的界面就像一杯清爽的柠檬水,简单明了。无论你是技术小白还是编程高手,都能轻松上手。
自托管选项:想要完全掌控数据?Umami 允许你将其部署在自己的服务器上,数据安全得像是藏在保险箱里。
4. 多种数据库支持:无论你是 PostgreSQL、MySQL 还是 MariaDB 的粉丝,Umami 都能满足你的需求。
实时分析:想知道你的网站现在有多少人访问?Umami 会实时告诉你,简直就像是你网站的私人侦探。
如何安装 Umami?
安装 Umami 很简单,步骤不多。推荐按照docker-compose的方式安装。
docker-compose部署
services:
umami:
image: docker.umami.dev/umami-software/umami:mysql-latest
deploy:
resources:
limits:
cpus: '0.50'
memory: 500M
reservations:
cpus: '0.25'
memory: 200M
ports:
- "30010:3000"
environment:
DATABASE_URL: mysql://username:password@ip:port/db
DATABASE_TYPE: mysql
HASH_SALT: xxxxx
restart: always
参数说明:
image: docker.umami.dev/umami-software/umami:mysql-latest
:指定要使用的Docker镜像。这里使用的是Umami软件最新的MySQL版本。deploy:
:当这个配置文件被Docker Swarm使用时,这部分指定了如何部署服务。resources:
:定义了服务运行所需的资源限制和预留。limits:
:设置了容器可以使用的最大资源量。cpus: '0.50'
:限制CPU使用不超过0.5个核心。memory: 500M
:限制内存使用不超过500MB。
reservations:
:设置容器至少需要保证的资源量。cpus: '0.25'
:至少预留0.25个核心给该容器。memory: 200M
:至少预留200MB内存给该容器。
ports:
:将宿主机上的端口30010映射到容器内的3000端口,使得可以通过访问宿主机的30010端口来访问运行在容器内3000端口上的服务。environment:
:设置环境变量,这些变量通常用于配置应用程序的行为。DATABASE_URL: mysql://username:password@ip:port/db
:数据库连接字符串,需要替换username
、password
、ip
、port
以及db
为实际值。DATABASE_TYPE: mysql
:指定数据库类型为MySQL。HASH_SALT: xxxxx
:安全散列盐值,用于加密处理,增强安全性。应替换xxxxx
为你自定义的安全盐值。
restart: always
:无论退出状态码是什么,都总是重启容器。这确保了即使服务意外停止,也会自动重新启动。
nginx反向代理
upstream umami {
server 127.0.0.1:30010;
}
server {
listen 80;
server_name xxx;
return 301 xxx;
}
server {
listen 443 ssl;
server_name xxx;
add_header Referrer-Policy "strict-origin-when-cross-origin";
if ($request_method = 'OPTIONS') {
return 204;
}
add_header Access-Control-Allow-Origin '*';
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
add_header Content-Security-Policy 'frame-ancestors xxx'; # iframe 的,分享链接嵌入
# SSL 相关配置
ssl_certificate xxx;
ssl_certificate_key xxx;
# 启用 gzip 压缩
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
location / {
proxy_pass http://umami;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_hide_header 'Access-Control-Allow-Origin';
proxy_hide_header 'Content-Security-Policy';
}
}
参数说明:
Upstream Block
upstream umami { server 127.0.0.1:30010; }
:定义了一个名为umami
的上游服务器组,它指向本地(本机)运行在30010端口上的服务。这通常对应于Docker容器中运行的Umami应用。
HTTP Server Block (Port 80)
listen 80;
:监听HTTP流量的80端口。server_name xxx;
:这里应填写实际的域名或IP地址,代表该服务器块所对应的主机名。return 301 xxx;
:将所有通过80端口进入的请求重定向到指定的URL(xxx
需要替换为实际目标URL)。这通常用于强制用户从HTTP切换到更安全的HTTPS连接。
HTTPS Server Block (Port 443)
listen 443 ssl;
:监听HTTPS流量的443端口,并启用SSL支持。server_name xxx;
:同样地,这里也需要填写实际的域名。add_header Referrer-Policy "strict-origin-when-cross-origin";
:设置引用策略,控制浏览器如何发送referrer信息。if ($request_method = 'OPTIONS') { return 204; }
:如果请求方法是OPTIONS,则直接返回204 No Content状态码,常用于预检请求(CORS跨源资源共享)。接下来的几行设置了CORS相关的响应头,允许来自任何源的请求,并指定了允许的方法和头部。
Content-Security-Policy
:内容安全策略,限制了哪些来源可以被用作iframe的父级页面。ssl_certificate xxx;
和ssl_certificate_key xxx;
:指定SSL证书和私钥的位置,以实现HTTPS加密。启用了gzip压缩,以减少传输数据大小。
location / { ... }
:对根路径下的请求进行处理。proxy_pass http://umami;
:将请求转发给之前定义的umami
上游服务器。proxy_set_header
指令用来设置传递给后端服务的HTTP头信息,如原始请求的主机名、协议类型等。proxy_hide_header
用于移除由后端响应返回的一些特定头信息,以便客户端无法看到这些信息。
创建website
打开反向代理之后的页面,默认的账号、密码为admin和umami。
按照文档新增website既可。
跟踪
因为我用的是halo的插件,https://github.com/halo-sigs/plugin-umami。
只需要在插件的设置页面填好,不用额外在脚本注入里面填跟踪代码。否则每次都会触发两次记录。
更新umami
因为我是用docker-compose部署的,可以用--build参数强制重新构建,或者也可以拉取新的镜像。
docker pull docker.umami.is/umami-software/umami:mysql-latest
其他部署方式可以参考 https://umami.is/docs/updates
非常感谢您的阅读!希望上述信息能够对您有所帮助。