几个月前,我的朋友卡泽动手部署了一个仿版的不蒜子,起因是他发现不蒜子的官方 API 接口总是时不时抽风,导致网站的浏览量统计经常出现延迟甚至无法显示的情况。作为一个对网站数据有较高要求的人,卡泽实在无法忍受这种不稳定,于是索性自己写了一个兼容版本,功能上与不蒜子几乎一致,但稳定性由他自己掌控。我好奇地问他,为什么不像很多人那样直接把服务部署到 Vercel 上,毕竟 Vercel 对个人开发者非常友好,部署也简单。卡泽解释说,Vercel 的免费套餐虽然有每月访问次数的限额,虽然他个人网站的访问量不算巨大,但他担心万一某天文章突然火了,超出了免费额度,不仅统计会中断,还可能产生额外费用。与其提心吊胆地卡着限额过日子,不如从一开始就选择一个更稳妥的部署方式。听完他的考虑,我觉得确实有道理。与此同时,我们圈子里的另一位朋友小芬则选择了另一条路——他部署了Umami。从此他的网站不仅有了浏览量统计,还能看到更详细的访客行为数据。我当时的反应是不以为然,觉得不蒜子已经够用了,何必折腾更复杂的工具呢?现在回头想想,当时的我实在是太小看数据统计的价值了。

时间一晃到了六月份,我偶然间查看了一下自己博客的前台统计卡片,惊讶地发现网站的总浏览量已经快两万了。这个数字对一个大佬来说可能不算什么,但对我这样一个普通个人博客作者而言,已经是相当可观的成绩了。兴奋之余,我内心更多的是好奇:这两万多次的浏览,到底是哪些人贡献的?他们是从搜索引擎来的,还是朋友之间的链接转发?是通过手机还是电脑访问的?更重要的是,这其中有多少是真实的读者,又有多少是搜索引擎的爬虫机器人?带着这些问题,我第一时间想到了 DeepSeek,我详细地向它描述了需求。DeepSeek 的回答倒是干脆利落:让我去查看网站的后台统计数据。听到这个建议,我差点没笑出声来——我的博客是一个静态网站,所谓的“后台”不过是一堆纯文本文件托管在 GitHub Pages 上,哪来的网站后台啊?DeepSeek 似乎也意识到了这个建议的不切实际,紧接着又给出了另一个推荐:部署 Umami。它解释说,Umami 是一款开源的、注重隐私的网站分析工具,不仅能够统计访问量,还能精确地分析访客来源、设备类型、浏览行为等,完全能够满足我的需求。听到这里,我心里一动,也许当初对小芬和卡瑟布尔的不以为然,是我太武断了。

下定决心要部署 Umami 之后,我打开了搜索引擎,准备找几篇中文教程学习一下。然而搜索结果让我大失所望——网上关于 Umami 的教程简直是少到可怜。大多数文章要么是简略地提一下 Umami 是什么,要么就是直接粘贴官方文档的翻译,缺乏实际操作的细节和排错经验。更让人头疼的是,Umami 的官方文档只有英文版本,某人曾经说过自己的英语阅读能力非常烂,涉及技术部署这种对精确性要求极高的场景,读英文总归不如读母语来得顺畅。再加上Umami 的界面设计非常不人性化,菜单选项的命名和布局跟我之前用过的任何工具都不一样。作为一个中文母语者,我也是摸索了好一阵子,反复点击尝试,才终于搞清楚了如何正确配置。我深知自己在这个过程中踩过的坑,其他人很可能也会遇到。因此,如果你在按照本文操作的过程中发现有什么遗漏或者不清楚的地方,欢迎在评论区留下你的问题,记得带上你的名字和邮箱,这样我才能及时回复你,也方便其他读者一起交流讨论。

好了,废话不多说,我们正式开始部署。第一步当然是部署 Umami 服务本身。为了方便大家,官网文档准备了一个可以直接跳转到 Vercel 部署页面的链接,你只需要点击这个链接,系统就会自动把 Umami 的官方 GitHub 仓库克隆并引导你创建新的项目。可能有人会担心 Vercel 免费套餐的限额问题——毕竟我的朋友卡泽就是因为担心限额才没有把仿版不蒜子部署在 Vercel 上。但请放心,对于个人网站来说,一般的访问量完全在免费套餐的承受范围之内。除非你的网站每天都有一两万的访问量,否则根本不需要担心超额的问题。点击链接之后,按照 Vercel 的引导完成初始部署。部署完成后,你会发现系统提示需要配置一个叫做 DATABASE_URL 的环境变量。别紧张,这时你只需要回到 Vercel 的主页,重新进入刚才创建的项目,就可以继续下一步的配置工作了。

配置 DATABASE_URL 这一步听起来好像需要自己准备一个数据库,还要去配置什么连接字符串、用户名、密码之类的东西,听着就让人头大。但实际上,Vercel 已经把这个过程简化到了极致。你完全不需要自己去搭建数据库,也不需要去注册什么额外的云服务。你只需要在 Vercel 的项目页面中找到并点击 Storage 选项卡,然后选择创建一个 Neon 数据库作为项目的存储集成。Neon 是一个基于 PostgreSQL 的云数据库服务,与 Vercel 有着深度的集成合作。选择之后,系统会弹出一系列确认窗口,你只需要一路点击确定、同意、下一步这样的按钮就可以了。Vercel 会自动帮你完成数据库的创建、权限的配置以及环境变量的注入。整个过程结束后,回到你的项目环境变量设置页面,你会发现 DATABASE_URL 已经被自动填好了,而且值就是刚才创建的那个 Neon 数据库的连接地址。你完全不需要操心任何部署细节或者繁琐的配置工作,这才是现代云平台应该有的体验。

数据库配置好之后,接下来一步是为你的 Umami 实例配置域名。如果你有自己的域名,比如 umami.yourdomain.com,那么可以到 Vercel 项目的 Domain 设置中,将你的域名绑定到这个项目上。Vercel 会自动帮你生成 DNS 解析所需的信息,你只需要点一下跳转按钮去你的域名服务商后台添加对应的 CNAME 记录即可。如果你暂时没有自己的域名,也不用着急,Vercel 会提供一个 project.vercel.app 二级域名,可惜就是国内无法正常访问这个地址。域名配置完成后,最后一步是到 Deployments 页面,找到右上角最下面的那三个小点,点击之后选择 Create Deployments 。这个操作会触发一次新的部署,将刚才配置好的数据库和域名等环境应用到最新的构建中。剩下的就是耐心等待了。Umami 的构建过程大约需要两分钟,具体时长取决于 Vercel 当时的负载情况。这两分钟说长不长说短不短,你可以去给自己倒一杯牛奶,或者伸个懒腰放松一下,甚至如果你是在晚上操作的话,大可以去睡一觉,第二天再来查看结果。

部署完成后,你怀着激动的心情在浏览器中输入你配置好的域名。然而映入眼帘的却是一个登录页面,需要你输入用户名和密码才能继续。等等,你可能会愣住——在整个部署过程中,我好像从来没有设置过任何用户账户和密码啊!这要怎么登录?哈哈,别慌,这其实是 Umami 的一个设计特性。Umami 在首次启动时会自动创建一个内置的默认管理员账户,用户名是 admin,密码是 umami。你只需要用这两个信息登录即可。登录成功后,你会进入 Umami 的主控制台,但此时你的账户还是用的默认密码,安全性非常低。所以登录之后要做的第一件事就是修改密码。点击页面右上角的用户名,会弹出一个下拉菜单,在菜单中找到并点击 Language 选项,然后滑动到列表的最底部,将界面语言设置为“简体中文”。这样一来,整个 Umami 界面就会变成中文,后续的操作就方便多了。接着,再次点击用户名,这次选择“设置”,然后在设置页面中找到“个人资料”选项卡,点击进去就能看到一个“修改密码”的按钮。点击它,输入当前密码(就是刚才的 umami)以及你想要设置的新密码。我强烈建议大家设置一个足够复杂的密码,最好是大小写字母、数字和特殊符号的组合,每多一位数,暴力破解的难度就会呈指数级上升。千万不要使用自己的手机号或者生日这类容易被猜到的信息作为密码。

接下来就是最核心的一步——将你的博客网站添加到 Umami 的统计界面中,这也是本文反复强调的重点内容。首先,你需要找到你的博客网站的配置文件。本篇博客的受众使用的是 Hexo 框架搭配 Butterfly 主题,那么配置文件通常位于网站仓库根目录下的 _config.butterfly.yml 或者是主题目录下的 _config.yml。用任意编辑器编辑器打开这个文件,搜索 umami_analytics,你会看到类似下面这样的一段配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# https://umami.is/
umami_analytics:
enable: false
# For self-hosted setups, configure the hostname of the Umami instance
serverURL:
script_name: script.js
website_id:
option:
UV_PV:
site_uv: false
site_pv: false
page_pv: false
# Umami Cloud (API key) / self-hosted Umami (token)
token:

现在,我们要对这一配置进行修改。首先将 enable 的值从 false 改为 true,以启用 Umami 统计功能。然后配置 serverURL,填入你刚才部署的 Umami 服务地址的根目录,注意要以斜杠结尾,比如 https://umami.yourdomain.com/。如果你想要完全替换掉之前使用的不蒜子统计,那么就把 site_uvsite_pvpage_pv 这几个选项都启用(设置为 true),同时找到不蒜子的相关配置并将其关闭,以免两套统计系统同时运行产生数据冗余。

现在回到 Umami 的控制台页面。点击主页上的“添加网站”按钮,在弹出的对话框中,网站名称可以随便填一个你容易识别的名字(比如“我的博客”),域名则要精确填入你的博客网站的访问地址(注意不要带最后的斜杠)。添加完成后,你会看到新添加的网站出现在主页列表中。点击这个网站同一行右侧的编辑图标(通常是一个小铅笔或者齿轮的形状),里面会展示出该网站的所有配置信息。你需要重点关注的是其中一项叫做“网站 ID”的值——这是一串由字母和数字组成的唯一标识符,就是上文配置文件中 website_id 需要填入的内容。将这个 ID 复制下来,粘贴到你的配置文件中对应的位置。确认所有配置项都正确无误之后,将修改推送到你的网站仓库(比如 GitHub)。推送完成后,你的静态博客托管服务(比如 Vercel、Netlify 或者 GitHub Pages)会自动触发重新构建和部署。稍等几分钟,新的配置就会生效。

至此,恭喜你!你现在拥有了一个功能完善、完全属于自己的静态网站访问统计后台。这个后台可不是那些简单的计数器能比的——它可以清晰地展示你的网站访客来自哪些国家和地区,以直观的地图形式呈现;它可以告诉你每个访客具体看了哪个页面,停留了多长时间,是直接关掉还是继续浏览了其他文章;它还可以统计访客平均停留时间,让你知道哪些文章真正吸引人,哪些文章读者打开就立刻关掉了。所有这些统计数据,都可以帮助你更好地了解自己的读者群体,从而根据数据反馈来调整你的写作方向和内容策略。比如,如果你发现某篇技术教程的平均停留时间特别长,说明读者正在认真阅读甚至反复对照操作,那么你就可以考虑多写类似风格的文章;如果你发现某个地区的访客数量突然增多,也许你可以在那个地区的技术社区多做一些推广。数据本身没有意义,有意义的是你如何利用这些数据来改进自己的创作。希望这套Umami统计系统能成为你博客之路上的得力助手。