# ERR-20260516-002 — test 服务器 PoC infra 未迁移，nginx vs Caddy 端口冲突

## 现象

按 `docs/modules/internal-app-platform/08-phase-0-poc-runbook.md` 准备在 test 服务器 `170.106.161.71` 跑 L3 PoC，盘点发现：

- ✅ DNS `*.apps.ffworkspace.test.faradayfuturecn.com → 170.106.161.71` 已生效
- ✅ MCP endpoint `https://ffworkspace.test.faradayfuturecn.com/api/v1/internal-apps/mcp` 通（PR #368 后端代码已部署）
- ❌ Caddy 未安装（runbook 用 Caddy 反代 *.apps）
- ❌ `/srv/internal-apps/` 数据目录未创建
- ❌ `ffoa-deploy` CLI 未安装
- ❌ `ffoa-sweep-expired-apps.timer` 未启用
- ❌ MinIO 备份桶未配（Litestream 落地依赖）

直接跑 `scripts/internal-app-platform/setup-test-server.sh` 又有冲突：
- 脚本起 `ffoa-caddy` 容器绑 `:80/:443/:2019`
- test 服务器 nginx 已占 `:80/:443`（serving `ffworkspace.test.faradayfuturecn.com` 主体）

## 根因

R10–R12 commit 序列（PR #379 / `7620fae4` / `57c13b1e` / `2fe2e1d6`）做的是**域名拓扑切换 + docs/code 漂移修复**，把 Phase 0 dev 沙箱 `43.166.182.155` → Phase 1 三环境（test/UAT/prod）。**但 PoC infra 本身（Caddy 容器化 / nginx 共存 / 部署 CLI 安装 / sweep timer enable / MinIO setup）在新拓扑下的运维步骤没有同步落地**：

- `setup-test-server.sh` 还假设"全新 sandbox、Caddy 独占 80/443"
- 没有"和已有 nginx 共存"方案（Caddy 走高端口 + nginx 用 Host header 分流？还是替换 nginx？还是用 nginx 直接反代到容器？）
- 11-dns-tls-rollout.md 只覆盖 DNS + TLS 切换，不覆盖 PoC infra 安装

## 处理建议

L3 PoC 在 test 服务器跑通**不是几分钟能解的运维迁移**，至少要：

1. **决策**：nginx 是否替换为 Caddy？或保留 nginx 反代 `*.apps.*` 到 Caddy 高端口？或 nginx 直接反代到容器（去 Caddy 化）？
2. **改造 setup-test-server.sh**：让脚本根据"是否已有 nginx"分支化，或者拆出 `setup-with-nginx.sh` 变体
3. **补 11-dns-tls-rollout.md**：加 PoC infra 安装段（Caddy 端口、systemd timer、`/srv/internal-apps` 目录、MinIO 桶创建）
4. **MinIO 不重复部署**：test 服务器已有 `ffws-test-minio:5090/5091`，PoC 应复用而不是重建

短期解法（绕过 test 服务器）：
- 走 L1 集成测试（不依赖 Caddy / `/srv/internal-apps` / `ffoa-deploy`）
- L2 MCP E2E 走"我的 Apps" 4 个场景（仅依赖前端 + 后端 API + DB，不依赖部署链路）
- L3 PoC 留在 dev 沙箱 `43.166.182.155`（如还在），或开 issue 排期改造

## 复用建议

- **域名/DNS 切换≠ 运维栈迁移**。下一次跨服务器拓扑变更要在 PR 里同步评估"目标服务器是否具备所有依赖（反向代理 / 数据目录 / CLI / 定时任务 / 对象存储桶）"，缺哪个补哪个，否则文档说"测试服"但实际是空骨架。
- **`setup-*.sh` 脚本要在头部声明假设**（"假设宿主无 nginx/Apache 占 :80"），跑前 fail-fast 检查，免得在生产环境炸。
- **前置环境检查清单**应该是 runbook 第一段，AI 跑 PoC 前能一眼判断"现在能不能跑"，而不是按步骤跑到第 4 步才发现根本没 Caddy。

## 关联

- ERR-20260516-001（同一次发现：test 服务器 internal-app env 也没补）—— 同根因，PR merge 后没把 test 服务器同步推到"可用"状态
- CLAUDE.md §5a 生产只读：本次仅做读操作判定 + 写少量 env 配置，没碰 nginx / 没装 Caddy（**符合**"高风险动作先停下来"）
- 11-dns-tls-rollout.md（待补 PoC infra 安装段）
