Files
tongxunruanjian/docs/phase4-launch-checklist.md
T

132 lines
8.0 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.
# 第4步 · 试用前部署与验收清单(B-61)
> 本文件记录"50 人试用"前必须在服务器上手动完成的事项、验收清单与手机正式签名流程。
> 仓库代码与本文件已就绪;**下列所有"服务器上做"的动作都要等白栖知确认后再执行**,本轮不直接改现网。
## 1. 必须由白栖知确认后执行的服务器操作
### 1.1 管理员强口令(必做,试用前)
账号服务的管理页 `http://<服务器IP>:10010/` 现在默认口令是 `admin123`,谁都能改账号,**必须改掉**。
在服务器仓库目录(`tongxunruanjian/`)里:
```bash
# 1) 把 .env 里的管理口令改成一个自己记得住的强口令
# 编辑 .env,找到 ACCOUNT_ADMIN_TOKEN=admin123,改成如:ACCOUNT_ADMIN_TOKEN=Changlian@2026
# 2) 重建账号服务使生效
docker compose up -d --build account-server
```
验证:浏览器打开管理页,用新口令能登录;旧口令 `admin123` 提示错误。
### 1.2 导入 50 人名单并确认持久化(必做)
账号数据存在服务器 `tongxunruanjian/data/account/employees.json`(已挂载卷,重建容器不丢)。
质检审核发现现网账号库目前只有 2 个测试账号,试用前需重新导入 50 人真实名单。
步骤:
1. 准备 CSV:每行 `工号,姓名,初始密码`(Excel 可先存 CSV)。工号限字母/数字/`-`/`_`2-32 位;密码至少 6 位。
管理页有"模板下载"按钮,直接按模板填。
2. 打开管理页 → 粘贴/选择 CSV 导入,确认导入成功数 = 50。
3. 到服务器确认文件真落盘了:
```bash
ls -l tongxunruanjian/data/account/employees.json
grep -c '"hash"' tongxunruanjian/data/account/employees.json # 应为 50
```
4. 抽查:用某个员工的工号+密码在手机端/电脑端各登录一次。
> 注意:导入的 50 人名单 = 真实员工数据,**必须等白栖知明确同意后再导**。
### 1.3 手机正式签名(试用分发前准备,可由用户保管)
当前手机端 release 包用的是调试签名,之后换正式签名会导致已装用户要卸载重装,所以趁试用期只有小范围用户,先切到正式签名。
签名密钥**绝不提交仓库**,由白栖知自行保管。流程(一次性准备,在开发机上做):
```bash
# 1) 生成自签证书(keytool 随 JDK 自带),口令自己设并记牢,别忘
keytool -genkeypair -v -keystore changlian-release.jks \
-alias changlian -keyalg RSA -keysize 2048 -validity 36500 \
-storepass <你的口令> -keypass <你的口令> \
-dname "CN=Changlian, OU=IT, O=Company, L=City, ST=State, C=CN"
# 2) 把密钥库放到安全位置(建议不放代码目录),并在本机新建
# mobile/android/key.properties(已被 .gitignore 忽略,不会入库):
# storePassword=<你的口令>
# keyPassword=<你的口令>
# keyAlias=changlian
# storeFile=<changlian-release.jks 的绝对路径>
# 3) mobile/android/app/build.gradle.kts 的 release 块已留 TODO
# signingConfig 目前指向 debug,改成读 key.properties 的正式签名后,
# 执行 flutter build apk --release 即可出正式签名包。
```
参考 `mobile/android/app/build.gradle.kts` release 块注释(R8 混淆必须保持关闭,与官方样板一致,OpenIM 插件靠反射分发调用,混淆会静默失效)。
### 1.4 外网访问(按需,需白栖知明确确认)
- 若只内网试用:跳过本节。
- 若要让手机流量也能用:需要 ① 公网 IP 或域名 ② ICP 备案 ③ 反代 + HTTPS 证书(服务器上 nginx/caddy 都可,把 :10001/:10002/:10005/:10010/:17880 反向代理到外网域名)。**这一步必须先经白栖知拍板再动,且涉及实名备案资料,无法代办。**
## 2. 真机 + 跨端回归清单(试用前执行,逐项打勾)
> 说明:本轮在开发环境已完成**代码级验证**(见下方"已完成的自测");下表为需两台真机/PC 参与的联调项,由白栖知组织 1~2 人配合执行。
### A. 登录与基础
- [ ] 手机(安卓)装 `changlian-1.0.5-android-arm64.apk`,工号+密码能登录
- [ ] 电脑装 `畅联_1.0.1.exe`,同一工号+密码能登录
- [ ] 两个不同工号同时登录,互不干扰
- [ ] 输错密码 3 次有提示(登录接口无失败限制,仅提示)
### B. 文字消息(手机↔PC 互发)
- [ ] 手机发文字 → PC 实时收到,排序正确
- [ ] PC 发文字 → 手机实时收到
- [ ] 长文本(几百字)、特殊字符(emoji、括号、引号)不丢字不乱码
- [ ] 群聊:建一个 3 人群,三端消息同步
### C. 语音消息
- [ ] 手机发语音条 → PC 能听到,时长正确,已听红点消失
- [ ] PC 发语音条 → 手机能听到
- [ ] 语音条连续发多条,顺序不乱
### D. 文件
- [ ] 手机传文件(如 1 张图片)→ PC 能下载打开
- [ ] PC 传文件 → 手机能下载打开
- [ ] 大文件(≥50MBOpenIM/MinIO 上限内)传输成功
- [ ] 断网后发送显示红色感叹号,点重发能成功
### E. 语音通话
- [ ] 手机 ↔ PC 一对一语音通话接通,声音双向清晰
- [ ] 挂断正常,会话列表不残留"通话中"
- [ ] 手机断网/切后台再回,通话状态不假死
### F. 管理端
- [ ] 管理员停用一个账号 → 该账号手机/PC 立即被踢下线、无法再登录
- [ ] 管理员重置某账号密码 → 该账号已登录端被踢下线,新密码能登录(本轮已加"重置密码踢下线",需真实验证一次)
- [ ] 管理页能翻看 50 人列表
## 3. 已完成的自测记录(本轮,代码层验证)
- **PC 安装包**`pc-client` 全新 `npm install` 通过(husky 在非 ASCII 路径下不再阻断,回退提示中文);`npm run build` exit 0`npx electron-builder --win --x64` 产出 `畅联_1.0.1.exe`(约 101MB);`win-unpacked` 双击启动正常(冒烟通过)。
- **类型检查**`tsc --noEmit` 24 个错误,与基线 `2fe8417` 完全一致(均为工程原有问题),本次改动未新增。
- **头像/拼格/Token 收敛**:改动已进 `dist`(构建产物中可查到 `v1.0.1`、`avatar-gray`、`chat-bg`、`call-wait-bg`)。
- **重置密码踢下线**:起本地账号服务(临时数据文件,连测试 OpenIM)验证——员工登录拿到 token → 管理端重置密码 → 原 token 再调 OpenIM `parse_token` 返回 `TokenKickedError`;旧密码登录失败、新密码登录成功。✓
## 4. 改动清单(本 commit
- `pc-client/src/components/OIMAvatar/index.tsx`:中文名头像取首字(王志远→王,与手机端一致);群头像无真实图时改为 2×2 蓝灰拼格(浅灰底 + 蓝/灰蓝交替),加载失败同样回退拼格。
- `pc-client/src/styles/global.scss`:新增 `--avatar-gray`、`--search-bg`、`--chat-bg`、`--call-wait-bg` 四个 Token。
- 收敛近似灰为统一 Token`#F3F5F7`(聊天区底/hover/搜索框)→ `var(--chat-bg)``#F4F5F7`(设置页分隔块)→ `var(--chat-bg)``#F2F8FF`(呼叫等待底)→ `var(--call-wait-bg)`。全 `pc-client/src` 无新硬编码色残留。
- `account-service/server.js``reset_password` 重置密码后调用 `forceLogoutAll` 踢掉该员工所有端(与停用/删除一致)。
- `pc-client/package.json` / `package_electron.json``prepare: husky install` 改为 `husky install || true` 容错,非 ASCII/嵌套路径下 `npm install` 不再失败。
- `pc-client/README.md`:补充 husky 容错说明与新安装包版本。
- `pc-client/package.json` / `src/config/index.ts`:版本号 `1.0.0 → 1.0.1`,与新的验收安装包对应(旧 `畅联_1.0.0.exe` 作废)。
## 5. 已知事项
- 双端服务器地址仍烧死为 `192.168.200.11`mobile `lib/config.dart`、pc `.env`),换服务器 IP 需双端重打包,见质检审核员备注。
- Electron 22 偏旧 + `webSecurity: false`:内网 HTTP 场景可接受;若开外网必须先升级并开 HTTPS。
- IM token 明文存本地、登录无失败次数限制、CORS 全开:内网单人管理可接受,开外网时随 HTTPS 一并收紧。