gongxiangp2/docs/NETWORK_TOPOLOGY.md
2026-03-06 14:14:50 +08:00

223 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 网络拓扑文档
> 最后更新:2026-03-04
---
## 🗺️ 网络架构概览(当前生效)
```
┌───────────────────────────┐
│ 公网用户 │
└─────────────┬─────────────┘
│
▼
┌────────────────────────────────────┐
│ 香港入口服务器 103.118.245.6 │
│ - Nginx: 80/443 │
│ - FRPS: 7001 │
│ - FRP vhost: 8080/8443 │
│ - Dashboard: 7500 │
└────────────────┬───────────────────┘
│ FRP (token)
▼
┌────────────────────────────────────┐
│ 生产服务器 192.168.58.20 │
│ - Next.js: 4320 (容器映射) │
│ - MinIO: 9000 │
│ - frpc-s3.service (主链路) │
│ - frpc.service (南京备用,已停用) │
└────────────────────────────────────┘
备用(非主链路):
南京 FRP 180.97.221.140(7000/2320/2330)当前仅保留为历史备用线路。
```
---
## 🌐 域名解析
| 域名 | DNS 指向 | 实际服务 | 用途 |
|-----|---------|---------|------|
| 3d.yydd.ai | 香港 (103.118.245.6) | Next.js 应用(经香港入口转发) | 主站访问 |
| s3.yydd.ai | 香港 (103.118.245.6) | MinIO 存储桶(经香港入口转发) | 文件存储/下载 |
### DNS 管理说明
- DNS 托管在 Cloudflare(权威 NS:`holly.ns.cloudflare.com`、`simon.ns.cloudflare.com`)
- 域名变更需在 Cloudflare Zone(`yydd.ai`)内操作
- 当前运维终端默认无 Cloudflare 管理权限时,需联系域名管理员执行切换
---
## 🔌 FRP 穿透配置
### 当前服务模型(systemd)
| 节点 | 服务 | 配置文件 | 角色 |
|-----|------|---------|------|
| 生产 192.168.58.20 | `frpc-s3.service` | `/etc/frp/frpc-s3.toml` | 主链路(3d + s3 → 香港) |
| 生产 192.168.58.20 | `frpc.service` | `/etc/frp/frpc.toml` | 南京备用链路(当前停用) |
| 香港 103.118.245.6 | `frps-minio.service` | `/root/frp-minio/frps.toml` | FRPS 服务端 |
> 说明:`frpc` 二进制会有工作线程,进程数可大于 1;以 `systemctl is-active` 与日志为准。
>
> 运行备注:`frpc.service`(南京备用链路)当前已停用,不影响 `frpc-s3.service`(香港主链路)对外服务;如需回切可手动启用。
### 关键配置(脱敏示例)
#### `/etc/frp/frpc-s3.toml`(生产,主链路)
```toml
serverAddr = "103.118.245.6"
serverPort = 7001
auth.method = "token"
auth.token = "<REDACTED>"
[[proxies]]
name = "minio-s3-hk"
type = "http"
localIP = "192.168.58.20"
localPort = 9000
customDomains = ["s3.yydd.ai"]
[[proxies]]
name = "3d-main-hk"
type = "http"
localIP = "192.168.58.20"
localPort = 4320
customDomains = ["3d.yydd.ai"]
```
#### `/root/frp-minio/frps.toml`(香港,服务端)
```toml
bindPort = 7001
vhostHTTPPort = 8080
vhostHTTPSPort = 8443
[auth]
token = "<REDACTED>"
[webServer]
addr = "0.0.0.0"
port = 7500
user = "admin"
password = "<REDACTED>"
```
---
## 🚪 端口映射(当前)
### 生产服务器 (192.168.58.20)
| 服务 | 端口 | 说明 |
|-----|------|------|
| Next.js 容器 | 4320 | 3D 主站应用入口(内网) |
| MinIO | 9000 | 对象存储服务 |
| PostgreSQL | 5432 | 内网数据库 |
| Redis | 6379 | 内网缓存 |
### 香港入口服务器 (103.118.245.6)
| 端口 | 服务 | 说明 |
|-----|------|------|
| 80 | Nginx | HTTP 入口(跳 HTTPS) |
| 443 | Nginx + Let’s Encrypt | 3d/s3 统一 HTTPS 入口 |
| 7001 | FRPS bindPort | FRP 控制通道 |
| 8080 | FRPS vhostHTTPPort | FRP HTTP 转发 |
| 8443 | FRPS vhostHTTPSPort | FRP HTTPS 转发 |
| 7500 | FRPS Dashboard | 运维面板(需加固来源) |
### 南京 FRP 服务器 (180.97.221.140)
| 端口 | 服务 | 说明 |
|-----|------|------|
| 7000 | FRP Server | 南京旧线路控制端口 |
| 2320 | 3d 旧代理口 | 历史主站链路(备用) |
| 2330 | s3 旧代理口 | 历史存储链路(备用) |
---
## 📊 服务访问路径(当前)
### 3d.yydd.ai(主站)
```
用户 → DNS(香港) → Nginx(香港:443) → FRPS(香港:8080/8443) → frpc-s3(生产) → Next.js(4320)
```
### s3.yydd.ai(存储)
```
用户 → DNS(香港) → Nginx(香港:443) → FRPS(香港:8080/8443) → frpc-s3(生产) → MinIO(9000)
```
---
## 🔧 故障排查(更新后)
### 常用检查命令
```bash
# 1) 生产侧 FRP 主链路
ssh root@192.168.58.20 "systemctl is-active frpc-s3 && tail -n 80 /tmp/frpc-s3.log"
# 2) 香港侧 FRPS + Nginx
ssh -i C:/Users/54972/.ssh/id_rsa_103.118.245.6 root@103.118.245.6 "systemctl is-active frps-minio nginx"
ssh -i C:/Users/54972/.ssh/id_rsa_103.118.245.6 root@103.118.245.6 "ss -tlnp | grep -E ':7001 |:8080 |:8443 |:443 '"
# 3) 端到端验证
curl -sS -o /dev/null -w "3d:%{http_code} ssl=%{ssl_verify_result}\n" https://3d.yydd.ai
curl -sS -o /dev/null -w "s3:%{http_code} ssl=%{ssl_verify_result}\n" https://s3.yydd.ai
```
### 常见问题
| 问题 | 可能原因 | 解决方案 |
|-----|---------|---------|
| 3d.yydd.ai 502/超时 | 香港 `frps-minio` 未运行或端口冲突 | `systemctl status frps-minio`,排查 `7500` 占用并重启 |
| s3.yydd.ai 不可用 | `frpc-s3` 未连接香港 | 检查 `/tmp/frpc-s3.log` 是否 `login success` + `start proxy success` |
| HTTPS 证书报错 | Nginx 证书未覆盖双域名 | 检查 `/etc/letsencrypt/live/s3.yydd.ai/fullchain.pem` SAN |
| 访问慢/抖动 | 跨境链路波动 | 观察 `frpc-s3` 重连频率,必要时启用备用线路 |
### 重启流程(systemd)
```bash
# 生产:重启香港主链路 frpc
ssh root@192.168.58.20 "systemctl restart frpc-s3 && systemctl status frpc-s3 --no-pager -l | sed -n '1,60p'"
# 生产:启用南京备用链路(仅回切时)
ssh root@192.168.58.20 "systemctl enable --now frpc && systemctl status frpc --no-pager -l | sed -n '1,60p'"
# 香港:重启 FRPS
ssh -i C:/Users/54972/.ssh/id_rsa_103.118.245.6 root@103.118.245.6 "systemctl restart frps-minio && systemctl status frps-minio --no-pager -l | sed -n '1,60p'"
# 香港:重载 Nginx(改证书/站点后)
ssh -i C:/Users/54972/.ssh/id_rsa_103.118.245.6 root@103.118.245.6 "nginx -t && systemctl reload nginx"
```
---
## 🔐 服务器凭据与连接方式
| 服务器 | IP | 推荐 SSH 方式 | 备注 |
|-------|-----|-------------|------|
| 生产服务器 | 192.168.58.20 | `ssh prod` | 主服务节点 |
| 香港入口 | 103.118.245.6 | `ssh -i C:/Users/54972/.ssh/id_rsa_103.118.245.6 root@103.118.245.6` | 已切换为新密钥 |
| 南京 FRP | 180.97.221.140 | `plink -ssh root@180.97.221.140 -pw "密码"` | 备用链路 |
| 构建服务器 | 192.168.42.134 | `ssh build` | 镜像构建 |
> 详细密钥清单与服务器说明见 `CLAUDE.md`。
---
## 📝 变更历史
| 日期 | 变更内容 | 操作人 |
|-----|---------|-------|
| 2026-02-23 | 创建文档,记录初始网络架构 | Claude |
| 2026-03-04 | 3d 主链路切到香港,证书覆盖 3d+s3,文档改为 systemd 运维模型 | Codex |