Google Analytics 应该是当今互联网使用最广泛的网站流量分析服务。通过在网页中嵌入追踪代码,Google Analytics 能够帮我们收集网站的流量来源,同时自动分析跳出率、转化率等核心指标。但是对于大部分中小型站点而言,接入 Google Analytics 并不是最理想的选择,因为它太复杂了,同时国内访问也不太方便。

umami.is 则可以看作是 Google Analytics 的精简版解决方案,它完全免费且开源,非常适合中小站点的网络流量统计分析。相对于复杂的 Google Analytics,umami.is 的界面也更加简洁,只关注于核心指标,并方便分享出去。

umami 示例页面

作为一款开源解决方案,umami.is 并不提供官方的托管服务,而是需要自行部署。提到部署,你可能想到需要使用自己的服务器或租用云主机。不用担心,接下来我将会介绍利用互联网上现成的无服务器解决方案,零成本、零门槛部署可靠的 umami.is 服务

前期准备

Serverless 无服务器计算架构近年来逐渐火热,这里的无服务器并不意味着无需服务器参与计算,而是指开发者不必过多关心底层服务器的状态、性能、资源等。因为这一切由云服务商提供,并动态管理机器资源的分配。所以为了达到零成本部署的目标,我们需要选择一些免费可靠的 Serverless 服务

根据 umami.is 官方文档 的说明,其服务需要运行在 Node.js 环境中,且需要对接到 MySQL 或者 PostgreSQL 数据库。所以,接下来我们会使用到免费可靠的 Vercel 静态站点托管服务,以及同样免费可靠的 PostgreSQL 数据库服务商 Supabase

那么正式开始之前,你需要做的第一件事是 注册一个 GitHub 帐号。为什么注册 GitHub 呢?因为我们后续要克隆 umami.is 主仓库代码,同时通过 GitHub 帐号直接登录 Vercel 和 Supabase,从而不需要额外再注册相关平台了。

注册好 GitHub 帐号之后,你需要完成 3 个步骤:

Fork 代码仓库并登录到 Vercel 和 Supabase
  1. 访问 umami.is 代码仓库,点击右上方 Fork 到自己的帐号。
  2. 访问 Vercel 注册页面,点击使用 GitHub 登录到 Vercel。
  3. 访问 Supabase 注册页面,点击使用 GitHub 登录到 Supabase。

至此,准备工作大功告成,是不是非常简单。

创建数据库

我们需要先在 Supabase 的主界面中找到 New Project 按钮创建一个新的数据库。名字可以使用 umami,然后设置一个自己记得住的数据库密码。下方的 Region 区域选择 Northeast Asia(Tokyo)东京区域。Supabase 本身使用了 AWS 云服务,东京区域在大陆地区的访问速度还是比较理想的。

创建自己的 umami 数据库

创建好之后,等待数据库初始化完成。接下来,我们需要向数据库中写入 umami.is 所需的基础数据结构。打开 umami.is 代码仓库,找到其预先提供的 PostgreSQL 初始化 SQL 语句 schema.postgresql.sql

PostgreSQL 初始化 SQL 语句

接下来,我们回到初始化完成的 Supabase 数据库的设置页面,找到左侧的 SQL 选项,选中默认的 Query-1 查询面板。然后,完整复制上方 schema.postgresql.sql 文件中的 SQL 语句粘贴到查询对话框中,点击 RUN 执行。

创建默认的数据库表结构

几秒后,Supabase 会返回 Success. No rows returned 的提示,此时回到 Supabase 的 Tables 面板中,你可以看到多出了 5 张数据表,这也就是 umami.is 所需的初始化数据结构。

确认初始化数据表结构创建成功

部署 umami.is

接下来,我们可以正式开始部署 umami.is 了。打开 Vercel 主面板,点击右上角 New Project 创建一个新的项目。创建项目的页面中,会自动加载你 GitHub 帐号下方的代码仓库。还记得准备步骤 Fork 的 umami.is 仓库吗?选中即可。

使用 Vercel 部署 umami 项目

所有的设置都可以使用默认值。唯一需要自定义的是环境变量,我们需要传入相关的数据库连接参数。找到 Environment Variables 一项并展开,首先添加数据库连接的环境变量。

  • DATABASE_URLpostgresql://username:mypassword@localhost:5432/mydb

值得注意的是,上方数据库链接中的参数需要使用实际值,你需要到 Supabase 的设置页面中查看。如下图所示,如果我一开始设置的数据库密码是 123456,那么 DATABASE_URL 实际应该为:

  • DATABASE_URLpostgresql://postgres:123456@db.vihtqhmdpnvautwcvkmh.supabase.co:5432/postgres
查看 Supabase 设置项中的 PostgreSQL 配置

请注意,数据库链接中的密码以你在准备步骤设置的实际密码为准,其他参数以你的 Supabase 设置页面提供的为准。然后,我们还需要添加第二组环境变量 HASH_SALT,它的值可以是任意随机英文字符串,比如我使用了我的用户名 HUHUHANG,你也可以自定义其他随机字符串。

  • HASH_SALT:任意随机英文字符串。
添加好的 DATABASE_URL 和 HASH_SALT 环境变量

两组环境变量添加完成之后的结果如上图所示。设置完成之后,点击 Deploy 部署项目

测试和设置

至此,主要步骤已经顺利完成,你需要做的只是耐心等待项目部署完毕。完成之后,Vercel 会自动跳转到项目主页,并随机分配一个域名。点击 Visit 访问项目,umami 默认的后台登录的用户名是 admin,密码是 umami。登录之后,即可看到下方右图的界面。

测试并登录到部署完成的 umami 后台

一切大功告成,我们已经顺利部署了 umami.is 服务。接下来,我们还可以做几件事情个性化你的 umami.is 服务。

自定义域名

首先是设置一个独立域名,当然前提条件是你有自己的域名,没有的话可以到任意域名服务商(阿里云、腾讯云等)购买。当然你也可以一直使用 Vercel 自动分配的域名。

umami 项目添加自定义域名

重设 umami 密码并绑定站点

不要忘记到 umami 后台重设默认的管理员密码。同时,你可以新建站点并获取到数据追踪代码嵌入到你的站点中。

重设后台密码并获取站点追踪代码

这里非常推荐开启「启用共享链接」的选项,这是 umami 的一大特色,可以方便分享你的站点访问数据。同时当你自己查看时,可以免登录。你可以 访问我的示例分享页面

常见问题和小结

至此,我们通过互联网现有的资源零成本部署了自己的 umami 网站数据追踪服务。最后列举几个大家可能关心的问题。

Q:Vercel 和 Supabase 是免费的吗?我能用多久?

A:目前 Vercel 的个人帐号完全免费,企业帐号才需要付费。Supabase 的免费数据库存在 500 MB 的限制,对于中小站点这个容量理论上够用很多年了。

Q:umami 的访问速度如何?

A:据我所知,Vercel 使用了 Google Cloud 的云服务,距离大陆地区最近的节点在台湾省和香港特别行政区,访问速度还算理想。而 Supabase 使用了 AWS 云服务,一开始我们创建的数据库就选择了离大陆地区最近的东京数据中心。

Q:umami 后续如何升级?

A:Vercel 的部署是自动触发和完成的,也就是说当 GitHub 代码仓库更新时,Vercel 会帮你自动部署上线最新版本的 umami。你可以不定期访问你 Fork 后的代码仓库,选中 Fetch upstream 从 umami 官方仓库同步最新的代码后即可自动升级。当然,你还可以从一开始直接部署官方仓库的代码,完全跟随官方版本迭代升级。

拉取 umami 主仓库代码自动升级

总之,如果你拥有自己的独立博客或者正在运营中小型站点,非常推荐 尝试一下 umami,它真的很不错。

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀