15 KiB
本次更新说明(2026-07-22a)— CC iframe 直登 + 对接文档 §2.5
| 项目 | 说明 |
|---|---|
| 打包文件 | 上传到服务器/chajia-code-20260722a.zip(仅代码,约 0.75MB) |
| 对接文档 | 上传到服务器/文档/api对接文档.md(v1.2) |
| 适用场景 | 服务器已有项目,增量覆盖代码 |
| 是否改库 | 否 |
是否改 .env |
否(勿覆盖) |
| 重建镜像 | 是:bash deploy/update-code-only-bt-host-mysql.sh |
本次代码要点
/embed-demo:宿主传login_type+api_key自动登录,跳过登录页;成功后剥离 URL 敏感参数- 生产嵌入 Cookie:
SameSite=None; Secure(跨站 iframe) - 密码 / Key 登录统一两模块门户(MotherShip / Flock)
- 对接文档 v1.2:§2.5 网页嵌入完整说明(参数、iframe 示例、排错)
上传与更新
cp .env .env.backup.$(date +%Y%m%d)
# 解压 chajia-code-20260722a.zip 覆盖代码后:
chmod +x deploy/update-code-only-bt-host-mysql.sh
bash deploy/update-code-only-bt-host-mysql.sh
CC iframe 示例:
https://if.dev.51track.vip/embed-demo?login_type=api_key&api_key=<API_Key>&embed=1
历史:本次更新说明(2026-07-21d)— 嵌入门户两模块统一(密码=Key)
| 项目 | 说明 |
|---|---|
| 打包文件 | 上传到服务器/chajia-code-20260721d.zip(仅代码) |
| 适用场景 | 服务器已有查价项目,增量覆盖代码 |
| 是否改库 | 否 |
是否改 .env |
否(勿覆盖) |
| 重建镜像 | 是:bash deploy/update-code-only-bt-host-mysql.sh |
本次代码要点
- 账号密码登录与 API Key 登录同一门户:仅 MotherShip / Flock Freight 两模块
- 模块内切换「免账号 / 登录后」;登录后可配置官网账密
- 含 21c:单位换算、选项互斥提示、MS/Flock 稳定性修复
上传与更新
cp .env .env.backup.$(date +%Y%m%d)
# 解压 chajia-code-20260721d.zip 覆盖代码后:
chmod +x deploy/update-code-only-bt-host-mysql.sh
bash deploy/update-code-only-bt-host-mysql.sh
历史:本次更新说明(2026-07-21c)— 单位换算 / 选项互斥提示 / MS+Flock 稳定性
| 项目 | 说明 |
|---|---|
| 打包文件 | 上传到服务器/chajia-code-20260721c.zip(仅代码) |
| 适用场景 | 服务器已有查价项目,增量覆盖代码 |
| 是否改库 | 否(本次无新 migration) |
是否改 .env |
否(保留现有即可;勿用包内覆盖) |
| 重建镜像 | 是:bash deploy/update-code-only-bt-host-mysql.sh |
本次代码要点
- API 重量/尺寸公制换算(
kg/t、cm/m→lb/in,进一) - MotherShip:地址确认假阳性修复;附加服务 appointment 超时加固;登录态选项互斥提示(禁住宅提货等)
- Flock:调度 radio 点击降级;登录态选项提示(冷藏须温控、易无价地点/包装)
- 询价失败中文原因展示增强
上传与更新(推荐)
# 开发机:
# X:\work\chajia\上传到服务器\chajia-code-20260721c.zip
# X:\work\chajia\上传到服务器\代码\
服务器(项目根目录,勿覆盖 .env):
cp .env .env.backup.$(date +%Y%m%d)
# 解压 zip 覆盖代码目录后:
chmod +x deploy/update-code-only-bt-host-mysql.sh
bash deploy/update-code-only-bt-host-mysql.sh
历史:本次更新说明(2026-07-21)— 嵌入 Key 登录 / 中文报错 / 预警中文化
| 项目 | 说明 |
|---|---|
| 打包文件 | chajia-code-20260721.zip(仅代码,约 0.74MB) |
| 适用场景 | 服务器已有查价项目,增量覆盖代码 |
| 是否改库 | 否(本次无新 migration) |
是否改 .env |
否(保留现有即可) |
| 重建镜像 | 是:bash deploy/update-code-only-bt-host-mysql.sh |
本次代码要点
/embed-demo:账号密码 / API Key 双登录;Key 登录后 4 路线门户(MotherShip/Flock × 免账号/登录后)- 承运商账密明文回显 + 可保存修改;登录失败
PROVIDER_LOGIN_FAILED中文提示 - 查价失败 / 管理端预警详情:英文 Playwright 日志译中文(含
locator.waitFor)
上传与更新(推荐)
# 开发机已生成:
# X:\work\chajia\chajia-code-20260721.zip
# X:\work\chajia\上传到服务器\代码\
服务器(项目根目录,勿覆盖 .env):
cp .env .env.backup.$(date +%Y%m%d)
# 解压 zip 覆盖代码目录后:
chmod +x deploy/update-code-only-bt-host-mysql.sh
bash deploy/update-code-only-bt-host-mysql.sh
历史:本次更新说明(2026-07-16)— Flock Freight + MotherShip 登录查价 + 客户承运商账密
更新主题
| 项目 | 说明 |
|---|---|
| 打包时间 | 2026-07-16(安全增量包) |
| 适用场景 | 服务器已有查价项目,增量同步本地大更新 |
| 是否改库 | 仅本机 DataGrip 跑 SQL;服务器上不改库、不跑 migrate;勿重导 chajia.sql |
是否改 .env |
保留已有 .env,必须追加下方 Flock / 轮询变量 |
| 是否必须清 Redis | 建议(避免旧报价缓存) |
| 是否必须重建镜像 | 是(next-app + rpa-worker 均有大量新代码) |
安全更新铁律(省磁盘 / 不伤现网)
- 只覆盖
代码/:不要上传/解压数据库/(增量更新勿导入 SQL) - 绝对勿覆盖服务器
.env:上传包不含根目录.env;覆盖前先cp .env .env.backup.$(date +%Y%m%d) - 勿停其他无关容器:只操作本项目 compose 文件
deploy/docker-compose.bt-host-mysql.yml - 省磁盘:解压后立刻删 zip;构建前
df -h;构建后可docker image prune -f(勿加-a,避免误删正在用的镜像) - 防 SSH 断线:
nohup bash deploy/install-bt-host-mysql.sh > /tmp/chajia-deploy.log 2>&1 & - 构建慢属正常:
npm ci+npm run build常需 10–30 分钟,勿反复 Ctrl+C 重开并行构建
本次必上传 / 必生效的变更清单(勿遗漏)
A. 代码(打包脚本 代码/ 已覆盖)
| 模块 | 关键路径 | 说明 |
|---|---|---|
| Flock 嵌入 UI | components/flock/、app/api/flock/ |
第二报价源表单 / 两档结果 / 轮询 |
| Flock RPA | workers/rpa/flock*、lib/flock/、modules/flock/ |
Direct + DOM 回退、登录态、队列 flock-quote |
| MotherShip 登录查价 | workers/rpa/mothership-logged-in-quote.ts、components/mothership/、lib/rpa/mothership-login-context.ts |
登录态填表刮价 |
| 地址联想 | app/api/addresses/mothership-suggest/、lib/address/ |
登录态选址 |
| 客户承运商账密 | modules/customer/provider-credentials.ts、app/api/admin/customers/.../provider-credentials/、app/admin/customers/ |
按客户配置 MotherShip/Flock 官网账密 |
| 中间件 | middleware.ts |
放行 /api/flock、/api/addresses |
| Prisma | prisma/schema.prisma + prisma/migrations/ |
见下方迁移 |
| 依赖清单 | package.json / package-lock.json |
Docker npm ci 用 |
B. 数据库变更(二选一)
| Migration | 作用 |
|---|---|
20260709175000_service_api_key_ciphertext |
service_api_key.token_ciphertext |
20260715094000_customer_provider_credential |
新表 customer_provider_credential |
- 推荐:本机 DataGrip 执行
deploy/datagrip-manual-migrate-20260716.sql(服务器零改库) - 禁止混用:DataGrip 改过库后,不要再跑
install-bt-host-mysql.sh的自动 migrate
C. .env 必须追加(生产)
# ── Flock Freight(默认关;开启才出现报价源切换)──
FLOCK_RPA_ENABLED=true
FLOCK_QUOTE_URL=https://app.flockfreight.com/get-a-quote
FLOCK_QUOTE_MODE=direct_then_dom
FLOCK_STORAGE_STATE_PATH=.rpa/flock-storage.json
FLOCK_MIN_QUOTES=1
FLOCK_QUOTE_WAIT_MS=20000
FLOCK_POLL_TIMEOUT_MS=210000
NEXT_PUBLIC_FLOCK_POLL_TIMEOUT_MS=210000
FLOCK_WORKER_REUSE_SESSION=false
FLOCK_SESSION_MAX_ROTATIONS=1
# 可选:全局 Flock 登录(优先推荐在管理端「客户管理」按客户配置账密)
# FLOCK_LOGIN_EMAIL=
# FLOCK_LOGIN_PASSWORD=
# MotherShip 登录查价:优先管理端客户账密;也可继续用全局:
# MOTHERSHIP_EMAIL=
# MOTHERSHIP_PASSWORD=
Docker 生产禁止(若存在请删除/注释):
# RPA_BROWSER_CHANNEL=chrome
容器内无系统 Chrome;设了会启动失败。
已有项保留:MASTER_LOGIN_PASSWORD、JWT_SECRET、DATABASE_URL、HOST_SERVICE_TOKENS、RPA_DWELL_MS 等不要丢。
D. 管理端部署后必配(数据,非文件)
- 打开
/admin/customers,为需要登录态查价的客户配置 MotherShip / Flock 官网邮箱密码 - 未配置时:Flock 可能走无痕/弱注册路径(不稳定);MotherShip 登录查价会缺凭据失败
本次主要功能(相对服务器 2026-07-10 版)
- Flock Freight 第二报价源(嵌入切换、Direct API 优先 + DOM 回退、串行锁、轮询 210s)
- MotherShip 登录后查价(客户账密 → storage / 登录页 → 填表刮价)
- 客户级承运商账密(加密存库,管理端只读查看)
- MotherShip 地址联想 API(登录态选址)
- 历次能力保留:万能登录密码、客户 API Key、Priority1、加价、embed-demo
零、开发机打包(Windows)
cd X:\work\chajia
powershell -ExecutionPolicy Bypass -File deploy\pack-server-upload.ps1
Compress-Archive -Path "上传到服务器\*" -DestinationPath "chajia-upload-20260716.zip" -Force
生成目录:
上传到服务器/
├── README.md
├── RELEASE-NOTES.md ← 本文件(操作步骤)
├── 辅助脚本/
├── 代码/ ← 上传此目录全部内容(增量更新只传这个)
└── 数据库/ ← 本次增量更新不必上传、不必导入
推荐上传方式(省磁盘):只把 代码/ 打成 zip(或整包解压后只覆盖 代码/),不要把 数据库/ 传到服务器。
# 更省空间的上传包(仅代码,约数 MB~十几 MB)
Compress-Archive -Path "上传到服务器\代码\*" -DestinationPath "chajia-code-20260716.zip" -Force
服务器解压后:用 代码/ 覆盖 /home/project/chajia/,保留 .env。
推荐走下方「方式 B」(DataGrip 改库 + 代码-only 脚本),不要用会自动 migrate 的安装脚本。
一、服务器更新步骤(场景 B:已有旧版)
1. 备份
cd /home/project/chajia
cp .env .env.backup.$(date +%Y%m%d)
2. 上传代码
用 代码/ 覆盖 /home/project/chajia/。勿覆盖 .env。
确认存在:deploy/datagrip-manual-migrate-20260716.sql、deploy/update-code-only-bt-host-mysql.sh。
3. 追加 .env(勿整文件替换)
cd /home/project/chajia
grep -q '^FLOCK_RPA_ENABLED=' .env || cat >> .env <<'EOF'
# --- 2026-07-16 Flock Freight ---
FLOCK_RPA_ENABLED=true
FLOCK_QUOTE_URL=https://app.flockfreight.com/get-a-quote
FLOCK_QUOTE_MODE=direct_then_dom
FLOCK_STORAGE_STATE_PATH=.rpa/flock-storage.json
FLOCK_MIN_QUOTES=1
FLOCK_QUOTE_WAIT_MS=20000
FLOCK_POLL_TIMEOUT_MS=210000
NEXT_PUBLIC_FLOCK_POLL_TIMEOUT_MS=210000
FLOCK_WORKER_REUSE_SESSION=false
FLOCK_SESSION_MAX_ROTATIONS=1
EOF
grep -q '^MASTER_LOGIN_PASSWORD=' .env || echo 'MASTER_LOGIN_PASSWORD=mmgy2026master' >> .env
sed -i '/^RPA_BROWSER_CHANNEL=chrome/d' .env || true
方式 B(推荐)— DataGrip 只改库 SQL + 服务器只更新代码
B1. 本机 DataGrip(唯一改库步骤)
- 连
192.168.2.14→ 库chajia - console 粘贴并执行
deploy/datagrip-manual-migrate-20260716.sql(或下方两段 DDL) - 刷新表列表:应有
customer_provider_credential;service_api_key有token_ciphertext - 服务器上不要跑任何改库命令
B2. 服务器只更新代码/镜像(不碰库)
cd /home/project/chajia
chmod +x deploy/update-code-only-bt-host-mysql.sh
bash deploy/update-code-only-bt-host-mysql.sh
B3. 清 Redis(建议)
docker compose --env-file .env -f deploy/docker-compose.bt-host-mysql.yml exec redis redis-cli FLUSHDB
以后禁止再跑 install-bt-host-mysql.sh(会自动 migrate,与 DataGrip 手改冲突)。
方式 A(不推荐本次)— 安装脚本自动改库
仅当你不用 DataGrip、接受服务器自动 migrate deploy 时:
chmod +x deploy/install-bt-host-mysql.sh
nohup bash deploy/install-bt-host-mysql.sh > /tmp/chajia-deploy.log 2>&1 &
注意:方式 B 与方式 A 不要混用。
4. 部署后数据配置
- 管理端登录:
admin_demo+ 万能密码(或库内密码) - 客户管理 → 为目标客户写入 MotherShip / Flock 官网账密
- 确认客户 embed 密码 / API Key 仍可用
二、验收
| 检查项 | 操作 | 预期 |
|---|---|---|
| 容器 | docker compose ... ps |
next-app / rpa-worker / scheduler / redis 均为 Up |
| 管理端 | /login |
可进 /admin/customers,可查看承运商账密 |
| MotherShip 匿名 | /embed-demo → MotherShip |
询价出 4 档或明确失败码 |
| MotherShip 登录 | 已配账密客户 + 登录查价开关 | 出承运商价卡(非空超时) |
| Flock | 切换 Flock 报价源 | 出两档结果;超时约 210s 内有终态 |
| 库表 | DataGrip | 有 token_ciphertext 列 + customer_provider_credential 表 |
Worker 日志:
docker compose --env-file .env -f deploy/docker-compose.bt-host-mysql.yml logs -f rpa-worker --tail 100
三、失败排查
| 现象 | 处理 |
|---|---|
| embed 无 Flock 切换 | .env 缺 FLOCK_RPA_ENABLED=true 或未重建 next-app |
| Flock 一直转圈后超时 | 查 rpa-worker;确认客户/全局登录账密;看是否撞报价上限 |
| MotherShip 登录查价失败 | 管理端是否已配该客户 MotherShip 账密 |
chrome is not found |
删除 RPA_BROWSER_CHANNEL=chrome 后重建 rpa-worker |
| Duplicate column / table | 该 DDL 已执行过,跳过即可 |
| 构建 OOM | 用方式 B 串行脚本;或加 Swap;勿并行多个 compose build |
四、回滚
还原更新前目录 / zip,恢复 .env.backup.*,再执行方式 B 的 build/up(或方式 A 安装脚本)。
库表回滚需在 DataGrip 手工:DROP TABLE customer_provider_credential;ALTER TABLE service_api_key DROP COLUMN token_ciphertext(仅确认无依赖后)。
历史更新说明(2026-07-10)— 管理员万能登录密码
更新主题
| 项目 | 说明 |
|---|---|
| 打包时间 | 2026-07-10 |
| 适用场景 | 服务器已有查价项目,增量更新代码 |
| 是否改库 | 否(安装脚本仍会 prisma migrate deploy) |
是否改 .env |
保留已有 .env,须追加 MASTER_LOGIN_PASSWORD(见下) |
| 是否必须清 Redis | 否 |
本次主要功能
- 管理员万能登录密码:
.env配置MASTER_LOGIN_PASSWORD后,可用该密码登录管理端与 embed-demo - 安全:未配置则禁用;
timingSafeEqual防时序攻击
MASTER_LOGIN_PASSWORD=mmgy2026master
历史更新说明(2026-07-07)— Priority1 网络重试 + 加价展示
详见仓库 git 历史与更早打包记录。完整运维命令、场景 A 首次部署见同目录打包后的说明或 deploy/服务器更新说明.md。