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:
@@ -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 隧道
|
||||
- **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:3210/` 与 NAS 本机 `curl -sk https://127.0.0.1:8443/` 均返回 HTTP 307(LobeChat 正常重定向),链路 浏览器→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 代做,涉及创建账号/输入密钥)**:
|
||||
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)
|
||||
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/` 下的自签名证书)
|
||||
|
||||
@@ -87,7 +87,7 @@ NAS 本机(Docker 宿主机)
|
||||
|---|---|---|---|
|
||||
| nginx | nginx:alpine | 8443→443(经 frp 隧道对外) | HTTPS 终止、反向代理 |
|
||||
| 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 数据存储 |
|
||||
|
||||
> NAS 本机 80/443/3000 已被 Gitea(3000)与其他既有服务(80/443)占用,故 AI 网关容器改用上表端口;甲骨文侧无需改动,frps 按 `frpc.toml` 中新增的 `[[proxies]] name="nexusai"` 动态接受 remotePort 3210。
|
||||
@@ -95,7 +95,7 @@ NAS 本机(Docker 宿主机)
|
||||
### 3.2 安全要点
|
||||
|
||||
- 对外仅暴露甲骨文服务器 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-安全设计))
|
||||
- 前端强制 `ACCESS_CODE` 校验;Nginx 全站 HTTPS
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ services:
|
||||
container_name: one-api
|
||||
restart: always
|
||||
ports:
|
||||
# 3000 已被 NAS 上的 Gitea 容器占用,改用 3001;仅绑定 127.0.0.1,不对局域网/公网暴露
|
||||
# 远程管理走 SSH 隧道:ssh -p 2222 -L 3001:127.0.0.1:3001 ericwyuan@192.168.50.64
|
||||
- "127.0.0.1:3001:3000"
|
||||
# 3000 已被 NAS 上的 Gitea 容器占用,改用 3001
|
||||
# NAS sshd 关闭了 AllowTcpForwarding,SSH 隧道方案不可行,改为仅绑定 NAS 局域网 IP(不经 frp,不映射公网)
|
||||
- "192.168.50.64:3001:3000"
|
||||
volumes:
|
||||
- ./one-api-data:/data
|
||||
environment:
|
||||
|
||||
@@ -374,7 +374,7 @@ networks:
|
||||
## 8. 待确认事项(2026-08-23 更新:已实际部署,多数事项已给出默认结论)
|
||||
|
||||
1. ~~是否需要 Server-Side 模式支持多端对话同步~~ **默认结论**:本期保持 Client-Side(IndexedDB),不额外部署 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 后台渠道页面);用量不大,暂不需要额外可视化监控栈
|
||||
4. **域名与证书**:尚未有正式域名,当前用**临时自签名证书**(`certs/fullchain.pem`/`privkey.pem`,CN=nexusai.local)跑通链路,浏览器会提示"不安全"但功能不受影响;若紫川后续购买/已有域名,替换证书为 Let's Encrypt 即可,无需改动其他组件——**此项仍待紫川决定是否购买域名**
|
||||
5. ~~NAS 到各海外 API 官方域名的直连稳定性验证~~ **已完成(2026-08-23)**:五渠道 TCP/TLS 握手均 2 秒内完成,NAS 出站直连稳定,无需额外代理
|
||||
|
||||
Reference in New Issue
Block a user