diff --git a/PROGRESS.md b/PROGRESS.md index bfb458e..2f4d0d4 100644 --- a/PROGRESS.md +++ b/PROGRESS.md @@ -6,7 +6,7 @@ | 服务 | 节点 | 状态 | 说明 | |------|------|------|------| -| Oracle frp 隧道 | 甲骨文服务器 129.146.203.203 | ✅ 已配置 | 复用已有 frps;新增 `nexusai` 代理,remotePort 443 → NAS:8443 | +| Oracle frp 隧道 | 甲骨文服务器 129.146.203.203 | ✅ 已配置 | 复用已有 frps;新增 `nexusai` 代理,remotePort 3210 → NAS:8443 | | Nginx | NAS 192.168.50.64 | ✅ 已部署 | 容器 `nginx-proxy`,本机端口 8443(80/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 完成 | @@ -25,14 +25,14 @@ - 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 443),修改前按现有约定做了时间戳备份(`/etc/frp/frpc.toml.bak.*`),重启 frpc 后四个代理全部 `start proxy success`,未影响既有 gitea/wordpress/fam-core 隧道 +- **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.local,SAN 含两台服务器 IP),`docker compose up -d` 后四容器全部 Up(MySQL 首次初始化耗时导致 one-api 短暂重启几次,符合预期,之后自愈) -- **端到端验证通过**:`curl -sk https://129.146.203.203/` 与 NAS 本机 `curl -sk https://127.0.0.1:8443/` 均返回 HTTP 307(LobeChat 正常重定向),链路 浏览器→Oracle frps:443→frp隧道→NAS nginx:8443→lobe-chat:3210 完全打通 +- **端到端验证通过**:`curl -sk https://129.146.203.203:3210/` 与 NAS 本机 `curl -sk https://127.0.0.1:8443/` 均返回 HTTP 307(LobeChat 正常重定向),链路 浏览器→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`(当前为自签名证书,浏览器会显示不安全警告;Access Code 已随机生成,存于 NAS `~/ai-gateway/.env` 的 `LOBE_ACCESS_CODE`,未写入版本库,见对话记录/自行 `cat` 查看)进行实际对话/图片问答/Failover 验证(待办任务5 收尾)、并决定正式域名与证书方案(待办任务6,届时替换 `certs/` 下的自签名证书) + 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 diff --git a/README.md b/README.md index 542fc7f..94f0aa5 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,9 @@ ``` 浏览器 / 移动端浏览器(公司内网) - │ HTTPS (443) + │ HTTPS (3210) ▼ -甲骨文服务器(129.146.203.203)—— frp/nginx 反代端口(对外统一入口) +甲骨文服务器(129.146.203.203)—— frp 隧道专属端口 3210(对外统一入口) │ 反代 / 隧道(frp) ▼ NAS 本机(Docker 宿主机) @@ -76,7 +76,7 @@ NAS 本机(Docker 宿主机) ## 3. 部署概览 - **部署位置**:NAS 本机(Synology DSM 7,Docker Compose / ContainerManager) -- **对外访问**:甲骨文服务器(129.146.203.203)frp 隧道(frps 已运行,`frpc.toml` 追加 `nexusai` 代理)转发公网 443 → NAS 的 Nginx 容器(NAS 本机端口 8443) +- **对外访问**:甲骨文服务器(129.146.203.203)frp 隧道(frps 已运行,`frpc.toml` 追加 `nexusai` 代理)转发公网专属端口 3210 → NAS 的 Nginx 容器(NAS 本机端口 8443),即 `https://129.146.203.203:3210` - **方式**:所有服务在同一 `ai-network` 内;NAS 本机 80/443/3000 已被 Gitea/DSM 等既有服务占用,AI 网关改用 8443(nginx)与 3001(one-api,仅 127.0.0.1) - **目录结构**:`docker-compose.yml` / `.env`(敏感变量,不入库)/ `nginx.conf` / `certs/` / `one-api-data/` / `mysql-data/` - **详细部署步骤**:见 [SDD 第 6 章](docs/02-软件设计文档-SDD.md#6-部署设计) @@ -90,11 +90,11 @@ NAS 本机(Docker 宿主机) | one-api | justsong/one-api:latest | 127.0.0.1:3001→3000(仅本机回环) | 网关聚合层 | | mysql | mysql:8.0 | 未发布主机端口,仅容器内网 3306 | One-API 数据存储 | -> NAS 本机 80/443/3000 已被 Gitea(3000)与其他既有服务(80/443)占用,故 AI 网关容器改用上表端口;甲骨文侧无需改动,frps 按 `frpc.toml` 中新增的 `[[proxies]] name="nexusai"` 动态接受 remotePort 443。 +> NAS 本机 80/443/3000 已被 Gitea(3000)与其他既有服务(80/443)占用,故 AI 网关容器改用上表端口;甲骨文侧无需改动,frps 按 `frpc.toml` 中新增的 `[[proxies]] name="nexusai"` 动态接受 remotePort 3210。 ### 3.2 安全要点 -- 对外仅暴露甲骨文服务器 frp 隧道转发的 443 端口,NAS 本机不直接暴露公网 +- 对外仅暴露甲骨文服务器 frp 隧道转发的 3210 端口(专属端口,非默认 443,与 Gitea:3000/WordPress:8500/FAM-core:8000 同一约定),NAS 本机不直接暴露公网 - One-API 后台端口只绑定 `127.0.0.1:3001`,不接入 frp 隧道;远程管理走 SSH 隧道:`ssh -p 2222 -L 3001:127.0.0.1:3001 ericwyuan@192.168.50.64` - 所有 API Key 通过服务器 `.env` 注入容器环境变量,`.env` 不入库(见 [SDD 第 5 章](docs/02-软件设计文档-SDD.md#5-安全设计)) - 前端强制 `ACCESS_CODE` 校验;Nginx 全站 HTTPS @@ -186,7 +186,7 @@ NAS 本机(Docker 宿主机) - 软件需求文档(SRS V1.0)与软件设计文档(SDD V1.0)入库(`docs/`) - 项目仓库初始化(Gitea: ericwyuan/NexusAI) -- NAS→各渠道直连稳定性验证、frp 隧道打通、四容器(mysql/one-api/lobe-chat/nginx)部署上线,端到端 `https://129.146.203.203/` 已可访问(详见 [PROGRESS.md](PROGRESS.md)) +- NAS→各渠道直连稳定性验证、frp 隧道打通、四容器(mysql/one-api/lobe-chat/nginx)部署上线,端到端 `https://129.146.203.203:3210/` 已可访问(详见 [PROGRESS.md](PROGRESS.md)) ### 待办(见 SDD 第 8 章待确认事项) diff --git a/docker-compose.yml b/docker-compose.yml index 8409dba..9694d3e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,7 +52,7 @@ services: restart: always ports: # NAS 本机 80/443 已被其他服务占用(DSM/其他容器),改用 8443 - # 甲骨文 frp 隧道(frpc.toml [[proxies]] name=nexusai)将公网 443 转发到 NAS 的 8443 + # 甲骨文 frp 隧道(frpc.toml [[proxies]] name=nexusai)将公网专属端口 3210 转发到 NAS 的 8443 - "8443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro diff --git a/docs/02-软件设计文档-SDD.md b/docs/02-软件设计文档-SDD.md index 061cfb3..cd61df7 100644 --- a/docs/02-软件设计文档-SDD.md +++ b/docs/02-软件设计文档-SDD.md @@ -378,4 +378,4 @@ networks: 3. ~~是否需要接入 Prometheus/Grafana~~ **默认结论**:本期不接入,沿用 SDD 6.4 既定的轻量监控(`docker compose ps` + One-API 后台渠道页面);用量不大,暂不需要额外可视化监控栈 4. **域名与证书**:尚未有正式域名,当前用**临时自签名证书**(`certs/fullchain.pem`/`privkey.pem`,CN=nexusai.local)跑通链路,浏览器会提示"不安全"但功能不受影响;若紫川后续购买/已有域名,替换证书为 Let's Encrypt 即可,无需改动其他组件——**此项仍待紫川决定是否购买域名** 5. ~~NAS 到各海外 API 官方域名的直连稳定性验证~~ **已完成(2026-08-23)**:五渠道 TCP/TLS 握手均 2 秒内完成,NAS 出站直连稳定,无需额外代理 -6. ~~甲骨文反代方式确认~~ **已完成(2026-08-23)**:采用 frp 隧道(与 FAM 项目一致),复用 Oracle 上已运行的 `frps`,NAS `frpc.toml` 新增 `nexusai` 代理(remotePort 443 → NAS 8443) +6. ~~甲骨文反代方式确认~~ **已完成(2026-08-23)**:采用 frp 隧道(与 FAM 项目一致),复用 Oracle 上已运行的 `frps`,NAS `frpc.toml` 新增 `nexusai` 代理(remotePort **3210**(专属端口,非默认 443,与 gitea:3000/wordpress:8500/fam-core:8000 同一约定)→ NAS 8443),对外访问地址为 `https://129.146.203.203:3210`