---
date: 2026-05-03
topic: dev 环境 itadmin 登录失败 / db:seed 与 init:itadmin 的漂移
tags: [dev-env, seed, auth, itadmin, doc-drift]
---

## 现象

UAT 同机 dev 环境（`workspace.dev.faradayfuturecn.com`）用 `itadmin` / `Admin@2024` 登录直接 401，
后端日志 8-10ms 即返回 `UnauthorizedException - Invalid credentials`，**没调 LDAP**。

## 根因

`backend/prisma/seed.ts` （`db:seed` 入口）**不创建 itadmin**——它只做：
IAM、Positions、PartGroups、DingTalk Sync、SyncBot、Robot FieldDefs、AI Tool Grants。

itadmin 只能由 `scripts/backend/init/init-itadmin.ts`（`npm run init:itadmin`）创建。

dev 环境每周自动 reset + `db:seed` 后，itadmin 就丢了。库里 LOCAL 类型只剩 `sync-bot`。

## 与 CLAUDE.md 的漂移（重要）

`CLAUDE.md` "本地启动约定" 段写：
> `cd backend && npm run db:seed`  ← 首次/空库必须：种入权限/角色/组织/测试用户（含 itadmin）

并说 `init:itadmin` 已废弃。**实际代码不一致**：`db:seed` 不种 itadmin，废弃的脚本仍是唯一创建途径。

## 修复（本次执行）

```bash
ssh ubuntu@43.153.69.73
export PATH=$HOME/.nvm/versions/node/v20.20.2/bin:$PATH
cd /srv/apps/ffworkspace-dev/backend
npm run init:itadmin
```

`backend/.env` 是 `../.env.dev` 软链，所以脚本自动写 dev 库（`ffws-dev-postgres`，端口 5002）。
执行后立即验证：

```bash
docker exec ffws-dev-postgres psql -U ffws_dev -d ffws_dev -tAc \
  "SELECT username, source, status FROM platform_iam.users WHERE username='itadmin';"
# itadmin|LOCAL|ACTIVE
```

## 该沉淀的两件事

### 1. dev 共用 UAT 机器，但进程/库都隔离

| 维度 | dev | UAT |
|---|---|---|
| SSH | 同台 `ubuntu@43.153.69.73` | 同台 |
| 部署目录 | `/srv/apps/ffworkspace-dev/` | `/srv/apps/ffworkspace-test/` |
| PM2 进程 | `ffws-dev-{backend,frontend,backend-temporal-worker}` | `ffws-uat-*` |
| Postgres 容器 | `ffws-dev-postgres`（端口 5002，库 `ffws_dev`，用户 `ffws_dev`） | `ffws-uat-postgres` |
| env | `.env.dev`（`backend/.env` `frontend/.env` 都软链到它） | `.env.uat` |
| 域名 | `workspace.dev.faradayfuturecn.com` | `ffworkspace.test.faradayfuture.com` |
| 部署触发 | push `develop` → `deploy-dev.yml` | push `staging` → `deploy-uat.yml` |

dev 库 schema 用 `@@map` 分到 `platform_iam` / `platform_audit` 等多个 schema 下，
不在 `public`。查表得带 schema 前缀：`platform_iam.users` 而非 `users`。
默认 postgres 角色不存在，连接用 `-U ffws_dev -d ffws_dev`。

### 2. SSH 远程跑 npm 脚本必须导 PATH

`pm2`/`npm`/`node` 都装在 `~/.nvm/versions/node/v20.20.2/bin/`。
非交互 ssh 不读 `.bashrc` 的 nvm init，命令找不到。固定前缀：

```bash
ssh ubuntu@43.153.69.73 'export PATH=$HOME/.nvm/versions/node/v20.20.2/bin:$PATH && <cmd>'
```

`bash -lc` 在这台机器上也不行（验证过），nvm 不是通过 login profile 加载的。

## 后续建议（未做）

- 修 `seed.ts`：把 itadmin 创建合进 `db:seed`，让 dev 自动 reset 后立刻可登
- 同步修 `CLAUDE.md` 把 "（含 itadmin）" 删掉，或者真的把它种进去
- 顺手观察到 `ffws-dev-backend-temporal-worker` 重启 770 次、uptime 1s，独立排查
