1 umami开源网站统计工具简介:
Umami 是一款简单易用、注重隐私的开源网站统计工具,可以替代百度统计和 Google Analytics。它不使用 Cookie,资源占用极低,界面也非常美观。本文教你如何在宝塔面板中通过 软件商店一键安装,全程可视化操作,无需敲命令。
github:https://github.com/umami-software/umami
2 宝塔面板上部署umami
2.0 在宝塔面板中安装 Node.js 和 PM2
-
登录宝塔面板,进入 软件商店。
-
在“应用搜索”框中输入
Node.js,找到 Node.js 版本管理器,点击安装。 -
安装完成后,进入 Node.js 版本管理器,点击“安装版本”,选择 Node.js 16.x 或更高版本(推荐 18.x)。
-
安装完成后,设置该版本为命令行环境。
-
同样在软件商店中搜索 PM2 管理器,点击安装。PM2 用于管理 Node.js 进程。
2.1 安装PostgreSQL管理器和PostgreSQL
因为Umami默认使用PostgreSQL数据库,所以我们先要安装PostgreSQL管理器。
在软件商店 -> 搜索PostgreSQL管理器,安装。管理器安装完成之后,就可以使用管理器安装PostgreSQL了,默认的即可。

2.2 创建umami的PostgreSQL数据库
在宝塔面板 -> 数据库 -> PgSQL-> 添加数据库

这里需要保存数据库名称,用户名以及密码。
2.3 以docker方式安装umami
使用ssh工具连接到服务器,在/www/wwwroot目录下使用以下命令新建一个umami子文件夹
然后进入到umami子文件夹,克隆umami的github仓库
然后在仓库目录下找到docker-compose.yaml文件,主要修改以下文件内容
修改完成之后保存。
然后进入宝塔面板 -> Docker -> Compose模板,添加模板,

选择搜索本地模板Tab页面,选择刚刚编辑目录下的docker-compose.yaml文件,点击搜索,然后添加

添加完成之后点击拉取镜像,等待镜像拉取完成。
镜像拉取完成之后,选择宝塔面板 -> Docker -> Compose,点击添加Compose项目,选择刚刚的模板,点击添加

添加完成之后可以在宝塔面板 -> Docker -> 容器看到所添加的容器项目。
2.4 放行端口
选择宝塔面板 -> 安全,放行3000端口,选择添加端口规则,端口输入3000,提交即可。

现在就可以通过 http://服务器外网ip:3000 来访问umami,默认用户名为admin,默认初始密码为umami。
2.5 反向代理和ssl
为了可以通过域名访问,我们需要为umami添加一个反向代理。
首先选择宝塔面板 -> 网站 -> 添加站点,输入你要设置的站点域名

然后在站点设置中,点击反向代理 -> 添加反向代理,按照以下的方式设置反向代理

然后在你的域名服务商的网站将你所设置的域名解析到你的服务器ip,然后就可以通过 http://域名 访问umami了。如果你需要https,则自行在站点设置 -> SSL中设置ssl证书,设置完成即可以通过https访问。
3 umami中的设置
3.1 修改默认密码
登录到umami的第一步就是需要修改umami的默认初始密码。
点击右上角头像 -> 个人资料 -> 更新密码即可修改密码。

3.2 修改界面语言为简体中文
点击右上角第二个地球图标,选择中文

3.3 配置跟踪代码
首先在设置 -> 网站,添加你需要跟踪的网站,添加完成之后,点击编辑,然后可以在跟踪代码中找到跟踪代码。

然后将这段js添加到你的网站footer下,类似于百度统计的方式即可。等待一段时间,然后就可以在仪表盘中看到相关统计了。
进阶配置——排除特定页面统计
如果你不希望统计某些页面(如管理后台、特定目录),可以在跟踪代码中添加 data-exclude 属性。
修改后的跟踪代码示例:(如需排除所有以 /movie_list_ 开头的路径,或单独排除某个文件及其后面所带参数的访问,如forum.php,或home.php?xmhl=35352)
<script async defer src=”https://umami.example.com/script.js” data-website-id=”你的网站ID” data-exclude=”/admin/*,/movie_list_*,/forum.php*,/home.php*”></script>
通配符 * 表示匹配所有以该前缀开头的路径。
更高阶玩法——
-
访问
/movie_list_123、/forum.php、/home.php时,控制台显示命中规则,不发送统计请求。
<script defer src=”https://stats.91talk.com/random-string.js”
data-website-id=”530a4898-6063-4adc-9574-a9c7e318a0ba”
data-auto-track=”false”></script>
<script>
(function() {
var currentPath = window.location.pathname;
console.log(‘[Umami排除] 原始路径:’, currentPath);// 规则1:以 /movie_list_ 开头
if (currentPath.toLowerCase().startsWith(‘/movie_list_’)) {
console.log(‘[Umami排除] ✅ 命中规则1 (movie_list_) → 不统计’);
return;
}// 提取文件名(去除尾部斜杠,取最后一段)
var cleanPath = currentPath.replace(/\/$/, ”);
var fileName = cleanPath.substring(cleanPath.lastIndexOf(‘/’) + 1).toLowerCase();
console.log(‘[Umami排除] 提取的文件名:’, fileName);
console.log(‘[Umami排除] 文件名长度:’, fileName.length);
console.log(‘[Umami排除] 是否为 forum.php:’, fileName === ‘forum.php’);
console.log(‘[Umami排除] 是否为 home.php:’, fileName === ‘home.php’);// 规则2:精确匹配 forum.php 或 home.php(改用正则,更可靠)
var isExcludedFile = /^(forum|home)\.php$/.test(fileName);
console.log(‘[Umami排除] 是否命中规则2 (forum.php/home.php):’, isExcludedFile);if (isExcludedFile) {
console.log(‘[Umami排除] ✅ 命中规则2 → 不统计’);
return;
}console.log(‘[Umami排除] ❌ 未命中任何规则,准备发送统计’);
// 发送统计(等待 Umami 就绪)
function sendPageView() {
if (window.umami && typeof window.umami.track === ‘function’) {
window.umami.track();
console.log(‘[Umami排除] 已发送统计’);
} else if (window.umami && typeof window.umami.trackPageView === ‘function’) {
window.umami.trackPageView();
console.log(‘[Umami排除] 已发送统计(旧版API)’);
} else {
console.log(‘[Umami排除] umami 未就绪,重试…’);
setTimeout(sendPageView, 200);
}
}if (window.umami) {
sendPageView();
} else {
document.addEventListener(‘umami:ready’, sendPageView);
setTimeout(function() {
if (window.umami) sendPageView();
}, 2000);
}
})();
</script>
常见问题 FAQ
Q1:访问域名显示 502 Bad Gateway
原因:反向代理配置错误,或 Umami 容器未正常运行。
解决:
-
检查 Docker 容器是否都处于“运行中”状态(Docker → 容器)。
-
检查反向代理的目标 URL 是否为
http://127.0.0.1:3000。
Q2:登录时提示密码错误
原因:默认账号密码被修改过,或数据库初始化异常。
解决:
-
在 Docker 容器列表中,重启
umami-db-1和umami-umami-1容器。 -
如果仍无法登录,可查看容器日志获取更多信息。
Q3:跟踪后看不到数据
原因:跟踪代码未正确部署,或域名配置错误。
解决:
-
在网站页面右键“查看源代码”,确认跟踪代码是否存在。
-
检查跟踪代码中的域名是否与 Umami 访问域名一致。
-
等待 5-10 分钟,数据非实时更新。
Q4:安装卡住不动怎么办?
原因:镜像拉取速度受网络影响。
解决:耐心等待即可,通常 5 分钟内会完成。如果长时间无响应,可在 Docker 设置中更换镜像加速源。



