Files
story/docs/tencent-captcha-release-20260920.md
T

51 lines
4.9 KiB
Markdown
Raw Normal View History

# 腾讯云验证码发布记录(2026-09-20)
## 已发布
- 生产:`https://82.157.201.114`;管理端入口:运行配置 → 验证码设置。
- 版本:`0.97.1-rc.tencent-captcha1`,约 21:31(Asia/Shanghai)发布。
- 以线上 `0.97.0-rc.tencent-sms1` 源码为基线,只叠加验证码实现。未带入本地其他后台页面样式、固件或设备功能改动。运行配置页仅增加两个视图按钮和验证码设置面板,保留原发布工作台。
- API、worker、Web 镜像已更新,gateway 仅重载;数据库迁移 71 已应用、dirty=false。
- `/opt/data-terminal-cloud/current` → `/opt/data-terminal-cloud/releases/0.97.1-rc.tencent-captcha1`。
- 发布包 SHA-256:`cef0dbad61c9315ee26d6966c9c45f29db45b7ad319dad13046a87495bb29609`。
- 当前策略:`saas_mode=image`、`mini_mode=image`、`version=1`。未开启腾讯云模式、未发送真实短信、未自动完成任何真实 CAPTCHA。
## 配置和安全
- 使用用户上传的 `/etc/data-terminal-cloud/voice-runtime/tencent-captcha.json`,内容未修改、未复制到本地、未输出日志。
- 已收紧为 root:65532、0640;原上传内容备份在 `/var/backups/data-terminal-cloud/tencent-captcha-upload-20260920.json`,0600。
- API/worker 复用只读 secrets 挂载,唯一新增环境键为 `TENCENT_CAPTCHA_CONFIG_FILE`;既有短信配置未修改。
- API/worker 非 root 配置加载检查通过;原短信功能仍开启。
- 腾讯云 DescribeCaptchaUserAllAppId 查询确认两套应用属于当前凭据可访问的账号:SaaS channel=web,小程序 channel=mini;DescribeCaptchaAppIdInfo 均返回 code=0。
- 此检查不代表 AppSecretKey、真实票据校验权限、套餐或人工验证全流程均已验证,后续仍需手动联调。
- Web CSP 已允许官方 SDK/iframe 域名,未开放内联脚本;公网 JS/CSS 中未发现配置文件内的 API 密钥或应用密钥。
## 验证
- 发布候选的配置/Tencent SDK/IP 单元测试通过。
- 发布候选在新建隔离数据库、迁移 1–71、local_seed 下,完整 `go test ./internal/onboarding -count=1` 通过。
- 隔离测试最初缺少 JSON fixture;补齐后复用测试库又触发已有固定手机号测试冲突。重建本任务专用测试库后全包通过,测试未指向生产。
- Linux amd64 API/worker 编译、Web OpenAPI 生成及生产构建通过。
- 发布候选运行原 phone-password-login 9 项、新 tencent-captcha 4 项浏览器检查通过;腾讯 SDK/API 使用 mock,不产生真实验证或短信费用。
- `go test ./... -run '^$'` 在候选的 devicefleet 旧测试失败(fakeStore 缺少 OpenDownload、StartBroker 签名不匹配);在原线上 SMS 基线候选复现相同失败,属于未修改的已有测试不一致。本次未改写设备功能来消除该失败,不声称全仓测试通过。
- 线上 SaaS、管理端、小程序客户/运营端共四个登录入口均返回 image 模式 PNG,短信开关仍开启。
- 未登录访问验证码策略接口返回 401;Web 新资源 200、CSP 检查通过。
- API/worker readiness 正常,API/worker/Web 运行且重启计数均为 0,公网版本正确。
- 本任务专用的本地 PostgreSQL/Redis 测试容器、临时数据已清理;未删除用户或生产数据。
## 尚需人工完成
1. 管理员在运行配置 → 验证码设置把 SaaS 切至腾讯云;另开登录页手动完成腾讯云验证并测试登录/短信流程。保存前保留已登录的管理端会话,以便改回 image。
2. 小程序需在微信平台授权官方插件 `wx1fe8d9a3cb067a75`(2.1.5),使用 `C:/Users/19926/WeChatProjects/voicelink` 已更新源码重新编译、真机测试并发布后,再启用小程序腾讯云模式。本轮未提交或发布小程序。
3. 不要启用尚未实现的 CaptchaAppId 强制鉴权选项。
## 备份和回退
- 发布前加密备份:`/var/backups/data-terminal-cloud/before-0.97.1-rc.tencent-captcha1.dump.enc`(0600),已完整恢复到临时验证库并验证成功;验证库随即删除。
- 保留上版镜像和 release;migration 71 为新增表,旧镜像可兼容保留该表。
- 优先只将验证码模式切回 image。如果无法登录,授权运维可将 login_captcha_policy 相应字段恢复 image 并递增 version;不要删除账号或修改密码。
- 整体镜像回退使用新 release 的 `deploy/server/compose.captcha-rollback.yaml`,并保留完整 compose 层:base、override、subtitle、onboarding、migration、fleet、admin-ui、admin-ui2、tencent-sms、captcha-rollback。只重建 api/worker/web,重载 gateway;健康检查通过后将 current 指回旧 release。不要执行 down 或删除生产卷。
- 后续正常发布必须保留 `deploy/server/compose.tencent-captcha.yaml` 最后覆盖层,避免使用过时的镜像。
官方说明:[Web 接入](https://cloud.tencent.com/document/product/1110/36841)、[小程序插件](https://cloud.tencent.com/document/product/1110/49319)。