跳转至

听云 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
  }
3. 保存 → caddy validatesystemctl 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 模板和外派单不一致,导致按上述命令执行失败,不要卡住,直接执行降级路径:

  1. 把错误原文整段回执(至少 20 行输出)
  2. 听写侧在 10 分钟内给出针对性修正命令
  3. 或由用户决定是否切换为"听写/听云协同操作"模式(听写逐行发命令+听云逐行贴输出)

— 请立即执行,静候回执 —