Back to notes

Note

从断更到复盘:Steam to Calendar 的观测体系上线

一次关于 Steam to Calendar 的工作复盘与情绪记录,围绕自建 Umami 观测、文章发布和写作节奏反思。

everydaysteam-to-calendarumami

我知道其实有两天中断了,原因有些复杂,我也在想未来的方向

我现在思路也很复杂,今天又很多感想要写,但是我想早点睡,唉晚上还在接工单开会,我真的绷不住了

我先列一下本来今天要写什么

Steam to Calendar 在 v 站发了个帖,虽然关注的人不多,但是也收到了一些鼓励,repo 多了两个 star

https://v2ex.com/t/1217566#reply4

ID1217566
创建者nickxudotme
所在节点分享创造
创建时间2026-06-03 13:06:23 +08:00 · 11 小时 20 分钟前
最后修改时间2026-06-03 13:06:23 +08:00 · 11 小时 20 分钟前
查看次数373
查看人数160
主题已创建40838 秒

最近工作上预期的事情 搬迁企鹅岛 中期评价 中心团建 值班工作

对日后博客的感想

5356d63ea039d99611f500ba79f78e7f

今天和 ChatGPT 聊天的时候,直接把我惊了一下,我都忘记了之前写了这么多,反观现在的我,唉😮‍💨

然后我去杭助群里感慨,回想起来 我之前那篇腾讯实习的确实是转💰给 @Swagger 逼出来的

4d7bbf1553cea55aa0434278a2a2e36d

然后我翻到了很多因为我博客来联系我的朋友,感觉到了莫大的鼓励

image-20260604005342514

image-20260604005359882

我确实要坚持写下去,并且我翻新个人站点的计划还没做呢

但是需要一种怎样的风格呢,我这两天everyday断更,就是因为我意识到我开始有些抗拒写这个,可能是我记的都是流水账,我可能不应该这样记录

我可能就记录一件事,今天值得我记下来的事情,我记录应该是非常主动的,而不是一种被动的状态

我确实会有很多想记的,不过很多都是很短暂的念头,当时把句子组织起来,如果没有立刻记下就不见了,甚至比较跳跃的情况下,我还在想后面的事情,前面的就已经忘记了

唉这个后面再说吧,我想写什么就写什么,即使很碎片

另外今天还把观测这方面做了下,这个产品从点子开始,到设计、开发、上线再到现在的运维,都是 Codex 和 ChatGPT 实际落地的,我只是不提地修正,感觉这一趟确实学到了不少东西,包括设计图都重画了好几次

今天这条对话里,我们主要把 Steam to Calendar 的线上观测体系从 Vercel Analytics 转到自建 Umami,并把 replay 打通上线

  1. 安装和登录了 Vercel CLI,用它看过项目、部署和日志能力。
  2. 拉取并整理了最新代码,确认我们一直在 main 上工作,后续都合并/推到 main,避免丢 commit。
  3. 讨论了 Vercel hobby plan 的限制:
    • runtime logs 只能看近两小时左右
    • Vercel Analytics 自定义事件不是很适合长期 debug
    • 我们决定去掉对 Vercel 观测的依赖,专注 Umami
  4. 讨论并选择了 Umami:
    • 确认 Umami 是开源的
    • 官方 Cloud 方便但闭环能力有限
    • 自建更适合我们后续排查线上问题
    • 讨论了隐私、public Steam 数据、debug 需求、是否记录搜索/愿望单关联等
  5. 接入了 Umami Cloud 的脚本,后来切换到自建 Umami。
  6. 已在本地接入 Umami 运维能力,并避免把敏感配置提交到 git。
  7. 清理了 Git 分支,保证主线在 main
  8. 探索了 Cloudflare 和 mini homelab:
    • 发现原先 Cloudflare tunnel 是 root daemon
    • 让你执行了 sudo 卸载旧 LaunchDaemon
    • 改成用户级 mini-local tunnel
    • 恢复了原来的 url.nickxu.me
    • 新增了 umami.nickxu.me
  9. 在 mini 上部署了自建 Umami:
    • Kubernetes namespace: umami
    • umami Deployment
    • postgres StatefulSet
    • NodePort 30090
    • Cloudflare tunnel 暴露到 https://umami.nickxu.me
  10. 配好了 Umami 登录信息记录:
  • 管理账号信息保存在本地安全位置(未公开)
  1. 把 mini homelab 的知识沉淀到了 GitOps repo:
  • /Users/nx/Workspace/gitops/docs/mini-homelab.md
  • 记录了 tunnel、Umami、shorturl、登录恢复等运维细节
  • 已提交并 push
  1. 把 Steam to Calendar 的 Umami 指向改到私有部署:
  • NEXT_PUBLIC_UMAMI_SCRIPT_URL=https://umami.nickxu.me/script.js
  • UMAMI_COLLECT_URL=https://umami.nickxu.me/api/send
  1. 加强了服务端 analytics:
  • 用 Next.js after() 在响应后发送 server-side Umami events
  • 修复了 server analytics payload 的 screen
  1. 更新了 README / README.zh-CN:
  • 自建 Umami 地址
  • website id
  • 本地 ops 报表说明
  • raw input 默认关闭
  • npm run ops:today
  1. 配置了 Vercel production env,并让 main 自动部署到生产。
  2. 验证过生产站点:
  • https://steamcalendar.com
  • HTML 已加载自建 Umami script.js
  • 用真实浏览器 UA 测试过 Umami /api/send 能写入事件
  • curl/Node UA 会被 Umami bot filtering 拦掉,这是合理的
  1. 今天最后又检查了 Umami Session Replay:
  • 发现原来没有工作
  • 原因是 replay_enabled=false,且前端没加载 recorder.js
  1. 打开了 Session Replay:
  • Umami DB 里 replay_enabled=true
  • replay_config 设置为:
    • sampleRate: 0.15
    • maskLevel: moderate
    • maxDuration: 300000
    • blockSelector: .manualSubscribeHint
  1. 前端接入了 recorder.js
  • 文件:src/app/umami-analytics.tsx
  • 默认开启 replay
  • 可用 NEXT_PUBLIC_UMAMI_REPLAY_ENABLED=0 临时关闭
  • 默认 mask 输入框
  • 屏蔽手动订阅 URL 区域,避免 replay 里录完整 feed URL
  1. 更新了 replay 相关文档和 .env.example
  2. scripts/ops.mjs 支持 self-hosted Umami 的 本地凭据认证,不依赖外部口令。
  3. 跑了质量检查:
  • npm run format:check
  • npm run lint
  • npm run typecheck
  • npm test
  • npm run build
  1. 用本地 production 服务和 Browser 验证:
  • 页面正常渲染
  • console 无 warn/error
  • DOM 中同时有 script.jsrecorder.js
  • recorder 参数正确
  1. push 到 main,Vercel 自动部署完成。
  2. 最终确认线上 https://steamcalendar.com 已包含:
  • https://umami.nickxu.me/script.js
  • https://umami.nickxu.me/recorder.js 主要代码提交包括:
  • 26b62ca Switch analytics to self-hosted Umami
  • 1e74e22 Schedule server analytics after responses
  • 42b66c9 Use valid screen value for server analytics
  • 64cc323 Document self-hosted Umami observability
  • a059d62 Enable Umami session replays 现在的状态:自建 Umami analytics + server events + session replay 都已经上线,Steam to Calendar 的线上观测闭环基本打通了。

其实还探讨了日后升级架构,使用 Cloudflare Page 和 Cloudflare Worker,并且把 Steam CLI 用 ts 重写

回到时间线