虽然我的小破站每天只有 1 IP,但还是想用访问统计工具分析一下,之前一直在用 Google Analytics 和 Cloudflare Web Analytics,虽然功能强大,但国内加载还是有点慢,很影响访客的体验。最重要的是现在很多人都在用广告屏蔽插件或者 DNS,这两个工具都会被 block 而无法加载,导致统计的数据比实际少很多(万一我有 2 IP 呢😑)。
一直都想找一款自建的统计工具替代掉,之前考虑过用 Matomo,但是看大家反馈说资源占用很大,而且很多功能都用不到,对于个人小站来说没有必要,最近终于发现了 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 直接访问,这里补充一下使用 Nginx 反代:
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

网上也没有相关信息,排查半天,使用 npm run dev
后发现提示:
The table `account` does not exist in the current database.
数据库缺少用户表,才想起我前面是手动创建的数据库,忘记建表了…而且还有一个问题是数据库密码中最好不要包含特殊字符,我原来的密码是用脚本生成的,带有一个 ‘@’ 符号,也导致了错误,建表之后换了个正常的密码,修改好 .env
重新 build 之后终于能登录了。
登录之后的第一件事是修改密码,选择 Setting
-> Profile
,然后设置你的密码。

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

勾选 Enable share URL 会为你的网站分析数据生成一个分享链接。
设置代码
之后点击图中的 Get tracking code 按钮,会弹出一段代码,复制到你网站中的 <head>
标签里就行了。

更多详细的使用方式,例如点击跟踪、多用户、环境变量以及 API 操作,可以查看官网文档。
如果你认为这篇文章还不错,可以考虑支持作者。