1 umami开源网站统计工具简介:

Umami 是一款简单易用、注重隐私的开源网站统计工具,可以替代百度统计和 Google Analytics。它不使用 Cookie,资源占用极低,界面也非常美观。本文教你如何在宝塔面板中通过 软件商店一键安装,全程可视化操作,无需敲命令。

github:https://github.com/umami-software/umami

2 宝塔面板上部署umami

2.0 在宝塔面板中安装 Node.js 和 PM2

  1. 登录宝塔面板,进入 软件商店

  2. 在“应用搜索”框中输入 Node.js,找到 Node.js 版本管理器,点击安装。

  3. 安装完成后,进入 Node.js 版本管理器,点击“安装版本”,选择 Node.js 16.x 或更高版本(推荐 18.x)。

  4. 安装完成后,设置该版本为命令行环境。

  5. 同样在软件商店中搜索 PM2 管理器,点击安装。PM2 用于管理 Node.js 进程。

2.1 安装PostgreSQL管理器和PostgreSQL

因为Umami默认使用PostgreSQL数据库,所以我们先要安装PostgreSQL管理器。

在软件商店 -> 搜索PostgreSQL管理器,安装。管理器安装完成之后,就可以使用管理器安装PostgreSQL了,默认的即可。

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

2.2 创建umami的PostgreSQL数据库

在宝塔面板 -> 数据库 -> PgSQL-> 添加数据库

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

这里需要保存数据库名称,用户名以及密码。

2.3 以docker方式安装umami

使用ssh工具连接到服务器,在/www/wwwroot目录下使用以下命令新建一个umami子文件夹

mkdir umami
Bash

然后进入到umami子文件夹,克隆umami的github仓库

git clone https://github.com/umami-software/umami.git 
cd umami
Bash

然后在仓库目录下找到docker-compose.yaml文件,主要修改以下文件内容

# 修改以下参数
PORT: 默认为3000端口
DATABASE_URL: postgresql://<数据库>:<密码>@db:5432/<数据库名>
POSTGRES_DB: 填上一节添加的数据库名
POSTGRES_USER: 填上一节添加的数据库用户名
POSTGRES_PASSWORD: 填上一节添加的数据库密码
Bash

修改完成之后保存。

然后进入宝塔面板 -> Docker -> Compose模板,添加模板,

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

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

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

添加完成之后点击拉取镜像,等待镜像拉取完成。

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

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

添加完成之后可以在宝塔面板 -> Docker -> 容器看到所添加的容器项目。

2.4 放行端口

选择宝塔面板 -> 安全,放行3000端口,选择添加端口规则,端口输入3000,提交即可。

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

现在就可以通过 http://服务器外网ip:3000 来访问umami,默认用户名为admin,默认初始密码为umami。

2.5 反向代理和ssl

为了可以通过域名访问,我们需要为umami添加一个反向代理。

首先选择宝塔面板 -> 网站 -> 添加站点,输入你要设置的站点域名

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

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

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

然后在你的域名服务商的网站将你所设置的域名解析到你的服务器ip,然后就可以通过 http://域名 访问umami了。如果你需要https,则自行在站点设置 -> SSL中设置ssl证书,设置完成即可以通过https访问。

3 umami中的设置

3.1 修改默认密码

登录到umami的第一步就是需要修改umami的默认初始密码。
点击右上角头像 -> 个人资料 -> 更新密码即可修改密码。

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

3.2 修改界面语言为简体中文

点击右上角第二个地球图标,选择中文

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

3.3 配置跟踪代码

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

宝塔面板 – 部署开源网站统计工具umami小白教程-StubbornHuang Blog

然后将这段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 设置中更换镜像加速源。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注