自建网站访问数据统计工具: Umami 部署指南
前言
如果你跟我一样,既想清楚知道自己的网站有多少人看、从哪来,又不想把用户数据拱手交给第三方,更受不了那些动辄弹出 “同意追踪” 的繁琐流程 —— 你大概率会喜欢 Umami 。
它不的界面并不花里胡哨,只把访问量、来源渠道、设备类型这些核心数据摆得明明白白,一个页面全看清。关键是能私有化部署,将数据握在手里,同时开源免费。
如果你想直观感受它的界面,可以访问官方 Demo,核心数据看板如下:

实时行为监控更是精准到秒,能清晰看到访客的浏览行为:

官方提供了多种部署方式,因为一些原因 (Docker部署默认账号密码无法登录) 我用源代码部署一遍
什么是Umami?
Umami 是一款开源网站统计工具。它尊重隐私:无 Cookie、无跨站追踪、无个人数据收集,并原生支持 GDPR 合规。
为什么选择Umami?
-
隐私至上 —— 无 Cookie,无浏览器指纹,不收集个人数据。让访问者保持完全匿名。
-
掌握数据 —— 支持私有化部署。分析数据永远不会离开自己的服务器。
-
极致轻量 —— 追踪脚本体积小于 2KB。完全不会拖慢网站的加载速度。
-
部署简单 —— 支持多种方法部署。无需任何复杂的配置过程。
准备工作
在开始部署前,先确认你的服务器满足以下条件:
-
有公网 IP(或本地服务器用于测试)
-
开放目标端口(默认 3000,可自定义)
首先进入准备部署umami的目录
1 | cd /opt |
创建umami用户(分割权限)
1 | useradd -M umami |
然后,将umami的源码保存到本地(git clone或下载release里的压缩包),我选择clone
1 | git clone https://github.com/umami-software/umami.git |
授权
1 | sudo chown -R umami:umami /opt/umami |
进入umami目录
1 | cd umami |
环境部署
部署Umami需要:
-
Node.js (版本高于 18.18)
-
PostgreSQL (版本不小于 v12.14)
1.部署Node.js (推荐参考官方文档)
我使用官方的Linux + fnm + npm组合 (这里会带来一个小问题,将在后面提及)
1 | # Download and install fnm: |
上述内容复制于官方网站
1.2固化Node.js目录
上面我们使用fnm安装Node.js,这会导致我们的Node.js没有被安装在默认目录
输入which npm以查找当前session下npm所在目录
1 | root@server:/opt# which npm |
由于 /run/user/0/... 是一个临时会话路径,为了后续配置service方便,保证稳定性,我们采取最稳妥的方案:迁移 fnm 生成的二进制文件
由于fnm默认将不同版本的 Node 安装在用户的家目录下,我们运行以下命令来精准定位:
find /root/.local/share/fnm -name "node" -type f -executable | grep "v24.13.1"
此处v24.13.1为上方fnm安装的Node.js版本
我的执行结果如下:
1 | root@server:/opt# find /root/.local/share/fnm -name "node" -type f -executable | grep "v24.13.1" |
这个路径就是 Node 的“真身”
我们可以将这个版本的 Node 复制到 /opt/node-v24,这样就能直接访问,且不受 root目录的权限限制。
1 | # 创建目标目录 |
这样,我们就完成了Node.js目录的固化
2.安装PostgreSQL (推荐参考官方文档)
1 | sudo apt install -y postgresql-common |
3.安装pnpm
1 | npm install -g pnpm |
4.安装依赖包
1 | pnpm install |
配置数据库
首先,你需要以超级用户(通常是 postgres)身份登录到数据库: psql -U postgres
执行以下命令创建用户:
1 | -- 创建一个带密码的用户(建议将'password'替换为自己的密码) |
在pg_hba.conf中添加(或修改)以下一行:
1 | # TYPE DATABASE USER ADDRESS METHOD |
执行sudo systemctl reload postgresql,使配置更改生效
配置Umami安装文件
创建.env文件,填入:
1 | DATABASE_URL=postgresql://umami:password@localhost:5432/umami |
Umami设置
构建Umami
执行: pnpm build
当看到终端如下图时,则说明构建完成

启动Umami
执行: pnpm start
当看到终端如下图时,说明成功启动

默认情况下,这Umami会在 http://localhost:3000 上提供服务。你可以配置Nginx反向代理转发请求,或直接更改服务端口。
配置Umami后台运行
官方建议使用PM2进行进程管理,但是我习惯使用Debian12自带的systemctl管理器进行管理,我的配置如下(/etc/systemd/system/umami.service):
1 | [Unit] |
写入后执行
1 | sudo systemctl daemon-reload #重载service文件 |
访问 ip:3000,若能看到

则说明umami.service配置无误
配置反向代理
直接通过 IP:端口访问不够美观,且缺乏 HTTPS 安全层。我们可以用 Nginx(或 Caddy、Apache)做反向代理,绑定域名并配置 SSL。
1. 解析域名
先在域名解析平台(如阿里云、Cloudflare)将域名(如 umami.example.com)解析到服务器 IP。
2. Nginx 反向代理配置
在 Nginx 配置文件中添加以下内容。反代配置如下图所示:
1 | server |
如果用宝塔面板或1Panel等,操作更简单:在 “网站” 中添加站点,绑定域名后,在 “反向代理” 中设置目标 URL 为 http://127.0.0.1:3000 即可:


3. 首次登录:初始化设置
访问你的域名(如 https://umami.example.com),使用默认账号登录:
-
用户名:admin
-
密码:umami

重要!
登录后第一件事:修改默认密码!进入 “Settings”→“Profile”,更新密码为强密码,避免被他人登录。

食用方法
0. 创建看板账号(可选但推荐)
1. 创建只读的账号
点击 “Admin”→“Users”→“Create user”,Username/Password可随意设置,Role 选择View only并保存,这样我们就获得了一个只读的账号,可以很好的避免权限泄露

2. 创建Team
进入 “Settings”→“Teams”,点击“Create team”,Name可随意设置.

保存后,点击右侧的 “编辑”(三个点),复制Access code

3. 加入团队
登出当前管理员账号,重新登录刚才创建的只读账号;
点击 “Settings”→“Teams”→“Join team”,粘贴Access code,点击Join

1. 添加网站
登录管理员账号,切换为Team,点击 “Add website”,填入信息

2. 获取跟踪代码
添加网站后,点击网站右侧的 “编辑”,下滑找到Tracking code,复制:

3. 安装跟踪代码到网站
将跟踪代码添加到需要统计的网站中,具体位置因平台而异:
-
WordPress:在 “外观”→“主题文件编辑器”→“header.php”,粘贴到 <head> 标签内
-
Hexo:在主题的_config.yml 中找到 “自定义脚本” 配置项进行配置即可
-
静态 HTML:直接粘贴到 <head> 标签内
以 装有Betterfly主题的Hexo 为例,添加位置如下:

为什么放 <head> 里?
因为 <head> 是网页加载时优先解析的部分,能确保跟踪代码尽早执行,避免遗漏短时间访问(如用户刚打开页面就关闭)。
4. 进阶(可选)
若你跟我一样,使用的是装有Betterfly主题的Hexo.便可以使用Umami API,代替 不蒜子 提供的 访问人数统计(UV/PV).
1. 获取token
使用以下数据POST向 yourumamisite/api/auth/login 发送请求:
1 | { |
如果成功,应该会收到类似如下的回复:
1 | { |
复制并保存其中的token参数
在主题的_config.yml 中找到umami_analytics字段,将token填入UV_PV内的token处
1 | UV_PV: |

小结
Umami 作为一款轻量、隐私友好的自建统计工具,完美平衡了功能与简洁性。通过本文的部署教程,你可以在 30 分钟内搭建一套属于自己的网站分析系统,摆脱对第三方工具的依赖。





