# 我们有 5 个部署环境，不是 2 个

**日期**: 2026-05-16
**触发**: PR #389 加新 env var `NEXT_PUBLIC_FFCTK_INSTALL_URL`，我只 SSH 改了 FFAI UAT + FFAI PROD 就以为完了。
user 直接问"我们一共有 5 个环境，你都加上了吗" — 漏了 3 个。

## 5 个环境清单（事实）

来源：`docs/ops/01-server-infrastructure.md` §1 + §2 + §3

| # | 产品 | 环境 | SSH | env 文件 |
|---|---|---|---|---|
| 1 | FFAI Workspace | **Test**（develop auto-deploy） | `ubuntu@170.106.161.71` | `/srv/apps/ffworkspace-test/.env.test` |
| 2 | FFAI Workspace | **UAT**（staging） | `ubuntu@43.153.69.73` | `/srv/apps/ffworkspace-test/.env.uat` |
| 3 | FFAI Workspace | **Production** | `srvadmin@43.130.6.44` | `/srv/apps/ffworkspace/.env.pro` |
| 4 | AIxC Workspace | **UAT**（staging） | `itadminaixc@52.234.29.56` | `/srv/apps/aixcworkspace/.env.uat` |
| 5 | AIxC Workspace | **Production** | `itadminaixc@23.101.202.65` | `/srv/apps/aixcworkspace/.env.pro` |

**两套产品共用同一个 Gitea repo + 同一份代码**，靠分支 + 环境变量区分。任何新增 env var 默认要 5 处全配。

## 我的 memory 之前错在哪

之前的 `reference_ffoa_deploy_env.md` 只列了 FFAI UAT + FFAI PROD 两台。原因：那个 memory 是早期 SSH 调试时记录的，2026-04 PR #272 把 Test 从 UAT 拆出独立机器（170.106.161.71），AIxC 那套也是后来加的，没追加进 memory。

## 修正

我已经把 5 处全部 SSH 追加 `NEXT_PUBLIC_FFCTK_INSTALL_URL` 占位 + PENDING 注释。

同时**该 memory 已过时**，需要重写。下方是新清单（替换上一版 reference_ffoa_deploy_env.md）。

## 给将来 AI 的 checklist：新增 env var 必跑

```bash
# 0. 仓库模板
edit .env.example  → 加 var + 注释

# 1. FFAI Test
ssh ubuntu@170.106.161.71 'cd /srv/apps/ffworkspace-test && cp .env.test .env.test.bak.$(date +%Y%m%d-%H%M) && echo "NEW_VAR=val" >> .env.test'

# 2. FFAI UAT
ssh ubuntu@43.153.69.73 'cd /srv/apps/ffworkspace-test && cp .env.uat .env.uat.bak.$(date +%Y%m%d-%H%M) && echo "NEW_VAR=val" >> .env.uat'

# 3. FFAI Prod
ssh srvadmin@43.130.6.44 'cd /srv/apps/ffworkspace && cp .env.pro .env.pro.bak.$(date +%Y%m%d-%H%M) && echo "NEW_VAR=val" >> .env.pro'

# 4. AIxC UAT
ssh itadminaixc@52.234.29.56 'cd /srv/apps/aixcworkspace && cp .env.uat .env.uat.bak.$(date +%Y%m%d-%H%M) && echo "NEW_VAR=val" >> .env.uat'

# 5. AIxC Prod
ssh itadminaixc@23.101.202.65 'cd /srv/apps/aixcworkspace && cp .env.pro .env.pro.bak.$(date +%Y%m%d-%H%M) && echo "NEW_VAR=val" >> .env.pro'
```

每处都要 `cp .env.X .env.X.bak.$(date +%Y%m%d-%H%M)` 备份；不重启 pm2（让用户决定时间窗）。

## 元规则提炼

**任何 "对所有环境做 X" 的请求**，先 `cat docs/ops/01-server-infrastructure.md | grep -E "^### " | head` 列全环境清单，再行动。不要凭脑子里的"两个常用环境"做事 — FFOA 实际有 5 个。
