docs(部署方案): 同步 NAS+甲骨文反代决策 + 生成部署骨架
- SRS/SDD/README/PROGRESS 统一将部署目标由"美国服务器"更正为"NAS 本机 + 甲骨文服务器反向代理"(此前已确认但未入库) - 新增 docker-compose.yml / nginx.conf / .env.example(对应待办任务4) - 相对 SDD 草稿的安全加固:one-api 端口改绑 127.0.0.1(原为公网端口映射),lobe-chat 不再发布主机端口,仅走容器内网
This commit is contained in:
49
README.md
49
README.md
@@ -8,7 +8,7 @@
|
||||
|
||||
## 1. 项目简介与设计目标
|
||||
|
||||
公司内网直连 NVIDIA NIM、Gemini 等免费大模型 API 不稳定,本系统部署在美国服务器上,聚合 5 家免费多模态 API(Gemini、NVIDIA NIM、Groq、OpenRouter、Mistral),通过 One-API 网关统一路由,实现"一个渠道不可用自动切换下一个"的高可用能力,并提供接近 Gemini 首页体验的 Web 对话界面(LobeChat),支持图片 + 文字混合输入问答。
|
||||
公司内网直连 NVIDIA NIM、Gemini 等免费大模型 API 不稳定,本系统**部署在 NAS 本机**(Docker Compose),聚合 5 家免费多模态 API(Gemini、NVIDIA NIM、Groq、OpenRouter、Mistral),通过 One-API 网关统一路由,实现"一个渠道不可用自动切换下一个"的高可用能力,并提供接近 Gemini 首页体验的 Web 对话界面(LobeChat),支持图片 + 文字混合输入问答;对外由**甲骨文服务器(129.146.203.203)反向代理端口**提供访问(与 FAM 项目 frp 方案一致)。
|
||||
|
||||
### 1.1 核心价值
|
||||
|
||||
@@ -29,16 +29,20 @@
|
||||
浏览器 / 移动端浏览器(公司内网)
|
||||
│ HTTPS (443)
|
||||
▼
|
||||
Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端,:3210)──► One-API(网关,:3000 仅内网)──► MySQL
|
||||
│
|
||||
┌──────────────┬──────────────┬──────────────┐
|
||||
▼ ▼ ▼ ▼
|
||||
Gemini NVIDIA NIM Groq OpenRouter Mistral
|
||||
甲骨文服务器(129.146.203.203)—— frp/nginx 反代端口(对外统一入口)
|
||||
│ 反代 / 隧道(frp)
|
||||
▼
|
||||
NAS 本机(Docker 宿主机)
|
||||
├─ Nginx(HTTPS 终止,流式透传)──► LobeChat(:3210)──► One-API(:3000 仅内网)──► MySQL
|
||||
│
|
||||
▼ NAS 出站直连海外 API
|
||||
Gemini · NVIDIA NIM · Groq · OpenRouter · Mistral
|
||||
```
|
||||
|
||||
| 层级 | 组件 | 职责 |
|
||||
|---|---|---|
|
||||
| 接入层 | Nginx | HTTPS 终止、反向代理、访问入口统一 |
|
||||
| 反代层 | 甲骨文服务器 | frp/nginx 反向代理端口,对外统一访问入口 |
|
||||
| 接入层 | Nginx | HTTPS 终止、反向代理(NAS 本机) |
|
||||
| 表现层 | LobeChat | 对话界面渲染、图片上传、Access Code 鉴权、对话历史(IndexedDB) |
|
||||
| 网关层 | One-API | 协议转换、渠道路由、Failover、用量统计 |
|
||||
| 数据层 | MySQL | 渠道配置 / Token / 调用日志持久化 |
|
||||
@@ -71,7 +75,9 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
|
||||
## 3. 部署概览
|
||||
|
||||
- **方式**:单机 Docker Compose,所有服务在同一 `ai-network` 内,仅 Nginx 80/443 对公网暴露
|
||||
- **部署位置**:NAS 本机(Synology DSM 7,Docker Compose / ContainerManager)
|
||||
- **对外访问**:甲骨文服务器(129.146.203.203)frp/nginx 反向代理端口 → NAS 的 Nginx 443
|
||||
- **方式**:所有服务在同一 `ai-network` 内,仅 Nginx 80/443 对局域网暴露
|
||||
- **目录结构**:`docker-compose.yml` / `.env`(敏感变量,不入库)/ `nginx.conf` / `certs/` / `one-api-data/` / `mysql-data/`
|
||||
- **详细部署步骤**:见 [SDD 第 6 章](docs/02-软件设计文档-SDD.md#6-部署设计)
|
||||
|
||||
@@ -79,13 +85,14 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
|
||||
| 服务 | 镜像 | 端口 | 说明 |
|
||||
|---|---|---|---|
|
||||
| nginx | nginx:alpine | 80/443(公网) | HTTPS 终止、反向代理 |
|
||||
| nginx | nginx:alpine | 80/443(NAS 局域网) | HTTPS 终止、反向代理 |
|
||||
| lobe-chat | lobehub/lobe-chat:latest | 3210(内网) | 前端对话界面 |
|
||||
| one-api | justsong/one-api:latest | 3000(内网) | 网关聚合层 |
|
||||
| mysql | mysql:8.0 | 3306(内网) | One-API 数据存储 |
|
||||
|
||||
### 3.2 安全要点
|
||||
|
||||
- 对外仅暴露甲骨文服务器反代端口,NAS 本机不直接暴露公网
|
||||
- One-API 后台端口(3000)不映射公网,远程管理走 SSH 隧道 / VPN
|
||||
- 所有 API Key 通过服务器 `.env` 注入容器环境变量,`.env` 不入库(见 [SDD 第 5 章](docs/02-软件设计文档-SDD.md#5-安全设计))
|
||||
- 前端强制 `ACCESS_CODE` 校验;Nginx 全站 HTTPS
|
||||
@@ -94,7 +101,7 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
|
||||
## 4. 服务器访问信息
|
||||
|
||||
### 4.1 Synology NAS(FAM-Core + FAM-UI + MariaDB + Gitea)
|
||||
### 4.1 Synology NAS(AI 网关部署目标 + FAM + Gitea)
|
||||
|
||||
| 项目 | 值 |
|
||||
|---|---|
|
||||
@@ -114,7 +121,7 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
| Root 密码 | iLoveJava5! |
|
||||
| 连接 | `/usr/local/mariadb10/bin/mysql -S /run/mysqld/mysqld10.sock -u root -p` |
|
||||
|
||||
### 4.3 Oracle Cloud(FAM-Edge + Ollama + FFmpeg)
|
||||
### 4.3 Oracle Cloud(反代层,129.146.203.203)
|
||||
|
||||
| 项目 | 值 |
|
||||
|---|---|
|
||||
@@ -123,6 +130,7 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
| 系统 | aarch64 (Ampere A1 2C12G), Ubuntu 20.04 LTS |
|
||||
| Tailscale | 100.74.137.126(已安装在线,与 NAS 端口不通) |
|
||||
| 登录命令 | `ssh -i ~/.ssh/oracle_sentinel ubuntu@129.146.203.203` |
|
||||
| 反代职责 | frp/nginx 反代公网端口 → NAS AI 网关入口 |
|
||||
|
||||
### 4.4 Gitea 代码仓库
|
||||
|
||||
@@ -131,15 +139,13 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
| URL | http://192.168.50.64:3000/ericwyuan/NexusAI |
|
||||
| 账号 / 密码 | ericwyuan / iLoveJava5 |
|
||||
|
||||
> 美国服务器(AI 网关部署目标)访问信息待补充。
|
||||
|
||||
---
|
||||
|
||||
## 5. AI 渠道 API Key(服务器 `.env` 管理,不入库)
|
||||
|
||||
> ⚠️ Gemini 与 NVIDIA 的 Key 将申请新值,此处不写入旧 Key,配置于美国服务器 `.env` 的占位变量。
|
||||
> ⚠️ Gemini 与 NVIDIA 的 Key 将申请新值,此处不写入旧 Key,配置于 NAS `.env` 的占位变量。
|
||||
|
||||
| 渠道 | 模型 / 端点 | Key 环境变量(服务器 .env) |
|
||||
| 渠道 | 模型 / 端点 | Key 环境变量(NAS .env) |
|
||||
|---|---|---|
|
||||
| Gemini | `generativelanguage.googleapis.com/v1beta`,模型 `gemini-flash-latest` | `${GEMINI_API_KEY}`(新 Key 待申请) |
|
||||
| NVIDIA NIM | `integrate.api.nvidia.com/v1`,默认 `meta/llama-3.2-11b-vision-instruct` | `${NVIDIA_API_KEY}`(新 Key 待申请) |
|
||||
@@ -147,7 +153,7 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
| OpenRouter | `openrouter.ai/api/v1` | `${OPENROUTER_API_KEY}` |
|
||||
| Mistral | `api.mistral.ai/v1` | `${MISTRAL_API_KEY}` |
|
||||
|
||||
> 各渠道 Key 申请后填入美国服务器 `.env`,One-API 后台添加渠道时引用,切勿提交版本库。
|
||||
> 各渠道 Key 申请后填入 NAS `.env`,One-API 后台添加渠道时引用,切勿提交版本库。
|
||||
|
||||
---
|
||||
|
||||
@@ -183,12 +189,13 @@ Nginx(反向代理,HTTPS 终止,流式透传)──► LobeChat(前端
|
||||
|
||||
| # | 任务 | 优先级 |
|
||||
|---|------|--------|
|
||||
| 1 | 申请美国服务器,确认访问信息 | 高 |
|
||||
| 1 | 验证 NAS 到各海外 API 官方域名的直连稳定性 | 高 |
|
||||
| 2 | 申请新 Gemini / NVIDIA API Key | 高 |
|
||||
| 3 | 确认 HTTPS 域名与证书方案 | 中 |
|
||||
| 4 | 生成部署骨架(docker-compose.yml / nginx.conf / .env.example) | 高 |
|
||||
| 5 | 实际部署 + One-API 渠道配置 + Failover 验证 | 高 |
|
||||
| 6 | 确认 Server-Side 模式 / 管理端口访问方式 / 监控方案 | 中 |
|
||||
| 3 | 确认 Oracle 反代方式(frp 隧道 vs nginx 反代) | 高 |
|
||||
| 4 | ~~生成部署骨架(docker-compose.yml / nginx.conf / .env.example)~~ 已完成 | 高 |
|
||||
| 5 | NAS 实际部署 + One-API 渠道配置 + Failover 验证 | 高 |
|
||||
| 6 | 确认 HTTPS 域名与证书方案 | 中 |
|
||||
| 7 | 确认 Server-Side 模式 / 管理端口访问方式 / 监控方案 | 中 |
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user