umami 网站统计数据
Jan. 31, 2023
实现语言:我非常倾向于 JavaScript 的实现, 数据库:最好是 SQLite。Litestream 的存在让基于 S3 等对象存储的低成本数据库维护成为可能。 便于部署:有官方维护的 docker image 尊重数据隐私: ublock:这个服务得有绕过 ublock 拦截的能力。
前后端全部使用 TypeScript 和 Next.js 开发 数据库是 PostgreSQL,我比较喜欢,可以接受 项目页面有个大大的 “Deploy on Railway”,也有 docker image 项目 Slogan 就是 “privacy focused” Umami does not collect any personally identifiable information and anonymizes all data collected.
提供 TRACKER_SCRIPT_NAME 环境变量用于自定义 script 名称,可以绕过 ublock 的默认规则
部署说明 我之前就对 Railway 有所了解,所以直接点击 “Deploy on Railway” 按钮开始部署流程。
Railway 是一个 PaaS 平台,可运行 JavaScript, Python, Go 等多种语言,提供 Redis, MySQL, MongoDB 等主流数据库存储。由于支持全面、界面友好,加上和 Cloudflare 一样有充裕的免费额度,足够个人项目免费使用,Railway 一直是我心中最好的 PaaS 之一。如果你有兴趣,欢迎通过我的 referral link 注册。
umani 有一篇 Running on Railway 文档,我遵照这个流程很快就完成了初步部署。其实只有一个 HASH_SALT 需要输入,其他只需点点点即可。
Railway Project 创建后,在管理界面可以看到两个 block,左边是数据库实例,右边是 umami 的后端服务。
安装依赖 在等待 umami 的镜像构建和部署的过程中,我们可以在命令行进行一些其他工作。
打开命令行,使用以下命令安装 Railway CLI 和 pgsql 两个软件依赖。
brew install railwayapp/railway/railway brew install libpg 完成后,将 libpg 的 bin 路径添加到 PATH 中,在 .zshrc 或 .bashrc 中添加一行:
export PATH="$PATH:/opt/homebrew/opt/libpq/bin" 你可以通过执行 type pgsql 确认 pgsql 是否存在。
更新数据库 Railway 在创建 Project 时,会将 umami 的代码复制到在你的 GitHub 账户所创建的名为 umami 的仓库中,我们需要先将此仓库 clone 下来:
git clone git@github.com:username/umami.git 进入 umami 目录,执行以下命令,登录 Railway CLI 并完成链接:
cd umami railway login railway link 这一步完成后,可以通过 railway variables 看到 umami 服务的环境变量,确认 CLI 可以访问到线上数据。
DATABASE_URL: postgresql://postgres:xxxxxxxxx@containers-us-west.railway.app:6595/railway DISABLE_TELEMETRY: 1 HASH_SALT: xxXXxxXXxxXXxx HOSTNAME: PGDATABASE: railway PGHOST: containers-us-west.railway.app PGPASSWORD: xxXXxxXXxxXXxx PGPORT: 6595 PGUSER: postgres PORT: 3000 执行以下命令,为 umami 创建表格、添加初始数据。注意要将 bash variable 替换为上文中的数据:
railway run psql -h $PGHOST -U $PGUSER -d $PGDATABASE -f sql/schema.postgresql.sql 配置服务 数据库初始化完毕后,回到 Project 管理界面,确认 umami 部署完毕,即可打开服务的主页。
更换密码 使用初始用户名密码 admin:umami 登录进去,然后立刻到 Settings > Accounts 界面更换一个强密码。
绑定个人域名 在 Project 管理界面点击 umami,选择 Settings,在 Service Domains 下添加个人域名。比如我使用的是 oishii.reorx.com。
打开域名的 DNS 服务商,根据 Railway 中的提示,为自定义域名添加 CNAME 记录。
等待几分钟,生效后 Railway 中会显示上图所示的 ✅ 符号。
修改脚本名称 为了避免 umami 被 ublock 误杀(有的规则集中有匹配 umami 的正则),还需要为它的统计脚本更换一个名称。Environment variables 文档中的 TRACKER_SCRIPT_NAME 提供了这一功能。
再次进入 Railway,打开 umami 的 Variables 选项卡,按下图所示添加环境变量,我使用的名称为 oishii,可以更换为任意非 tracker 特征词汇。
完成这一步后,需要重新构建 umami 的镜像,目前我还没有找到触发 rebuild 的简单方法,只能通过修改 Dockerfile 实现
2022-09-25 更新
保存 Variables 后,等待新的部署完成,即可生效。
接入个人网站 一切准备就绪,我们重新使用自定义域名和修改后的密码登录 umami。
要进行统计,第一件事情是添加一个 Website。操作非常简单,读者可以参考 Add a website 文档来进行。唯一需要注意的是 Enable share URL 选项,如果你想将自己网站的统计数据分享出去,则需要勾选之。你可以在 https://oishii.reorx.com/share/jKljpE4T/reorx.com 访问本站的统计信息。
添加完成后,点击网站列表中对应网站的 Get tracking code 按钮,在浮窗中获得需要加入到网站 HTML 中的代码。
需要注意将 src 结尾的 umami.js 替换为 $TRACKER_SCRIPT_NAME.js。
复制代码并添加到自己个人网站的 <head> 标签下的任意位置,由于使用了 defer 属性,这个 script 不会对网页加载造成阻塞。
网站更新完成后,呼朋唤友点击访问一番,就可以看到 umami 清晰、美观的统计数据了。