此前博客都是用 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 数据库。
最终部署的成果如下。
搭建过程
TiDB Cloud 登录后,创建一个 Serverless 的数据库 cluster
在集群的 overview 页面,点击 connect 获取建立数据库链接的相关内容,以 MySQL CLI 的连接方式为例,包括
- 用户名 -u
- host -h
- 端口 -P
- 密码 -p
根据获取得到的相关信息,拼接出 MySQL 的连接 URL
mysql://<username>:<password>@<host>:<port>/<database_name>?pool_timeout=60&sslaccept=accept_invalid_certs
- 需要预先创建一个数据库并指定数据库
- 因为 TiDB Cloud 默认是需要 TLS 的,因此必须添加参数
sslaccept=accept_invalid_certs
,否则会连不上(这是一个隐藏的小坑)
GitHub Fork Umami 项目,并到 Vercel 部署,部署时填入环境变量
DATABASE_URL
,值是上面的连接 URL部署后在 Vercel 绑定自己的域名,因为 DNS 污染的原因,Vercel 提供的域名大多数时候不能够正常访问,需要自己的域名,才能更顺利地被访问到
部署成功后,通过绑定的域名访问网站,默认账号用户名和密码是 admmin 和 umami,进去后可以修改密码,添加网站,添加用户
在设置页面处添加网站,填写相关信息,Umami 会为需要统计的网站分配一个 ID 以及影响的 tracking code。只需要把这个 tracking code 放到网页的 head 标签中,即可以开始收集统计数据,并在 dashboard 中看到相应的统计结果。
- 以我使用的 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"