104 lines
9.8 KiB
Markdown
104 lines
9.8 KiB
Markdown
# 手机远程控制台(管理端)上线记录
|
||
|
||
2026-09-28 15:21(CST)完成用户授权的管理端服务更新("把其他部署到线上吧" / "继续,zyt我们自己发布";内网模式,
|
||
SSH 绑定有线网卡 192.168.123.43 → 192.168.110.111)。ZYT 由 ZYT 团队自行发布,本次未动 ZYT。
|
||
|
||
- 服务器:`ps@192.168.110.111`,项目 `/opt/im-admin`。
|
||
- 发布目录:`/home/ps/mobile-remote-20260928`(本地 `C:/kefu/deploy/mobile-remote-20260928/`,说明见其中 `RELEASE.md`)。
|
||
- 当前镜像:`zyt/wecom-admin:mobile-remote-20260928`,同时标记为 `zyt/wecom-admin:current`,
|
||
`sha256:826d68999c239d9c1f4fd6dbd15c62d0f520f8caf1e764d418ea93493e3498ac`。
|
||
- 发布包:`mobile-remote-server-bundle-r2.tar.gz`,522,202 字节,SHA-256
|
||
`dc59f2a6278ae04da1f8a4c6193373317126a2fda184cdf3335004cfd06a751e`(r1 只差 `02-backup-build.sh` 一处测试导入修正,见下)。
|
||
- 生产文件:`wechat_rpa/admin_api.py`、`wechat_rpa/zyt_auth.py`、`deploy/im-admin/Dockerfile`(替换),
|
||
`wechat_rpa/remote_api.py`、`wechat_rpa/remote_store.py`、`admin-web/apps/mobile-h5/dist/`(28 个文件,新增)。
|
||
- 表结构:新增 `mobile_sessions`、`desktop_commands`、`desktop_status`、`conversation_blacklist`(纯新增,未改已有表)。
|
||
|
||
## 生产基线漂移(重要)
|
||
|
||
生产上的 `admin_api.py` 不是 `C:/kefu` HEAD,而是 2026-09-23 COS 直传发布从 `C:/wechat_rpa/tmp/cos-direct-server-payload`
|
||
放上去的版本(同批还有 `archive_store.py`,两者都是 CRLF)。本次先把生产 104 个后端文件原样取回,用三方合并得到
|
||
"生产版 + 本次改动"(无冲突,逐行核对只多出本次的改动),在"生产文件 + 本次 4 个文件"的副本上跑测试后才打包。
|
||
`C:/kefu/wechat_rpa` 的 `admin_api.py`、`archive_store.py`、`archive_api.py` 已同步为与生产一致(后两个本地原本只是落后于生产)。
|
||
|
||
## 结果
|
||
|
||
- 预检:宿主与运行中容器内 3 个基线文件哈希一致(`admin_api.py` fcc94534…、`zyt_auth.py` 6b8ded1a…、`Dockerfile` 2bc1a6c1…),
|
||
api 运行镜像 `sha256:0861974700f0…`;网关、知识库 worker(`sha256:8299aac40787…`)记录在案。
|
||
- 备份:`/data/backups/mobile-remote-20260928/backend.db` 6,972,891,136 字节(15:16 CST,WAL 模式在线备份),
|
||
quick_check ok,密钥 1 份。
|
||
- 候选镜像离线(`--network=none`、只读根目录)跑 136 项测试通过:`test_remote_api`、`test_zyt_auth`、`test_backend`
|
||
(随包的新版)、`test_archive_api`(镜像自带)。第一次运行因工作目录优先导入了镜像里的旧 `test_backend.py` 而停在测试
|
||
阶段(线上服务未受影响),`02-backup-build.sh` 改用 `python -P` 并在重跑时沿用已完成的备份后通过。
|
||
- 部署后:api 容器 healthy、重启 0 次;网关与 worker 未变;宿主与容器内 33 个文件哈希与清单一致;
|
||
4 张新表存在,quick_check ok;4 个新接口匿名访问 401;`/m/` 200 并带 CSP、`X-Frame-Options: DENY`、nosniff、
|
||
no-referrer;经 Nginx(`:8369`)访问 `/m/`、`/api/v2/health`、管理后台首页均 200;重启后 10 分钟内日志无错误、无 5xx,
|
||
桌面端心跳(167 次 `desktop/me`)已恢复。没有做任何登录,没有读取聊天或患者数据。
|
||
|
||
## 备份与回滚
|
||
|
||
- 源码备份:`/home/ps/mobile-remote-20260928/source-before/`。
|
||
- 旧镜像:`zyt/wecom-admin:before-mobile-remote-20260928`(`sha256:0861974700f0…`)。
|
||
- 回滚:`REMOTE_RELEASE_APPROVED=mobile-remote-20260928 bash /home/ps/mobile-remote-20260928/rollback.sh`
|
||
(恢复 3 个文件、删除新增文件与 `/m/`、切回旧镜像,只重建 api;保留实时数据库,新表旧代码不读写)。
|
||
|
||
## 尚未完成(需要各自负责人)
|
||
|
||
1. **ZYT**:ZYT 团队发布 `master` 上的 `694c83dc7`、`3cdc812f2`(终端 9),并同一次执行
|
||
`server/sql/1.9.20260928/add_wecom_rpa_remote_menu.sql`。在此之前手机登录提示"ZYT 尚未开通企微客服手机端登录(终端 9)"。
|
||
2. **HTTPS(可选)**:16:26 起公网也可以用 HTTP 登录(见下方"追加发布")。以后要加密传输时按
|
||
`deploy/im-admin/im.zhenyangtang.cn.https.conf.example` 配证书 + 端口转发 + Nginx。
|
||
3. **桌面端 1.5.1**:安装包由管理员在「版本升级」小比例灰度发布;旧版桌面端在手机上显示"版本过低"。
|
||
已于 15:39 构建:`C:/wechat_rpa/dist/installer/甄AI客服-安装包-v1.5.1.exe`,542,418,052 字节,SHA-256
|
||
`CEFDF05E8059C4BCD04AC1C7A9927123A65B5CD9FA2276AA38904D74182E4CF2`(未签名:本机未配置代码签名证书,与以往一致)。
|
||
第一次完整构建停在打包自检:内置 OCR 的"消息导航"合成图检查在新生成文件首次冷启动时没识别出来,且失败后进程没有退出,
|
||
被构建脚本记为超时;同一个包随后按构建脚本同样的干净 PATH 连续两次自检通过(14–15 秒),再用
|
||
`build_installer.ps1 -SkipAppBuild` 生成安装包。
|
||
4. **灰度授权**:ZYT 角色里给试点客服勾选 `wecom_rpa.remote/control`、`wecom_rpa.blacklist/add`,主管加
|
||
`wecom_rpa.blacklist/remove`。
|
||
|
||
## 已知的旧测试问题(与本次无关)
|
||
|
||
生产镜像自带的 `test_admin_api.ReleaseApiTest.test_package_upload_builds_a_verified_public_manifest` 仍断言旧的
|
||
`/api/v2/desktop/update/cos-packages/` 下载地址(9-23 起 `complete` 返回 COS 签名地址),`test_backend` 的
|
||
`test_backend_verifies_the_admin_desktop_session_endpoint` 仍模拟旧的两次请求流程;两者在未改动的生产代码上同样失败。
|
||
`C:/kefu/wechat_rpa` 的 `test_backend` 已是新版;`test_admin_api` 那一项待更新。
|
||
|
||
## 追加发布:mobile-http-20260928(2026-09-28 16:26 CST)
|
||
|
||
用户要求"不管在什么环境下都可以使用 http 登录账号,不要非固定死 https,改完后直接发布到线上环境"
|
||
(此前用 4G 访问 `http://im.zhenyangtang.cn:8369/m/` 登录被"请通过 HTTPS 地址访问手机控制台"拒绝)。
|
||
|
||
- 改动:`remote_api.py` 里 `MOBILE_REQUIRE_HTTPS` 默认值由 `auto` 改为 `never`(内外网都允许明文 HTTP 登录;
|
||
以后配好 HTTPS 可设 `auto` / `always` 恢复限制);`/m/` 登录页去掉"只能在公司内网登录"的横幅。
|
||
其余逻辑(登录限流、ZYT 锁定处理、令牌、权限)不变。无数据库变更,本次未做整库备份。
|
||
- 发布目录:`/home/ps/mobile-http-20260928`(本地 `C:/kefu/deploy/mobile-http-20260928/`)。
|
||
发布包 `mobile-http-server-bundle.tar.gz`,488,202 字节,SHA-256
|
||
`3befdb5ead6c4f5a1f7e43d3306c7a0917620fab3f1a92ad82f04721f7d2d499`;代码差异见 `payload-diff.txt`(只有该函数的说明和默认值)。
|
||
- 当前镜像:`zyt/wecom-admin:mobile-http-20260928` = `current`,`sha256:a633dd559af7d87260a6d32deb205f92c4ba7e2fcf92f4fe91df91c2493d20f8`;
|
||
回滚标签 `before-mobile-http-20260928`(= mobile-remote-20260928,`sha256:826d68999c23…`)。
|
||
- 验证:预检宿主与容器内 29 个文件(`remote_api.py` + `/m/` 28 个文件)与上一版一致;候选镜像离线 137 项测试通过
|
||
(含新增"默认允许公网 HTTP 登录"),候选镜像 `/m/` 恰好是新版 28 个文件、无旧横幅;部署后 api healthy、重启 0 次,
|
||
网关与 worker 未变,宿主与容器内文件与清单一致,在运行中的容器里判定"公网来源 + HTTP 登录"不再被拒绝;
|
||
经 Nginx 访问公网域名的 `/m/` 加载的是新登录页(无横幅、控制台无报错),重启后日志无错误、无 5xx,桌面端心跳正常。
|
||
- 注意:8369 端口的 Nginx 会缓存 `/m/assets/` 下的带哈希文件(旧文件在 Nginx 里仍可取到,API 本身已 404)。
|
||
入口 `index.html` 不缓存,所以重新打开或刷新页面即是新版;已经开着旧页面的手机需要刷新一次。
|
||
- 回滚:`REMOTE_RELEASE_APPROVED=mobile-http-20260928 bash /home/ps/mobile-http-20260928/rollback.sh`
|
||
(恢复 `remote_api.py` 与原 `/m/`,切回 mobile-remote-20260928 镜像,只重建 api)。
|
||
|
||
## 追加发布:mobile-ignore-20260929(2026-09-29 CST)
|
||
|
||
用户要求"把黑名单文字改成忽略,两个字,只改文字不改规则,改完后同步到线上"。
|
||
|
||
- 改动:`/m/` 界面文字"黑名单"全部换成"忽略"(ConversationDetail.vue、ConversationsView.vue、MeView.vue、manifest.webmanifest 描述)。
|
||
规则、接口、权限码(`wecom_rpa.blacklist/*`)、后端代码和返回的错误文字都没动;无数据库变更。
|
||
- 发布目录:`/home/ps/mobile-ignore-20260929`(本地 `C:/kefu/deploy/mobile-ignore-20260929/`),只含 `/m/` 28 个文件;
|
||
发布包 `mobile-ignore-server-bundle.tar.gz`,478,493 字节,SHA-256 `971f1e1370553a88a10bfb77d65f9c9ee3b32f14cda30c078646ef192967d395`。
|
||
- 当前镜像:`zyt/wecom-admin:mobile-ignore-20260929` = `current`,`sha256:23c1f2088b8f…`;
|
||
回滚标签 `before-mobile-ignore-20260929`(= mobile-http-20260928,`sha256:a633dd559af7…`)。
|
||
- 验证:基线 28 个文件与 mobile-http 一致;候选镜像 137 项测试通过;部署后 api healthy、网关与 worker 未变、日志无错误;
|
||
公网域名 `/m/` 返回新版资源,不再含"黑名单"。
|
||
- 回滚:`REMOTE_RELEASE_APPROVED=mobile-ignore-20260929 bash /home/ps/mobile-ignore-20260929/rollback.sh`。
|
||
- 桌面端:`C:/wechat_rpa` 的 console-app.js、zhenyang-ai-console.html、wechat_gui_qt.py、remote_control.py、
|
||
conversation_blacklist.py 的界面/提示文字同步改为"忽略",需重新打包并经「版本升级」发布才会到客服电脑上。
|
||
- 桌面端安装包已于 2026-09-29 11:33 重建:`C:/wechat_rpa/dist/installer/甄AI客服-安装包-v1.5.2.exe`,542,437,337 字节,SHA-256 `E3527C032882ABD7E72538F67B987F768F09F83B88D199A413AD67747E794D16`(未签名,未发布)。
|