docs: 文档/配置/测试同步 NAS :8124 生产现状,清除 Node.js 与甲骨文残留

背景:文档停在 Node.js 时代或甲骨文 8123 部署,与生产(NAS :8124 + Flask +
auth-hub + ai-gateway)严重脱节,曾导致凭旧记忆误判'无线上环境'。

- CLAUDE.md 重写:技术栈/结构/命令/部署事实/关键坑(F7 button、UTC 日期、
  429 退避以 DB 为准、迁移幂等、AI 生成耗时)
- docs/ARCHITECTURE.md 重写为 Flask 蓝图+services+可插拔数据层 + NAS 部署
- docs/DEVELOPMENT.md 重写为 Flask/CRA 开发指南 + push.sh 部署流程
- docs/REQUIREMENTS.md:部署条目改 NAS 8124;补 auth-hub/AI 教练/新修复
- docs/AUTH_HUB_INTEGRATION.md 新增(补 .env.example 悬空引用)
- README.md:技术栈/DB/auth-hub/API 清单/部署节修正
- backend/config.py 与 .env.example:AUTH_HUB_REDIRECT_URI 默认 8123→8124,
  MariaDB 注释 Oracle→NAS
- tests:GatewayCourtesy 并发测试对齐 MAX_CONCURRENT(AI_JOB_CONCURRENCY=2);
  conftest 禁用 create_app 后台队列线程,修整库测试 flaky(585 passed)
This commit is contained in:
ericwyuan
2026-09-02 19:34:32 +08:00
parent 68363957ec
commit 2d9a2be185
12 changed files with 609 additions and 496 deletions

View File

@@ -0,0 +1,33 @@
# auth-hub 集成说明
本应用不自己管账号——登录由 **auth-hub**(统一 SSO / OIDC 提供方)承接,
本仓库只做 OAuth2 client 侧的事。
## 依赖的配置backend/.env
| 变量 | 说明 |
|---|---|
| `AUTH_HUB_BASE_URL` | auth-hub 服务地址(生产 `http://129.146.26.249:5300` |
| `AUTH_HUB_CLIENT_ID` | 本应用在 auth-hub 注册的 client |
| `AUTH_HUB_CLIENT_SECRET` | 对应 secret**只放 .env不入库** |
| `AUTH_HUB_REDIRECT_URI` | 回调地址,必须与 auth-hub 侧注册值完全一致 |
## 生产 clientNAS :8124
- client_id`996aLPw4T5gl-rYZ`
- 在 auth-hub 注册的回调:
- LAN`http://192.168.50.64:8124/auth/callback`
- 公网frp`http://129.146.26.249:8124/auth/callback`
- 注意 auth-hub 的 dev 与 prod 是**两套独立数据库、各自注册 client**
在 dev auth-hub 上创建的 client 不能用于 prod反之亦然。
## 流程
1. 前端请求 `POST /api/auth/auth-hub/start` → 拿到 auth-hub 授权 URL浏览器跳转
2. auth-hub 登录后回调 `GET /api/auth/callback?code=…`
3. 后端 `services/auth_hub_client.py``exchange_code_for_token`(换 token
`get_userinfo``find_or_create_user`(无则建号)→ 本应用签 JWT 返回前端。
本地邮箱/密码注册登录(曾经的 `/api/auth/register|login`**已移除**。
Garmin 账号授权是另一条独立流程(见 routes/garmin.py 的 `/api/garmin/login`
与 Web 登录无关。