听云 OCM · 二次跟进通知(立即执行 B1+B2)¶
| 字段 | 值 |
|---|---|
| 通知编号 | OCL-FOLLOWUP-20260827-01 |
| 发件方 | 听写 DT(用户指令"请安排听云继续"触发) |
| 收件方 | 听云 OCM |
| 通知时间 | 2026-08-27 |
| 优先级 | 🔴 高 · 请立即处理 |
| 关联外派单 | OCL-TASK-L-20260827-01(B1+B2 完整操作手册) |
| 关联催办单 | OCL-URGENT-20260827-01(30 分钟回执要求) |
| 关联 DTL | L-20260827-02(本方协作归档) |
一、核心指令(请先读本条)¶
用户明确要求"安排听云继续"。请听云现在立即 SSH ECS 执行 B1+B2(预计耗时 ≤ 10 分钟)。
无需先回复"收到"再做。直接执行 → 做完回传 A1~A6 结果即可(回执模板见 §四,复制粘贴填值 30 秒搞定)。 若执行中遇阻塞 → 立刻把错误原文贴回,听写侧同步协调资源,不用自己硬扛。
二、B1 启动 mfr-portal(直接复制执行,4 条一气呵成)¶
# B1-1~B1-4(复制整块粘贴到 ECS,A1-A3 断言在输出里直接看)
systemctl enable --now mfr-portal.service && \
echo "=== A1 is-active ===" && systemctl is-active mfr-portal.service && \
echo "=== A2 :3000 LISTEN ===" && ss -tlnp | grep ':3000' && \
echo "=== A3 localhost:3000 HTTP ===" && curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:3000/
B1 通过标准(3 条同时满足):
- A1 输出 = active
- A2 输出含 LISTEN + node
- A3 输出 = 200
B1 失败一键诊断(任选一条取错误原文回执即可):
journalctl -u mfr-portal.service -n 50 --no-pager 2>&1 | tail -20
cat /var/log/mfr-portal.err 2>&1 | tail -20
ls -la /opt/dip1/dip1/frontend/apps/mfr-portal/.next/standalone/apps/mfr-portal/server.js
三、B2 Caddy /mfr/ 反代(关键:插入位置在 /admin/ 紧前面)¶
步骤 1:备份 → 用 sed 一键插入(无需手动打开文件)¶
以下 sed 命令在「
handle /admin/*注释行」的紧前面插入 MFR 块,避免顺序错误。 执行前先 grep 确认插入锚点存在(ECS 上的 Caddyfile 结构应与模板一致):
# B2-0 确认锚点存在(应输出含 OPR-Admin Next.js 的注释行,输出 1 行 = OK)
grep -n "OPR-Admin Next.js" /etc/caddy/Caddyfile
# ↑ 记住行号(例:46 行),下面命令用 LINE_NO=行号-1(即插入到 45 行之后=46 行之前)
# B2-1 备份
cp /etc/caddy/Caddyfile /etc/caddy/Caddyfile.bak.$(date +%Y%m%d%H%M%S) && ls /etc/caddy/Caddyfile.bak.* | tail -1
# B2-2 用 sed 插入(把 <LINE_NO> 替换成 B2-0 的行号减 1,例:46 行 → 45)
LINE_NO=<替换成行号-1> # 例:LINE_NO=45
sed -i "${LINE_NO}a\\ # ========== MFR-Portal Next.js(handle_path 剥离 /mfr 前缀) ==========\n handle_path /mfr/* {\n reverse_proxy http://127.0.0.1:3000\n }\n" /etc/caddy/Caddyfile
# B2-2b 验证插入成功(应输出 handle_path /mfr/* 且在 handle /admin/* 之前)
grep -n "handle_path /mfr/\|handle /admin/\|handle_path /dl/" /etc/caddy/Caddyfile
# ↑ 顺序必须是:/dl/* 在前 → /mfr/* 居中 → /admin/* 在后(/mfr/* 必须在 /admin/* 之上!)
# B2-3 语法校验
caddy validate --config /etc/caddy/Caddyfile 2>&1 | tail -3
# ↑ 必须含 "valid configuration",否则别 reload!
# B2-4 热重载
systemctl reload caddy && echo "reload OK"
# B2-5 三条断言(A4~A6)
echo "=== A4 /mfr/ root ===" && curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1/mfr/
echo "=== A5 /mfr/login ===" && curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1/mfr/login
echo "=== A6 不含 /admin/_next/(期望=0) ===" && curl -s http://127.0.0.1/mfr/ | grep -c '/admin/_next/'
步骤 2:sed 插入失败的兜底方案(手动 30 秒)¶
如果 sed 由于换行/编码问题插入异常,直接用 nano/vim 打开:
1. 搜索 # ========== OPR-Admin Next.js
2. 在这行注释的上面空一行,整块粘贴:
# ========== MFR-Portal Next.js(handle_path 剥离 /mfr 前缀) ==========
handle_path /mfr/* {
reverse_proxy http://127.0.0.1:3000
}
caddy validate → systemctl reload caddy → A4~A6 断言
四、完成回执(最简格式,复制粘贴填值,30 秒搞定)¶
[听云执行完成回执 OCL-FOLLOWUP-20260827-01]
A1(active) = ______
A2(:3000) = ______(填 LISTEN 或 NO)
A3(:3000码) = ______(填 200/其他)
A4(/mfr/码) = ______(填 200/其他)
A5(/mfr/login)= ______(填 200/其他)
A6(admin_next)= ______(填 0/1+/N/A)
OCL编号 = L-YYYYMMDD-NN
时间戳 = YYYY-MM-DD HH:MM
备注/阻塞 = ______(无填 N/A,有贴错误原文)
6 断言全部通过(A1=active, A2=LISTEN, A3=200, A4=200, A5=200, A6=0)→ 听写立即启动 D01 公网回归 4 项。
五、超时/异常一键降级路径¶
如果 ECS 上的 systemd unit 或 Caddyfile 模板和外派单不一致,导致按上述命令执行失败,不要卡住,直接执行降级路径:
- 把错误原文整段回执(至少 20 行输出)
- 听写侧在 10 分钟内给出针对性修正命令
- 或由用户决定是否切换为"听写/听云协同操作"模式(听写逐行发命令+听云逐行贴输出)
— 请立即执行,静候回执 —