Files
kefu/deploy/mobile-remote-deployed.md
T
2026-09-29 15:52:07 +08:00

104 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 手机远程控制台(管理端)上线记录
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`(未签名,未发布)。