使用 Docker 快速搭建 umami 网站统计工具

umami 是一个开源、简单、快速和注重隐私的 Google Analytics 替代品,可以自行部署到服务器上并支持无限数量的网站统计,支持 Docker 快速部署。

官网:https://umami.is/
Github:https://github.com/umami-software/umami
在线预览:https://analytics.umami.is/share/LGazGOecbDtaIwDr/umami.is

umami 特征

  • 轻量级:跟踪脚本仅 2kb,快如闪电。
  • 简单分析:统计数据在一个页面上,易于使用。
  • 访客信息:可以获取并展示访客的浏览器、操作系统和设备信息。
  • 自定义事件:不仅仅可以跟踪页面浏览量,还可以捕获网站上的任何事件。
  • 强大的过滤器:使用易用的过滤器深入了解访客数据。
  • 实时数据:实时查看当前网站流量和数据。
  • 多语言支持:支持简体和繁体中文。
  • 无限网站:自行部署后可以支持无限数量的网站。
  • 多用户:可以为朋友或客户托管数据。
  • 适用于移动设备:针对移动设备优化。
  • 共享数据:可以一键开启共享 URL,分享网站统计数据。
  • 深色模式:网页支持深色模式。

使用 Docker 安装

克隆仓库:

1
git clone https://github.com/umami-software/umami

在根目录执行命令,此命令默认使用 PostgreSQL 数据库。

1
docker compose up -d

之后会占用本机的 3000 端口启动 umami,使用 IP 地址加端口可以直接访问。

配置 Nginx 反向代理

实际部署时我们不应该直接使用 IP + 端口访问,通常需要配置反向代理并启用 SSL。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
server {
listen 80;
listen 443 ssl http2;
server_name analytics.cui.cc;

# http -> https,http 强制跳转到 https
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}

ssl_certificate /your/fullchain.pem;
ssl_certificate_key /your/privkey.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;

location / {
proxy_pass http://127.0.0.1:3000;
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;
}
}

以上配置中将 ssl_certificatessl_certificate_key 替换为你的 SSL 证书路径,域名改为你已经解析好的域名。之后就可以通过域名访问刚刚部署的 umami,默认的用户名密码是 admin/umami,登录之后要立即修改为复杂密码。

umami 优化配置

反屏蔽广告插件

umami 跟踪代码可能会被广告拦截器拦截,拦截之后就获取不到访问数据了。可以在 docker-compose.yml 配置文件中增加 TRACKER_SCRIPT_NAME 环境变量,指定跟踪代码的名称,可以指定一个随机字符串,可以不使用 .js 结尾。

1
2
3
4
5
6
7
8
9
10
11
version: '3'
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: replace-me-with-a-random-string
+ TRACKER_SCRIPT_NAME: 8898b6243a06

使用 docker compose up --force-recreate -d 命令重建容器。跟踪代码名称从默认的 script.js 就变成了指定的名称。

1
2
- https://analytics.cui.cc/script.js
+ https://analytics.cui.cc/8898b6243a06

升级

1
2
docker compose pull
docker compose up --force-recreate -d

每次升级之前的旧版本镜像是无用的,留着会占用磁盘空间。可以使用 docker image prune -a 命令删除之前的旧版本镜像。

部署到 Hexo Fluid

Fluid 主题貌似没有集成 umami 功能,需要我们手动集成。为了避免修改主题,我们可以使用 Hexo 5 的注入器将统计脚本插入到 head 标签中。

首先需要在博客根目录下建立 scripts 文件夹,然后在里面创建一个 umami.js 文件,写入以下注入代码,将第二个参数替换为你的跟踪代码。

1
hexo.extend.injector.register('head_begin', '<script>...</script>', 'default');

解决 Hexo 本地预览时统计数据的问题

默认生成的跟踪代码部署到 Hexo 中后,如果使用 hexo server 命令启动本地服务预览时也会统计数据。要解决这个问题可以改下跟踪代码增加 data-domains 属性。填写你的网站域名,可使用英文逗号分隔多个域名。

1
2
3
4
5
6
7
<script
async
defer
src="http://mywebsite.com/umami.js"
data-website-id="94db1cb1-74f4-4a40-ad6c-962362670409"
data-domains="mywebsite.com,mywebsite2.com"
></script>

部署到 WordPress 中

如果你的主题支持插入代码或安装了支持插入代码的插件,可以直接插入跟踪代码。但是这样会导致不管是不是登录用户都统计访问数据,所以最好是对访客进行统计,已经登录的用户就不用再统计了。在子主题中的 footer.php 中插入以下代码并将跟踪代码替换为你的。

1
2
3
4
5
6
7
8
9
<?php
function my_analytics_script() {
if ( ! is_user_logged_in() ) {
# 这里写你的跟踪代码
echo '<script></script>';
}
}
add_action('wp_footer', 'my_analytics_script');
?>

这样就实现了只针对访客做统计,已登录用户不统计。


使用 Docker 快速搭建 umami 网站统计工具
https://cui.cc/3c92a8303358/
作者
南山崔崔
发布于
2023年7月19日
许可协议