|
|
@ -634,6 +634,108 @@ cd ../admin && ./prod-deploy.sh rollback along |
|
|
|
|
|
|
|
|
--- |
|
|
--- |
|
|
|
|
|
|
|
|
|
|
|
## 13. 实际执行记录(2026-09-11 已落地) |
|
|
|
|
|
|
|
|
|
|
|
本次按本文档执行完毕,实际情况与计划的出入都记在下面。 |
|
|
|
|
|
|
|
|
|
|
|
### 已完成 |
|
|
|
|
|
|
|
|
|
|
|
| # | 动作 | 结果 | |
|
|
|
|
|
|---|---|---| |
|
|
|
|
|
| 1 | 备份 | 正式机 `/root/backup-020/`:console 主库 3.4MB、业务库 26KB、配置 11MB | |
|
|
|
|
|
| 2 | 提交代码 | `37817f2e` 会员与算力 + 落地文档;`110cbcb0` prod-deploy 密钥路径可覆盖。**未推远端** | |
|
|
|
|
|
| 3 | 构建镜像 | **没有重新构建**,改为把测试机验证过的 `dev-latest` 打成 `0.2.0` 推送(理由见下) | |
|
|
|
|
|
| 4 | P0-1 应用身份 | `app_registry` name/app_name 统一为 `EAIMAR`;`app_service_config` 18 行 app_name 同步;`.env` 的 `ANALYZE_APP_NAME=EAIMAR` | |
|
|
|
|
|
| 5 | P0-3 密钥路径 | 三个 `prod-deploy.sh` 的 along 段改为 `${DEPLOY_KEY:-原路径}`,部署时用 `DEPLOY_KEY=~/Documents/keys/loginscre.pem` | |
|
|
|
|
|
| 6 | `.env` 新增 | `MCP_TOKEN_KEY`(64 位随机,与 `GATEWAY_TOKEN_KEY` 不同)、`ID_HASH_SALT`(48 位随机)。**在服务器上用 `openssl rand` 生成,值未经任何中间环节** | |
|
|
|
|
|
| 7 | confs | gateway 白名单 +2;home 加 `McpTokenKey` 与 `memory` 段;mcp 加 `TokenKey`/`McpTokenKey` 与 4 个工具。改前备份 `*.yaml.bak-020`,改后用 pyyaml 校验 5 个文件全部解析通过 | |
|
|
|
|
|
| 8 | 部署 | console → app → admin,全部 `0.2.0`,digest 与推送的一致 | |
|
|
|
|
|
| 9 | 启动迁移 | ✅ `device_mac`/`app_release`/`app_goods`/`chip_vendor`/`oem_factory`/`settlement_month` 已建;`product` 的 `devicetype`/`scanuuid` 已删;业务库 `memory_item`/`memory_report`/`useridverify` 已建;算力列已补 | |
|
|
|
|
|
| 10 | 搬平台能力配置 | `svc_config` +2(实名核验)、`svc_region_override` +2、`sys_service_config` +1(email)、业务库 `config` +41 | |
|
|
|
|
|
| 11 | OSS 自定义域名 | 正式服 `storage_aliyun_oss.domain` 原为空串,已补 `https://oss.ymaikj.com` | |
|
|
|
|
|
| 12 | `MCP_ADDR` | 由 `http://localhost:7300` 改为 `https://mcp.ymaikj.com`,已生效(容器内 `/sse` 返回的 endpoint 就是这个域名) | |
|
|
|
|
|
|
|
|
|
|
|
### 与计划的三处出入 |
|
|
|
|
|
|
|
|
|
|
|
1. **镜像没有本机重建,而是给 `dev-latest` 打标签。** 本机 Docker daemon 无响应。 |
|
|
|
|
|
核对过 `dev-deploy.sh` 与 `prod-build.sh` 的 `docker build` 命令**逐字相同**(同 Dockerfile、同 context、 |
|
|
|
|
|
无任何 build-arg 差异),且三个 `dev-latest` 的 image id 与测试机**正在跑的容器完全一致** |
|
|
|
|
|
(构建于 2026-09-11 16:09–16:12)。所以 `0.2.0` 与测试服验证过的是**同一个 digest**, |
|
|
|
|
|
比本机重建更忠实于「把测试服的东西搬过去」。 |
|
|
|
|
|
|
|
|
|
|
|
2. **`config` 表导入时撞了主键。** app 升级后启动写入了 `COMPUTE_LEGACY_MIGRATED` 标记, |
|
|
|
|
|
自增拿到 `id=1`,正好撞上测试库第一条配置。处理:把标记行 `id` 改成 43(与测试库同名标记同 id), |
|
|
|
|
|
再用 `INSERT IGNORE` 导入——标记保留、41 条真配置全进、重复的标记自动跳过。 |
|
|
|
|
|
**本文档 §7.2 的顺序有个坑:先部署再导 `config`,就会遇到这个冲突;下次新环境上线, |
|
|
|
|
|
`config` 表应在 app 首次启动之前导入。** |
|
|
|
|
|
|
|
|
|
|
|
3. **算力/会员参数(§8.1)没有配。** 实测测试库 `config` 表里也没有这些键,走的是代码默认值 |
|
|
|
|
|
(系数全 1、`COMPUTE_GATE` 关、开户礼 30 天 VIP + 100 算力)。保持不配 = 与测试服行为一致。 |
|
|
|
|
|
要调就去后台「会员与算力」页。 |
|
|
|
|
|
|
|
|
|
|
|
### 验收结果 |
|
|
|
|
|
|
|
|
|
|
|
| 验收项 | 结果 | |
|
|
|
|
|
|---|---| |
|
|
|
|
|
| 三容器版本 | ✅ 全部 `0.2.0`,app healthy、五个进程齐 | |
|
|
|
|
|
| app 无 panic | ✅ 唯一 ERROR 是 Firebase 凭据文件缺失,日志自标「该登录方式不可用」,**测试机同样缺,是既有状态** | |
|
|
|
|
|
| 统计不再被拒收 | ✅ console 日志无「未在 console 注册」 | |
|
|
|
|
|
| `user_getchannelapps` | ✅ 返回 `code:0`(白名单生效,不再 `code:18`) | |
|
|
|
|
|
| `user_getappconfig` 的 env | ✅ 非空,阿里云 OSS / 百炼 / 语音等配置都下发出来了 | |
|
|
|
|
|
| `console.ymaikj.com` | ✅ 200 | |
|
|
|
|
|
| MCP 服务本身 | ✅ 容器内 `/sse` 正常,BaseURL 已是 `https://mcp.ymaikj.com` | |
|
|
|
|
|
| 会议编排引用完整性 | ✅ 4 条编排引用的 `asrfile_alibaba`/`mt_alibaba`/`llmv_qwen`/`asrfile_azure` 在正式库都存在 | |
|
|
|
|
|
| `mcp.ymaikj.com` 外网 | ❌ `https=000`,NPM 反代未建(见下) | |
|
|
|
|
|
|
|
|
|
|
|
### ⚠️ 剩余两件事(需要人工操作) |
|
|
|
|
|
|
|
|
|
|
|
**① `stats_global_day` 主键缺 `channel_id`,统计快照会全部写入失败。** |
|
|
|
|
|
|
|
|
|
|
|
console 启动日志明确报了: |
|
|
|
|
|
|
|
|
|
|
|
``` |
|
|
|
|
|
WARN console.stat: stats_global_day 复合主键缺列,统计快照将全部写入失败(42P10), |
|
|
|
|
|
请执行 docs/migrations/2026-08-08-channel-dimension.sql 的 A4 段 |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
实测该表 **0 行**、`channel_id` 列已由 console 启动时补上,只是主键没含它,所以重建主键零风险。 |
|
|
|
|
|
这三条 DDL 被本次会话的权限策略挡住(`DROP CONSTRAINT`),需手动执行: |
|
|
|
|
|
|
|
|
|
|
|
```bash |
|
|
|
|
|
ssh -i ~/Documents/keys/loginscre.pem root@47.116.104.181 |
|
|
|
|
|
docker exec postgres psql -U admin -d starpivot_console <<'SQL' |
|
|
|
|
|
ALTER TABLE stats_global_day DROP CONSTRAINT stats_global_day_pkey; |
|
|
|
|
|
ALTER TABLE stats_global_day |
|
|
|
|
|
ADD CONSTRAINT stats_global_day_pkey PRIMARY KEY (app_id, product_id, channel_id, region, stat_day); |
|
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_stats_channel_day ON stats_global_day (channel_id, stat_day); |
|
|
|
|
|
SQL |
|
|
|
|
|
docker restart starpivot-console # 重启后那条 WARN 应消失 |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
不做的后果:后台看板恒为 0。正式服目前没有用户、不产生统计,所以不阻塞上线,但**接入真实流量前必须做完**。 |
|
|
|
|
|
|
|
|
|
|
|
**② `mcp.ymaikj.com` 的 NPM 反代与证书。** |
|
|
|
|
|
|
|
|
|
|
|
DNS 已指向 47.116.104.181,MCP 服务本身也正常,但 NPM 里没有这条 proxy host, |
|
|
|
|
|
外网 `https` 握手失败(`000`)、`http` 落到 openresty 默认页。在 NPM 后台新建: |
|
|
|
|
|
|
|
|
|
|
|
- Domain `mcp.ymaikj.com` → `ym-a11` : `7300` |
|
|
|
|
|
- 申请 Let's Encrypt 证书 |
|
|
|
|
|
- **勾上 Websockets Support**(MCP 走 SSE 长连接,不勾会被缓冲/断开,表现为「连上了但事件不下来」) |
|
|
|
|
|
|
|
|
|
|
|
可直接照抄测试机 `mcp-dev.ymaikj.com` 那条的配置。 |
|
|
|
|
|
|
|
|
|
|
|
### 还需要在后台补的业务配置(不影响服务运行) |
|
|
|
|
|
|
|
|
|
|
|
- **渠道分发 / 版本控制**:`user_getchannelapps` 现在返回 `code:0` 但 `data` 为空—— |
|
|
|
|
|
`channel_app` 里只有一条 `app_name='Voitrans-Test'` 的测试残留(app_name 对不上 `EAIMAR`,读不到)。 |
|
|
|
|
|
正式发客户端前要为 `EAIMAR` 配渠道分发与版本控制,否则游客登录入口的显隐结论拿不到,客户端按「隐藏」处理。 |
|
|
|
|
|
那条 `Voitrans-Test` 残留没有清理(它读不到、不影响任何功能),确认后可删。 |
|
|
|
|
|
- **产品台账**:`product` / `production_batch` / `device_mac` 仍为空(按本次「业务台账不搬」的决定)。 |
|
|
|
|
|
后果见 §12 第 1 条——设备绑不上、OTA 不可用。要接真机就得先建起来。 |
|
|
|
|
|
|
|
|
|
|
|
--- |
|
|
|
|
|
|
|
|
## 附:本文档的事实来源 |
|
|
## 附:本文档的事实来源 |
|
|
|
|
|
|
|
|
除标注为「建议」的部分,其余均为 2026-09-11 在两台服务器上实测: |
|
|
除标注为「建议」的部分,其余均为 2026-09-11 在两台服务器上实测: |
|
|
|