华为云技术教程:ECS 上部署 TokenTracker 并做 AI 用量成本归因
# /etc/systemd/system/tokentracker.service
[Unit]
Description=TokenTracker Dashboard
After=network.target
[Service]
Type=simple
User=devuser
Environment=PORT=7680
Environment=TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1
ExecStart=/home/devuser/.nvm/versions/node/v22.19.0/bin/tokentracker serve
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now tokentracker
journalctl -u tokentracker -f # 端口冲突时会顺延,真实端口在这里
ExecStart 必须用绝对路径——systemd 不加载 shell 环境,nvm 装的命令不在默认 PATH 里。
安全组与反向代理
安全组不要放行 7680。 Dashboard 是无鉴权的本地工具,直接暴露公网等于公开团队的 AI 消耗数据。让服务只监听回环,通过 Nginx 反代到 443。
安全组入方向只需放行:
| 端口 | 用途 |
|---|---|
| 22 | SSH(建议限来源 IP) |
| 443 | HTTPS 反向代理 |
| 80 | 跳转 443(可选) |
Nginx 配置:
server {
listen 443 ssl http2;
server_name tracker.example.com;
location / {
proxy_pass http://127.0.0.1:7680;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 活跃度热力图与按项目归因首屏数据较多,默认 60s 易被掐断
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
若后续接入需要长连接的功能,还要补 Upgrade 与 Connection 头。
避坑要点
坑一:华为云 ECS 镜像自带 Node 低于 20
现象:npm 直接报 engines.node 不满足。原因是包的 engines 声明为 >=20。解决方案是用 nvm 装 22 LTS,不要用 apt 或 yum 的默认 Node。
坑二:装完 Dashboard 是空的
现象:面板正常打开但几列全是零。原因是基于 hook 的集成(Claude Code、Codex、AStudio、Gemini、Every Code、CodeBuddy、WorkBuddy、Grok Build)只在宿主 CLI 启动时加载 hook,且不补记历史会话。解决方案是先跑 tokentracker status 看清挂接状态,再重启目标 CLI 开新会话。
坑三:安全组放行 7680 导致看板裸奔
现象:http://<ECS公网IP>:7680 可直接访问。原因是 Dashboard 无鉴权。解决方案是安全组不放行 7680,改用 Nginx 反代到 443,鉴权放反代层。
坑四:反代读超时太短,首屏 504
现象:反代配好后页面转圈或 504。原因是活跃度热力图与按项目归因首屏拉取数据量偏大。解决方案是显式设置 proxy_read_timeout 300s,必要时同步设置 proxy_send_timeout。
坑五:端口 7680 冲突
现象:Dashboard 打不开。原因是端口被占用后会自动顺延到 7681、7682,真实端口写在启动日志里——第一反应应该是看日志而不是重装。查占用 lsof -i :7680,固定端口用 PORT=7700 tokentracker serve。
顺带注意 WSL2 场景:Windows 宿主机的传输优化服务(DoSvc)默认监听 7680,NAT 模式下该冲突在 WSL 内部检测不到,访问到的是系统服务。TokenTracker 在 WSL 中默认改用 7681。
坑六:systemd 里找不到 tokentracker
现象:服务启动失败报 command not found。原因是 ExecStart 未写绝对路径,systemd 不加载 nvm 的 shell 环境。解决方案是填入 nvm 版本目录下的完整路径。
坑七:多人共用账号配置互相覆盖
现象:A 配好的 hook,B 一登录就失效。原因是 ~/.tokentracker/ 与各宿主配置都在用户目录下。解决方案是按开发者建独立系统用户;必须共用时用 CODEX_HOME、GEMINI_HOME、TOKENTRACKER_GROK_HOME、TOKENTRACKER_ACODE_HOME 等变量隔离数据目录。
坑八:ECS 上跑 CI 任务时要注意两个开关
现象:流水线日志被 spinner 控制字符污染,且出现多余的 git 调用。原因是默认输出为交互式设计,且 Git 提交归因会在工作目录执行 git log。解决方案是输出改用 tokentracker status --light(纯 ASCII 表、无 spinner)或 status --json(结构化 JSON,可直接 pipe 给 jq 或喂给 AI agent),同时设 TOKENTRACKER_DISABLE_GIT_ATTRIBUTION=1。
小结
华为云 ECS 上的部署要点可以压缩成五条:Node 用 nvm 装 22 LTS → npm i -g tokentracker-cli → tokentracker status 确认挂接后再重启宿主 CLI → systemd 常驻且 ExecStart 用绝对路径 → 安全组只放行 22/443,Nginx 反代并给足读超时。
合规上有两点值得记下:TOKENTRACKER_NO_TELEMETRY=1 可关闭全部匿名遥测(同时尊重 DO_NOT_TRACK 标准);TRAE Work CN 保持默认不设即可完全不读取,因为它需要把本地保存的登录授权发送到 TRAE 内部 API,默认关闭是正确的默认值。
兼容性方面需要留意的信息:站点结论是「自动检查通过」(npm 包存在、Node 引擎满足基线、入口已声明),但明确标注未经人工实机验证,原话是「能装不等于用着没问题」,且该包未声明 dsh 版本约束。最后验证时间 2026-09-17 04:55:32。
- 点赞
- 收藏
- 关注作者
评论(0)