虽然我的小破站每天只有 1 IP,但还是想用访问统计工具分析一下,之前一直在用 Google Analytics 和 Cloudflare Web Analytics,虽然功能强大,但国内加载还是有点慢,很影响访客的体验。最重要的是现在很多人都在用广告屏蔽插件或者 DNS,这两个工具都会被 block 而无法加载,导致统计的数据比实际少很多(万一我有 2 IP 呢😑)。

一直都想找一款自建的统计工具替代掉,之前考虑过用 Matomo,但是看大家反馈说资源占用很大,而且很多功能都用不到,对于个人小站来说没有必要,最近终于发现了 Umami 这款工具,完全符合我的需求。

umami-登录

Umami 是一个简单易用、自托管的开源网站访问流量统计分析工具。Umami 不使用 Cookie,不跟踪用户,且所有收集的数据都会匿名化处理,符合 GDPR 政策,资源占用很低,虽然功能简单,但分析的数据内容很丰富,基本的来源国家,来源域名,使用的浏览器、系统、设备,访问的网页这些都有。还支持多国语言,完全可以用来替代 Google Analytics、Cloudflare Web Analytics、CNZZ、51LA 等统计工具,而且自己搭建也可以避免被 block 掉从而使统计数据更精确(后来发现也会被部分去广告插件拦截…)。

查看在线演示

Umami 这个词语其实源于 “Umai”,在日语里是“美味、鲜味”的意思,从使用体验来看确实 umami,于是在这里分享一下搭建与使用的教程。

搭建过程

这里以 Debian 系统为例,使用源文件编译安装,Docker 安装的方式可以参考官方文档

环境准备

环境要求

  • Node.js 12 或更高版本
  • 数据库 (MySQL 或者 Postgresql)

MySQL 的安装可以参考我之前的文章 安装并配置 LNMP 的记录

这里简单的说一下 Node.js 的安装,由于 Debian 10 官方库的版本为 v10.24.0,不满足要求,所以需要添加由 NodeSource 维护的 PPA 来安装更新版本的 Node.js:

使用最新版本

截至目前 (2021-08-11),Node.js 的最新版本为 v16.6.1

curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash - 

使用 LTS 版本(推荐)

我这里安装的是 LTS(长期支持)版本

curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash - 

安装 Node.js

sudo apt install nodejs 

检查 Node.js 和 NPM 版本:

nodejs -v
npm -v

Update(2021-10-13):

如果你已经更新到了 Debian 11 系统(Debian 10 升级 11 教程),官方软件源 node.js 为 v12.22.5 版本,npm 为 7.5.2 版本,可以直接使用下面的命令安装:

apt install -y nodejs npm

安装 Umami

从 GayHub 获取源代码:

git clone https://github.com/mikecao/umami.git
cd umami
npm install

创建一个 .env 文件,并添加下面的内容:

DATABASE_URL=mysql://username:password@localhost:3306/database
HASH_SALT=[任意随机字符串]

例如:

DATABASE_URL=mysql://root:123456789@localhost:3306/umami
HASH_SALT=your-long-radom-string

为 umami 导入预设好的数据表:

mysql -u username -p databasename < sql/schema.mysql.sql

最后构建并启动程序:

npm run build
npm start

但是这个命令退出以后就会自动停止,所以我们需要 PM2 工具来守护进程,PM2 能守护的东西很多,例如:Node.js、Python、PHP、Ruby、perl,还有消息队列程序、Shell脚本等等。

安装 PM2:

npm install pm2 -g

在 Umami 目录下运行:

pm2 start npm --name umami -- start

设置重启服务器后自启动:

pm2 startup
pm2 save

补充一些 PM2 的常用命令:

pm2 list        # 查看所有运行中的应用
pm2 stop 0      # 停止 id 为 0 的应用
pm2 restart     # 重启
pm2 delete 0    # 删除 id 为 0 的应用
pm2 monit       # 显示每个应用程序的CPU和内存占用情况
pm2 show [name] # 显示应用程序的所有信息
pm2 save        # 保存当前应用列表
pm2 startup     # 创建开机自启动命令

默认会运行在 http://localhost:3000 可以通过 IP 直接访问,这里补充一下使用 Ng­inx 反代:

server {
  server_name umami.yourdomain.com;

  location / {
    proxy_pass http://localhost:3000;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

更新 Umami

首先停止运行:

pm2 stop umami

拉取最新文件:

git pull

重新安装并构建:

npm install
npm run build

重新启动:

pm2 restart umami

简单使用

Umami 安装好后,默认用户名为 admin,默认密码为 umami,但是我输入后一直无法登录,提示 Internal Server Error

umami-登录

网上也没有相关信息,排查半天,使用 npm run dev 后发现提示:

The table `account` does not exist in the current database.

数据库缺少用户表,才想起我前面是手动创建的数据库,忘记建表了…而且还有一个问题是数据库密码中最好不要包含特殊字符,我原来的密码是用脚本生成的,带有一个 ‘@’ 符号,也导致了错误,建表之后换了个正常的密码,修改好 .env 重新 build 之后终于能登录了。

登录之后的第一件事是修改密码,选择 Setting -> Profile,然后设置你的密码。

umami-修改密码

添加网站

然后在上面的 Websites 中添加你的第一个网站:

umami-添加网站

勾选 Enable share URL 会为你的网站分析数据生成一个分享链接。

设置代码

之后点击图中的 Get tracking code 按钮,会弹出一段代码,复制到你网站中的 <head> 标签里就行了。

umami-生成跟踪代码

更多详细的使用方式,例如点击跟踪、多用户、环境变量以及 API 操作,可以查看官网文档