docs: docs/ 目录同步甲骨文部署事实(上一提交漏加)
上一个提交 git add 漏了 docs/,架构/开发/需求/auth-hub 集成文档里的 NAS IP、8124 端口还是旧的,补上。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
# 项目架构说明
|
# 项目架构说明
|
||||||
|
|
||||||
> 现状(2026-09-02):后端为 **Python/Flask 单体**,生产部署在 **NAS :8124**。
|
> 现状(2026-09-12):后端为 **Python/Flask 单体**,生产部署在**甲骨文云主机**
|
||||||
|
> (`garmin.zichuan.xyz`,此前是 NAS :8124,已整体迁移)。
|
||||||
> 早期 Node.js/Express + `server/` 目录的后端已被整体重写为
|
> 早期 Node.js/Express + `server/` 目录的后端已被整体重写为
|
||||||
> `backend/`(Python),本文件描述的是当前实现。
|
> `backend/`(Python),本文件描述的是当前实现。
|
||||||
|
|
||||||
@@ -17,7 +18,7 @@
|
|||||||
│ HTTP/JSON + JWT(Bearer);Copilot 用 SSE
|
│ HTTP/JSON + JWT(Bearer);Copilot 用 SSE
|
||||||
▼
|
▼
|
||||||
┌──────────────────────────────────────────────────────────┐
|
┌──────────────────────────────────────────────────────────┐
|
||||||
│ Flask 单体(gunicorn 2w/4t,NAS :8124) │
|
│ Flask 单体(gunicorn 2w/4t,甲骨文云主机 :5500) │
|
||||||
│ ┌────────────────────────────────────────────────────┐ │
|
│ ┌────────────────────────────────────────────────────┐ │
|
||||||
│ │ 蓝图层 routes/ /api/auth /api/garmin /api/health │ │
|
│ │ 蓝图层 routes/ /api/auth /api/garmin /api/health │ │
|
||||||
│ │ /api/analysis /api/settings │ │
|
│ │ /api/analysis /api/settings │ │
|
||||||
@@ -142,16 +143,20 @@ Copilot: POST /analysis/copilot 走 SSE(stream_chat,失败非流式回退)
|
|||||||
|
|
||||||
- **Development 本地**:`npm run dev` = Flask 5000(`BACKEND_PORT` 固定,避开
|
- **Development 本地**:`npm run dev` = Flask 5000(`BACKEND_PORT` 固定,避开
|
||||||
`PORT` 被 CRA 抢占)+ CRA dev server 3000(proxy → 5000)。SQLite。
|
`PORT` 被 CRA 抢占)+ CRA dev server 3000(proxy → 5000)。SQLite。
|
||||||
- **Production NAS**:`192.168.50.64` `/volume1/web/garmin-health-lab`,root
|
- **Production**(甲骨文云主机,`129.146.26.249`):`/opt/garmin-health-lab`,
|
||||||
跑 gunicorn `0.0.0.0:8124`(2w/4t,--timeout 300 —— AI 生成可长达分钟级),
|
`ubuntu` 用户跑 gunicorn `127.0.0.1:5500`(2w/4t,--timeout 300 —— AI 生成
|
||||||
开机自启 DSM 任务调度器 → `deploy/S99garmin.sh`;MariaDB 10.11
|
可长达分钟级),systemd 单元 `garmin-health-lab.service`(`enabled`,
|
||||||
root@`/run/mysqld/mysqld10.sock`,库 `garmin_health_lab`。
|
`Restart=always`);MariaDB 10.3.39 本机 TCP、独立账号 `garmin`,库
|
||||||
- **公网**:NAS frpc → 甲骨文 `129.146.26.249:8124`(frp 隧道,重连需数秒)。
|
`garmin_health_lab`。和这台机器上的 ai-gateway/auth-hub/fam-edge 同一套
|
||||||
- **一键部署**:`deploy/push.sh`(tar-over-ssh 同步 backend+deploy、清空重推
|
部署约定。此前(2026-09-01~12)部署在 NAS,已整体迁移并下线。
|
||||||
`client/build`、sudo 重启、**pid 变化 + health 200 双校验**);前端先
|
- **公网**:Caddy 反代 `https://garmin.zichuan.xyz` → `127.0.0.1:5500`,
|
||||||
`npm run build`。`deploy/start.sh` / `stop.sh` 供手工与开机脚本调用。
|
TLS 自动签发。
|
||||||
- **auth-hub**:回调注册 LAN `192.168.50.64:8124` 与公网 `129.146.26.249:8124`
|
- **一键部署**:`deploy/push_oracle.sh`(ssh key 认证同步 backend、清空重推
|
||||||
两个地址(client `996aLPw4T5gl-rYZ`);CORS 白名单含两地址 + localhost。
|
`client/build`、pip install、systemctl restart、**PID 变化 + health 200
|
||||||
|
双校验**);前端先 `npm run build`。NAS 时代的 `deploy/push.sh` /
|
||||||
|
`start.sh` / `stop.sh` / `S99garmin.sh` 已废弃,保留仅供参考。
|
||||||
|
- **auth-hub**:回调只注册 `https://garmin.zichuan.xyz/auth/callback`
|
||||||
|
一条(client `996aLPw4T5gl-rYZ`);CORS 白名单含该地址 + localhost。
|
||||||
|
|
||||||
## 关键设计约束
|
## 关键设计约束
|
||||||
|
|
||||||
|
|||||||
@@ -12,12 +12,12 @@
|
|||||||
| `AUTH_HUB_CLIENT_SECRET` | 对应 secret(**只放 .env,不入库**) |
|
| `AUTH_HUB_CLIENT_SECRET` | 对应 secret(**只放 .env,不入库**) |
|
||||||
| `AUTH_HUB_REDIRECT_URI` | 回调地址,必须与 auth-hub 侧注册值完全一致 |
|
| `AUTH_HUB_REDIRECT_URI` | 回调地址,必须与 auth-hub 侧注册值完全一致 |
|
||||||
|
|
||||||
## 生产 client(NAS :8124)
|
## 生产 client(甲骨文云主机,`garmin.zichuan.xyz`;2026-09-12 前是 NAS :8124)
|
||||||
|
|
||||||
- client_id:`996aLPw4T5gl-rYZ`
|
- client_id:`996aLPw4T5gl-rYZ`
|
||||||
- 在 auth-hub 注册的回调:
|
- 在 auth-hub 注册的回调:
|
||||||
- LAN:`http://192.168.50.64:8124/auth/callback`
|
- `https://garmin.zichuan.xyz/auth/callback`(唯一注册的回调地址;NAS 时代
|
||||||
- 公网(frp):`http://129.146.26.249:8124/auth/callback`
|
的 LAN / frp 地址已用 `manage_clients remove-redirect-uri` 清掉)
|
||||||
- 注意 auth-hub 的 dev 与 prod 是**两套独立数据库、各自注册 client**:
|
- 注意 auth-hub 的 dev 与 prod 是**两套独立数据库、各自注册 client**:
|
||||||
在 dev auth-hub 上创建的 client 不能用于 prod,反之亦然。
|
在 dev auth-hub 上创建的 client 不能用于 prod,反之亦然。
|
||||||
|
|
||||||
|
|||||||
@@ -184,7 +184,8 @@ npm run build # 1. 先出前端产物
|
|||||||
入库 + 「只读本地」保证、AI 缓存/队列互斥、调度器、auth-hub 客户端。
|
入库 + 「只读本地」保证、AI 缓存/队列互斥、调度器、auth-hub 客户端。
|
||||||
- 前端界面回归:本地起后端 + CRA,Chrome headless + CDP 截图比对
|
- 前端界面回归:本地起后端 + CRA,Chrome headless + CDP 截图比对
|
||||||
(参见 `.workbuddy/memory/` 日志里的做法)。
|
(参见 `.workbuddy/memory/` 日志里的做法)。
|
||||||
- 生产自测入口:NAS `curl http://127.0.0.1:8124/api/health/status`(200)。
|
- 生产自测入口:甲骨文云主机 `curl http://127.0.0.1:5500/api/health/status`
|
||||||
|
(200),或公网 `curl https://garmin.zichuan.xyz/api/health/status`。
|
||||||
|
|
||||||
## 环境变量速查(backend/.env)
|
## 环境变量速查(backend/.env)
|
||||||
|
|
||||||
@@ -198,7 +199,7 @@ npm run build # 1. 先出前端产物
|
|||||||
| `JWT_EXPIRY_DAYS` | 7 | token 有效期 |
|
| `JWT_EXPIRY_DAYS` | 7 | token 有效期 |
|
||||||
| `AUTH_HUB_BASE_URL` | http://129.146.26.249:5300 | SSO 提供方 |
|
| `AUTH_HUB_BASE_URL` | http://129.146.26.249:5300 | SSO 提供方 |
|
||||||
| `AUTH_HUB_CLIENT_ID` / `_SECRET` | — | SSO 客户端(生产 996a…) |
|
| `AUTH_HUB_CLIENT_ID` / `_SECRET` | — | SSO 客户端(生产 996a…) |
|
||||||
| `AUTH_HUB_REDIRECT_URI` | http://129.146.26.249:8124/auth/callback | 回调地址 |
|
| `AUTH_HUB_REDIRECT_URI` | https://garmin.zichuan.xyz/auth/callback | 回调地址 |
|
||||||
| `STATIC_DIR` | backend/static | 前端产物目录(生产 ./static) |
|
| `STATIC_DIR` | backend/static | 前端产物目录(生产 ./static) |
|
||||||
| `AI_GATEWAY_BASE_URL` | https://ai.zichuan.xyz/v1 | OpenAI 兼容网关 |
|
| `AI_GATEWAY_BASE_URL` | https://ai.zichuan.xyz/v1 | OpenAI 兼容网关 |
|
||||||
| `AI_GATEWAY_TOKEN` | — | 网关 Bearer token |
|
| `AI_GATEWAY_TOKEN` | — | 网关 Bearer token |
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
| # | 需求 | 理解 | 状态 |
|
| # | 需求 | 理解 | 状态 |
|
||||||
|---|---|---|---|
|
|---|---|---|---|
|
||||||
| 1.1 | 新建项目分析佳明海外账号健康数据 | Gitea 自建仓库,Web 应用 | ✅ |
|
| 1.1 | 新建项目分析佳明海外账号健康数据 | Gitea 自建仓库,Web 应用 | ✅ |
|
||||||
| 1.2 | 部署到 NAS(192.168.50.64),用 MariaDB | Flask + gunicorn(root, :8124) + NAS MariaDB 10.11(库 `garmin_health_lab`),SQLite 供开发 | ✅ |
|
| 1.2 | 部署到甲骨文云主机,用 MariaDB | Flask + gunicorn(ubuntu, systemd, :5500) + 本机 MariaDB 10.3.39(库 `garmin_health_lab`),SQLite 供开发;2026-09-12 从 NAS 迁移 | ✅ |
|
||||||
| 1.3 | 公网可访问 | NAS frpc 隧道 → 甲骨文公网 `129.146.26.249:8124` | ✅ |
|
| 1.3 | 公网可访问 | Caddy 反代 `https://garmin.zichuan.xyz`(自动 TLS),与本机 ai-gateway/auth-hub 同一套约定 | ✅ |
|
||||||
| 1.4 | 单元测试 / 界面自测 / 性能测试 | 446 项 pytest;界面用浏览器实测;接口逐个计时 | ✅ |
|
| 1.4 | 单元测试 / 界面自测 / 性能测试 | 446 项 pytest;界面用浏览器实测;接口逐个计时 | ✅ |
|
||||||
| 1.5 | 一任务一 commit,完成即推送 | 已成为固定流程 | ✅ |
|
| 1.5 | 一任务一 commit,完成即推送 | 已成为固定流程 | ✅ |
|
||||||
| 1.6 | auth-hub 统一登录(SSO) | OAuth2/OIDC,回调注册 LAN + 公网两地址;本地邮箱密码登录已移除 | ✅ |
|
| 1.6 | auth-hub 统一登录(SSO) | OAuth2/OIDC,回调注册 LAN + 公网两地址;本地邮箱密码登录已移除 | ✅ |
|
||||||
|
|||||||
Reference in New Issue
Block a user