fix(部署): One-API 管理端口改为局域网直连,SSH 隧道方案不可行

- 发现 NAS sshd 关闭了 AllowTcpForwarding,SSH -L 隧道会报 administratively prohibited,此前文档里的隧道方案实际不可用
- one-api 端口绑定改为 192.168.50.64:3001(NAS 局域网 IP),不再绑定 127.0.0.1;仍不接入 frp、不暴露公网,只是访问方式从"SSH隧道转发"改为"同局域网直连"
- 已在 NAS 上应用并验证 http://192.168.50.64:3001 可正常访问(HTTP 200)
- 同步修正 README/PROGRESS/SDD 中的管理端口访问说明
This commit is contained in:
ericwyuan
2026-08-23 09:02:54 +08:00
parent 2e1c335dbd
commit 8017f691a1
4 changed files with 8 additions and 7 deletions

View File

@@ -28,8 +28,9 @@
- **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 隧道 - **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 短暂重启几次,符合预期,之后自愈) - **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 完全打通 - **端到端验证通过**`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 完全打通
- **管理端口访问方式修正2026-08-23**NAS sshd 关闭了 `AllowTcpForwarding`SSH 隧道方案实测不可行(`channel N: open failed: administratively prohibited`);改为 One-API 端口直接绑定 NAS 局域网 IP`192.168.50.64:3001:3000`,非 `127.0.0.1`),同局域网内浏览器可直接访问,仍不经 frp、不暴露公网
- **仍需用户在浏览器里手动完成(不由 AI 代做,涉及创建账号/输入密钥)** - **仍需用户在浏览器里手动完成(不由 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 管理员账号初始化 1. 浏览器直接打开 `http://192.168.50.64:3001`(需与 NAS 同一局域网)完成 One-API 管理员账号初始化
2. 后台按渠道设计表添加 5 个渠道(需要 Gemini/NVIDIA 新 Key待办任务2 2. 后台按渠道设计表添加 5 个渠道(需要 Gemini/NVIDIA 新 Key待办任务2
3. 创建对外 Token写入 NAS `~/ai-gateway/.env``ONE_API_TOKEN`,然后 `docker compose restart lobe-chat` 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/` 下的自签名证书) 4. 访问 `https://129.146.203.203:3210`当前为自签名证书浏览器会显示不安全警告Access Code 已随机生成,存于 NAS `~/ai-gateway/.env``LOBE_ACCESS_CODE`,未写入版本库,见对话记录/自行 `cat` 查看)进行实际对话/图片问答/Failover 验证待办任务5 收尾、并决定正式域名与证书方案待办任务6届时替换 `certs/` 下的自签名证书)

View File

@@ -87,7 +87,7 @@ NAS 本机Docker 宿主机)
|---|---|---|---| |---|---|---|---|
| nginx | nginx:alpine | 8443→443经 frp 隧道对外) | HTTPS 终止、反向代理 | | nginx | nginx:alpine | 8443→443经 frp 隧道对外) | HTTPS 终止、反向代理 |
| lobe-chat | lobehub/lobe-chat:latest | 未发布主机端口,仅容器内网 3210 | 前端对话界面 | | lobe-chat | lobehub/lobe-chat:latest | 未发布主机端口,仅容器内网 3210 | 前端对话界面 |
| one-api | justsong/one-api:latest | 127.0.0.1:3001→3000本机回环 | 网关聚合层 | | one-api | justsong/one-api:latest | 192.168.50.64:3001→3000局域网 | 网关聚合层 |
| mysql | mysql:8.0 | 未发布主机端口,仅容器内网 3306 | One-API 数据存储 | | mysql | mysql:8.0 | 未发布主机端口,仅容器内网 3306 | One-API 数据存储 |
> NAS 本机 80/443/3000 已被 Gitea3000与其他既有服务80/443占用故 AI 网关容器改用上表端口甲骨文侧无需改动frps 按 `frpc.toml` 中新增的 `[[proxies]] name="nexusai"` 动态接受 remotePort 3210。 > NAS 本机 80/443/3000 已被 Gitea3000与其他既有服务80/443占用故 AI 网关容器改用上表端口甲骨文侧无需改动frps 按 `frpc.toml` 中新增的 `[[proxies]] name="nexusai"` 动态接受 remotePort 3210。
@@ -95,7 +95,7 @@ NAS 本机Docker 宿主机)
### 3.2 安全要点 ### 3.2 安全要点
- 对外仅暴露甲骨文服务器 frp 隧道转发的 3210 端口(专属端口,非默认 443与 Gitea:3000/WordPress:8500/FAM-core:8000 同一约定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` - One-API 后台端口只绑定 NAS 局域网 IP `192.168.50.64:3001`,不接入 frp 隧道不暴露公网NAS sshd 已关闭 `AllowTcpForwarding`SSH 隧道方案不可行,故改为局域网直连管理:浏览器打开 `http://192.168.50.64:3001`(需与 NAS 同一局域网)
- 所有 API Key 通过服务器 `.env` 注入容器环境变量,`.env` 不入库(见 [SDD 第 5 章](docs/02-软件设计文档-SDD.md#5-安全设计) - 所有 API Key 通过服务器 `.env` 注入容器环境变量,`.env` 不入库(见 [SDD 第 5 章](docs/02-软件设计文档-SDD.md#5-安全设计)
- 前端强制 `ACCESS_CODE` 校验Nginx 全站 HTTPS - 前端强制 `ACCESS_CODE` 校验Nginx 全站 HTTPS

View File

@@ -18,9 +18,9 @@ services:
container_name: one-api container_name: one-api
restart: always restart: always
ports: ports:
# 3000 已被 NAS 上的 Gitea 容器占用,改用 3001;仅绑定 127.0.0.1,不对局域网/公网暴露 # 3000 已被 NAS 上的 Gitea 容器占用,改用 3001
# 远程管理走 SSH 隧道ssh -p 2222 -L 3001:127.0.0.1:3001 ericwyuan@192.168.50.64 # NAS sshd 关闭了 AllowTcpForwardingSSH 隧道方案不可行,改为仅绑定 NAS 局域网 IP不经 frp不映射公网
- "127.0.0.1:3001:3000" - "192.168.50.64:3001:3000"
volumes: volumes:
- ./one-api-data:/data - ./one-api-data:/data
environment: environment:

View File

@@ -374,7 +374,7 @@ networks:
## 8. 待确认事项2026-08-23 更新:已实际部署,多数事项已给出默认结论) ## 8. 待确认事项2026-08-23 更新:已实际部署,多数事项已给出默认结论)
1. ~~是否需要 Server-Side 模式支持多端对话同步~~ **默认结论**:本期保持 Client-SideIndexedDB不额外部署 PostgreSQL仅单用户/单浏览器使用,暂无多端同步需求。如后续需要,再单独排期 1. ~~是否需要 Server-Side 模式支持多端对话同步~~ **默认结论**:本期保持 Client-SideIndexedDB不额外部署 PostgreSQL仅单用户/单浏览器使用,暂无多端同步需求。如后续需要,再单独排期
2. ~~后台管理端口是否需要通过 VPN/SSH 隧道访问~~ **已实施**One-API 绑定 NAS `127.0.0.1:3001`,不接入 frp 隧道不映射公网;远程管理走 `ssh -p 2222 -L 3001:127.0.0.1:3001 ericwyuan@192.168.50.64` 2. ~~后台管理端口是否需要通过 VPN/SSH 隧道访问~~ **已实施2026-08-23 修正)**NAS sshd 关闭了 `AllowTcpForwarding`SSH 隧道方案实测不可行;改为 One-API 绑定 NAS 局域网 IP `192.168.50.64:3001`,不接入 frp 隧道不映射公网,同局域网内浏览器直接访问 `http://192.168.50.64:3001`
3. ~~是否需要接入 Prometheus/Grafana~~ **默认结论**:本期不接入,沿用 SDD 6.4 既定的轻量监控(`docker compose ps` + One-API 后台渠道页面);用量不大,暂不需要额外可视化监控栈 3. ~~是否需要接入 Prometheus/Grafana~~ **默认结论**:本期不接入,沿用 SDD 6.4 既定的轻量监控(`docker compose ps` + One-API 后台渠道页面);用量不大,暂不需要额外可视化监控栈
4. **域名与证书**:尚未有正式域名,当前用**临时自签名证书**`certs/fullchain.pem`/`privkey.pem`CN=nexusai.local跑通链路浏览器会提示"不安全"但功能不受影响;若紫川后续购买/已有域名,替换证书为 Let's Encrypt 即可,无需改动其他组件——**此项仍待紫川决定是否购买域名** 4. **域名与证书**:尚未有正式域名,当前用**临时自签名证书**`certs/fullchain.pem`/`privkey.pem`CN=nexusai.local跑通链路浏览器会提示"不安全"但功能不受影响;若紫川后续购买/已有域名,替换证书为 Let's Encrypt 即可,无需改动其他组件——**此项仍待紫川决定是否购买域名**
5. ~~NAS 到各海外 API 官方域名的直连稳定性验证~~ **已完成2026-08-23**:五渠道 TCP/TLS 握手均 2 秒内完成NAS 出站直连稳定,无需额外代理 5. ~~NAS 到各海外 API 官方域名的直连稳定性验证~~ **已完成2026-08-23**:五渠道 TCP/TLS 握手均 2 秒内完成NAS 出站直连稳定,无需额外代理