Files
NexusAI/PROGRESS.md
ericwyuan 4ed463237d [任务1,3,5] NAS 实际部署 + frp 隧道打通 - 端到端可访问
- 发现 NAS 本机 80/443/3000 已被 Gitea/既有服务占用,调整 docker-compose.yml/nginx.conf 端口:nginx 改 8443(对应容器内 443),one-api 改 127.0.0.1:3001(内网回环,不再冲突 Gitea 的 3000)
- 验证 NAS 到 Gemini/NVIDIA/Groq/OpenRouter/Mistral 五渠道直连稳定(待办任务1完成)
- 确认并实施 Oracle 侧 frp 隧道反代方案:复用已运行的 frps,在 NAS frpc.toml 追加 nexusai 代理(remotePort 443 -> NAS:8443),未影响既有 gitea/wordpress/fam-core 隧道(待办任务3完成)
- NAS 上 docker compose up -d 四容器(mysql/one-api/lobe-chat/nginx)全部启动,https://129.146.203.203/ 端到端验证通过(待办任务5:部署部分完成,渠道配置/Token 待人工在 One-API 后台完成)
2026-08-23 08:45:03 +08:00

8.1 KiB
Raw Blame History

项目进度追踪

最后更新: 2026-08-23

服务运行状态

服务 节点 状态 说明
Oracle frp 隧道 甲骨文服务器 129.146.203.203 已配置 复用已有 frps新增 nexusai 代理remotePort 443 → 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.toml7000 控制端口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 隧道
  • NAS 实际部署待办任务5部分完成~/ai-gateway/ 目录下已放置 docker-compose.yml/nginx.conf/.envMYSQL_ROOT_PASSWORDLOBE_ACCESS_CODE 已用 openssl rand 生成强随机值,仅存于 NAS未入库、未在对话记录外泄露证书为临时自签名certs/CN=nexusai.localSAN 含两台服务器 IPdocker compose up -d 后四容器全部 UpMySQL 首次初始化耗时导致 one-api 短暂重启几次,符合预期,之后自愈)
  • 端到端验证通过curl -sk https://129.146.203.203/ 与 NAS 本机 curl -sk https://127.0.0.1:8443/ 均返回 HTTP 307LobeChat 正常重定向),链路 浏览器→Oracle frps:443→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/.envONE_API_TOKEN,然后 docker compose restart lobe-chat
    4. 访问 https://129.146.203.203当前为自签名证书浏览器会显示不安全警告Access Code 已随机生成,存于 NAS ~/ai-gateway/.envLOBE_ACCESS_CODE,未写入版本库,见对话记录/自行 cat 查看)进行实际对话/图片问答/Failover 验证待办任务5 收尾、并决定正式域名与证书方案待办任务6届时替换 certs/ 下的自签名证书)

2026-08-23 部署骨架生成docker-compose.yml / nginx.conf / .env.example

  • 产出:仓库根目录新增 docker-compose.ymlmysql / one-api / lobe-chat / nginx 四服务)、nginx.conf443 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 待确认事项,任务 6certs/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.mdV1.0+ docs/02-软件设计文档-SDD.mdV1.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