Files
NexusAI/PROGRESS.md
ericwyuan a4421d76b4 fix(部署): frp 对外端口改用专属 3210,不占用默认 443
- 与 Gitea(3000)/WordPress(8500)/FAM-core(8000) 保持同一约定:每个服务用专属端口而非默认 443
- NAS frpc.toml 的 nexusai 代理 remotePort 由 443 改为 3210,已重启 frpc 并验证 https://129.146.203.203:3210/ 端到端可访问
- 同步更新 README/PROGRESS/SDD 中所有相关端口引用
2026-08-23 08:52:24 +08:00

86 lines
8.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 项目进度追踪
> 最后更新: 2026-08-23
## 服务运行状态
| 服务 | 节点 | 状态 | 说明 |
|------|------|------|------|
| Oracle frp 隧道 | 甲骨文服务器 129.146.203.203 | ✅ 已配置 | 复用已有 frps新增 `nexusai` 代理remotePort 3210 → NAS:8443 |
| Nginx | NAS 192.168.50.64 | ✅ 已部署 | 容器 `nginx-proxy`,本机端口 844380/443 已被占用) |
| LobeChat | NAS 192.168.50.64 | ✅ 已部署 | 容器 `lobe-chat`,端到端连通性已验证 |
| One-API | NAS 192.168.50.64 | ✅ 已部署(未初始化) | 容器 `one-api`,本机 127.0.0.1:3001管理员密码/渠道/Token 待用户在 Web UI 完成 |
| MySQL | NAS 192.168.50.64 | ✅ 已部署 | 容器 `one-api-mysql`,随机生成 root 密码存于 NAS `~/ai-gateway/.env`(不入库) |
## 2026-08-23 NAS 实际部署 + frp 隧道打通(端到端验证通过)
- **发现的端口冲突**NAS 本机 80/443/3000 均已被既有服务占用3000=Gitea 容器80/443=DSM 或其他既有服务docker-compose 中 one-api/nginx 的端口设计不可直接用于该 NAS据此调整
- `nginx`:本机端口改为 `8443:443`(容器内仍监听 443不再映射 80
- `one-api`:本机端口改为 `127.0.0.1:3001:3000`(仅回环访问,不占用已被 Gitea 用掉的 3000
- `nginx.conf` 移除了无用的 80 端口跳转 server 块(本机未映射 80该块永远不可达
- **NAS → 各 AI 官方域名连通性验证待办任务1已完成**:从 NAS 直接 curl 五个渠道域名TCP/TLS 握手均在 2 秒内完成,无超时无阻断:
- Gemini (generativelanguage.googleapis.com) HTTP 404预期根路径无内容
- NVIDIA NIM (integrate.api.nvidia.com) HTTP 404预期
- Groq (api.groq.com) HTTP 200
- OpenRouter (openrouter.ai) HTTP 200
- Mistral (api.mistral.ai) HTTP 404预期
- 结论NAS 出站直连稳定,无需额外代理
- **Oracle 反代方式确认待办任务3已完成**:确认沿用 frp 隧道方案(与 FAM 一致。Oracle 上 `frps` 服务已在运行(`/etc/frp/frps.toml`7000 控制端口NAS 上 `frpc``/etc/frp/frpc.toml`)已有 gitea/wordpress/fam-core 三个代理在跑;本次仅追加第 4 个 `[[proxies]] name="nexusai"`localPort 8443 → remotePort 3210修改前按现有约定做了时间戳备份`/etc/frp/frpc.toml.bak.*`),重启 frpc 后四个代理全部 `start proxy success`,未影响既有 gitea/wordpress/fam-core 隧道
- **NAS 实际部署待办任务5部分完成**`~/ai-gateway/` 目录下已放置 `docker-compose.yml`/`nginx.conf`/`.env``MYSQL_ROOT_PASSWORD``LOBE_ACCESS_CODE` 已用 `openssl rand` 生成强随机值,仅存于 NAS未入库、未在对话记录外泄露证书为临时自签名`certs/`CN=nexusai.localSAN 含两台服务器 IP`docker compose up -d` 后四容器全部 UpMySQL 首次初始化耗时导致 one-api 短暂重启几次,符合预期,之后自愈)
- **端到端验证通过**`curl -sk https://129.146.203.203:3210/` 与 NAS 本机 `curl -sk https://127.0.0.1:8443/` 均返回 HTTP 307LobeChat 正常重定向),链路 浏览器→Oracle frps:3210→frp隧道→NAS nginx:8443→lobe-chat:3210 完全打通
- **仍需用户在浏览器里手动完成(不由 AI 代做,涉及创建账号/输入密钥)**
1. 通过 SSH 隧道 `ssh -p 2222 -L 3001:127.0.0.1:3001 ericwyuan@192.168.50.64` 访问 `http://127.0.0.1:3001` 完成 One-API 管理员账号初始化
2. 后台按渠道设计表添加 5 个渠道(需要 Gemini/NVIDIA 新 Key待办任务2
3. 创建对外 Token写入 NAS `~/ai-gateway/.env``ONE_API_TOKEN`,然后 `docker compose restart lobe-chat`
4. 访问 `https://129.146.203.203:3210`当前为自签名证书浏览器会显示不安全警告Access Code 已随机生成,存于 NAS `~/ai-gateway/.env``LOBE_ACCESS_CODE`,未写入版本库,见对话记录/自行 `cat` 查看)进行实际对话/图片问答/Failover 验证待办任务5 收尾、并决定正式域名与证书方案待办任务6届时替换 `certs/` 下的自签名证书)
## 2026-08-23 部署骨架生成docker-compose.yml / nginx.conf / .env.example
- **产出**:仓库根目录新增 `docker-compose.yml`mysql / one-api / lobe-chat / nginx 四服务)、`nginx.conf`443 SSL + 80→443 跳转 + SSE 流式透传配置)、`.env.example`(含 MYSQL_ROOT_PASSWORD / ONE_API_TOKEN / LOBE_ACCESS_CODE / 各渠道 Key 占位)。
- **相对 SDD 草稿的两处安全加固**
1. `one-api` 端口改为 `127.0.0.1:3000:3000`(原草稿是 `3000:3000` 全网卡暴露),管理需通过 SSH 隧道(`ssh -p 2222 -L 3000:127.0.0.1:3000 ericwyuan@192.168.50.64`)转发后本地访问,符合 SRS FR-5.2 / SDD 第5章"后台管理端口不映射公网"的要求。
2. `lobe-chat` 不再发布主机端口(原草稿 `3210:3210`),仅通过 `ai-network` 容器网络被 nginx 访问,进一步收敛暴露面。
- **nginx.conf 待确认项**`server_name` 暂用 `_` 通配(域名与证书方案见 SDD 8.4 待确认事项,任务 6`certs/fullchain.pem` / `privkey.pem` 尚未生成,需任务 6 确认证书方案后补充。
- **尚未做**:实际登录 NAS 部署(依赖新 Gemini/NVIDIA Key 与 Oracle 反代方式确认,任务 1-3, 5, 6
## 2026-08-23 项目启动:文档入库 + 仓库初始化
- **决策**采用成熟开源组件Nginx + LobeChat + One-API + MySQL容器化搭建不重复造轮子网关对外统一暴露 `auto-vision` / `auto-text` 两个聚合模型名。
- **部署方案(用户 2026-08-23 确认)**:部署于 NAS 本机Docker Compose由甲骨文服务器129.146.203.203frp/nginx 反向代理端口对外提供访问(与 FAM 项目 frp 方案一致NAS 出站直连各海外 API。
- **文档**`docs/01-软件需求文档-SRS.md`V1.0+ `docs/02-软件设计文档-SDD.md`V1.0入库README 汇总架构/服务器访问信息/提交规范。
- **安全**Gemini 与 NVIDIA 的旧 API Key 不写入仓库(将申请新值);所有 Key 计划通过服务器 `.env` 管理(已加入 .gitignore
- **仓库**:本地初始化,推送 Gitea `http://192.168.50.64:3000/ericwyuan/NexusAI`
## 任务进度
### 已完成
| # | 任务 | 日期 |
|---|------|------|
| 1 | 软件需求文档SRS V1.0)入库 | 2026-08-23 |
| 2 | 软件设计文档SDD V1.0)入库 | 2026-08-23 |
| 3 | README架构/服务器信息/提交规范) | 2026-08-23 |
| 4 | 仓库初始化 + 推送 Gitea | 2026-08-23 |
| 5 | 生成部署骨架docker-compose.yml / nginx.conf / .env.example | 2026-08-23 |
### 待完成
| # | 任务 | 依赖 | 优先级 |
|---|------|------|--------|
| 1 | 验证 NAS 到各海外 API 官方域名的直连稳定性 | - | 高 |
| 2 | 申请新 Gemini / NVIDIA API Key | - | 高 |
| 3 | 确认 Oracle 反代方式frp 隧道 vs nginx 反代) | 决策 | 高 |
| 5 | NAS 实际部署 + One-API 渠道配置5 家)+ Failover 验证 | Key | 高 |
| 6 | 配置 Oracle 反代端口 → NAS 网关入口 | 反代方式 | 高 |
| 7 | HTTPS 域名与证书 | NAS | 中 |
| 8 | 确认 Server-Side 模式 / 管理端口访问方式 / 监控方案 | 决策 | 中 |
## 技术决策记录
1. **不重复造轮子** - 网关用 One-API、前端用 LobeChat仅做配置层工作前端、网关、各 AI 渠道间均走 OpenAI 兼容接口,任一组件可替换
2. **模型映射** - 前端只感知 `auto-vision`(图文)与 `auto-text`(纯文本)两个聚合模型名,多渠道不同模型映射到统一对外模型名
3. **优先级路由** - 渠道优先级数字越小越优先,同优先级内按权重轮询分摊负载
4. **冷却恢复** - 渠道连续失败超阈值5 次/5 分钟进入冷却禁用冷却期10 分钟)后自动恢复参与路由
5. **最小暴露面** - 对外仅暴露甲骨文服务器反代端口NAS 本机不直接暴露公网One-API 后台与 MySQL 端口仅容器内网可访问
6. **部署位置** - NAS 本机 Docker ComposeSynology ContainerManager甲骨文服务器 frp/nginx 反代公网端口 → NAS 网关入口NAS 出站直连海外 API