Umami: 更简单的自托管网站统计服务

此前博客都是用 Google Analytics 来提供网站统计服务,统计博客中各个页面的访问情况。可用是可用,但是 Google Analytics 提供了太多的统计内容,让人眼花缭乱,都不知道要看些什么。另外 Google 的服务,总是会存在访问性的问题。因此在看到介绍其它博主介绍 Umami 的文章后,我也打算搭建一个自己的网站统计服务,并进行切换。

Umami is a simple, fast, privacy-focused alternative to Google Analytics.

Umami 主打的就是注重隐私,毕竟像访问数据这些数据,还是不落在大公司手上好点。Umami 支持多种部署方式,比如 Docker。不过对于我这种云计算爱好者来说,当然是都上云服务了。Umami 服务本身可以部署在 Vercel 上面,绑定一个域名就可以直接访问了。Umami 支持 MySQL 和 Postgresql 两种数据库,这两种数据库都可以找到对应的 serverless 提供商。这里我选择的是 PingCap 家的 TiDB Cloud,能够提供每个集群最大 5G 容量,每月 5 千万次访问的 MySQL 数据库。

最终部署的成果如下。

搭建过程

  1. TiDB Cloud 登录后,创建一个 Serverless 的数据库 cluster

  2. 在集群的 overview 页面,点击 connect 获取建立数据库链接的相关内容,以 MySQL CLI 的连接方式为例,包括

    • 用户名 -u
    • host -h
    • 端口 -P
    • 密码 -p
  3. 根据获取得到的相关信息,拼接出 MySQL 的连接 URL

    • mysql://<username>:<password>@<host>:<port>/<database_name>?pool_timeout=60&sslaccept=accept_invalid_certs
    • 需要预先创建一个数据库并指定数据库
    • 因为 TiDB Cloud 默认是需要 TLS 的,因此必须添加参数 sslaccept=accept_invalid_certs,否则会连不上(这是一个隐藏的小坑)
  4. GitHub Fork Umami 项目,并到 Vercel 部署,部署时填入环境变量 DATABASE_URL,值是上面的连接 URL

  5. 部署后在 Vercel 绑定自己的域名,因为 DNS 污染的原因,Vercel 提供的域名大多数时候不能够正常访问,需要自己的域名,才能更顺利地被访问到

  6. 部署成功后,通过绑定的域名访问网站,默认账号用户名和密码是 admmin 和 umami,进去后可以修改密码,添加网站,添加用户

  7. 在设置页面处添加网站,填写相关信息,Umami 会为需要统计的网站分配一个 ID 以及影响的 tracking code。只需要把这个 tracking code 放到网页的 head 标签中,即可以开始收集统计数据,并在 dashboard 中看到相应的统计结果。

    1. 以我使用的 hugo 为例,在主题的 html 模板当中找到 head 标签相关的生成模板,然后把 tracking code 放进去就行了。为了增加可配置性,也可以把 tracking code 中的 id 抽取出来变成变量,从配置中读取。
    1
    2
    3
    4
    5
    6
    
     {{- if and .Site.Params.enableUmami (eq hugo.Environment "production") }}
         {{ $id := .Site.Params.umamiTrackingID }}
         {{ $host := .Site.Params.umamiHost }}
    
         <script async src="https://{{ $host }}/script.js" data-website-id="{{ $id }}"></script>
     {{- end }}
    
    1
    2
    3
    
    enableUmami = true
    umamiTrackingID = "your_id"
    umamiHost = "your_umami_website"