从开发启动改为可持续更新的本机服务
session-dashboard 安装到 ~/apps/session-dashboard ,当时版本 0.1.5,使用 Node 22.13.1/npm 10.9.2。npm 官方源多次 ECONNRESET,切换可达镜像并处理 better-sqlite3 原生依赖后构建成功。服务绑定 172.20.10.9:3000 ,供可信局域网访问。
更新脚本 ~/.local/bin/session-dashboard-update 由每日约 04:30 的 timer 调用,随机延迟最多 15 分钟。流程是加锁、拉取、 npm ci 、构建成功后重启。先构建再替换运行状态,可避免依赖下载失败直接中断现有服务。
systemctl --user status session-dashboard
systemctl --user list-timers session-dashboard-update.timer
刷新模型列表为何不能一直等一个 HTTP 请求
原 available-models.json 是 Caddy 静态文件,新增 /refresh 后需要触发长时间模型探测。同步等待容易超过 HTTP 超时,因此最终设计为异步触发、立即返回,后台持有单任务锁,完成后原子更新 JSON。
实施时先后遇到 shell 展开认证哈希、单文件 bind mount 替换后内容未生效、锁目录不可写,以及 UFW 阻断 Docker 到宿主内部端口。逐层修正后,Basic Auth 的未认证请求仍返回 401,后台刷新与 timer 正常。服务器文件包括 model-probe-refresh-server.py 和 model-probe-refresh.service ,入口为 https://newapi.envoys9.top/available-models.json/refresh ,凭据沿用本机 model-probe-credentials.env 。锁避免重复探测,原子替换让读者只看到完整的新旧版本。
Base URL 不是完整请求 URL
同日新增 Railway 渠道,将 Base URL 改为上游站点根,而不是包含 /v1/chat/completions 的完整路径。又因备注字段超过 255 字符首次创建失败,压缩后成功,模型探测和生成通过。错误分别来自 URL 拼接和接口字段约束,不能都归为密钥问题。
主会话续接
以下命令在 archx 上执行;目录仅用于辨认工作上下文。
会话 1:~/meprojects/Troubleshooting
codex resume 019fd0c0-80e5-7110-b42d-b911d569d183
会话 2:~/meprojects/mevps
codex resume 019fd139-d2cb-75e0-a7e5-53c95459f3cf
会话 3:~/meprojects/mevps
codex resume 019fd147-7541-7f62-bbaa-f7ad297837d0