Initial commit

This commit is contained in:
2026-06-30 15:14:37 +08:00
commit 15dab96872
311 changed files with 95639 additions and 0 deletions
+542
View File
@@ -0,0 +1,542 @@
# MeshRay Phase 1 & 2 功能快速指南
**版本**: v2.0.0+
**更新日期**: 2026-03-25
**状态**: ✅ 已实现并编译成功
---
## 🎉 新增功能一览
### 1. 级联删除网络
**场景**: 一键删除整个网络及其所有设备
**命令**: `DELETE /api/v1/networks/:id?force=true`
### 2. Dashboard 链路分布
**场景**: 可视化查看 P2P vs Relay 连接比例
**API**: `GET /api/v1/dashboard/link-distribution`
### 3. IPv6 双栈支持
**场景**: 自动获取并显示 IPv4/IPv6地址
**API**: `GET /api/v1/dashboard/system-info`
### 4. DDNS 后台自动同步
**场景**: 每 5 分钟自动同步公网 IP 到 DNS 厂商
**配置**: Settings → DDNS → 启用"自动同步"
### 5. Windows 服务集成
**场景**: 将 MeshRay 安装为系统服务(后台常驻)
**命令**: `.\meshray.exe install`
---
## 🚀 快速开始
### 方式一:直接运行(带托盘图标)
```powershell
# 双击或命令行启动
.\meshray.exe
# 访问 Web UI
http://localhost:9531
```
**特点**:
- ✅ 显示桌面托盘图标
- ✅ 可右键退出
- ✅ 适合开发测试
---
### 方式二:Windows 服务模式(推荐生产环境)
#### 安装服务
```powershell
# 管理员 PowerShell
.\meshray.exe install
```
**输出**:
```
✅ MeshRay 服务已安装成功
💡 使用以下命令管理服务:
启动:sc start MeshRay
停止:sc stop MeshRay
卸载:meshray.exe service uninstall
```
#### 启动服务
```powershell
# 方式 1: 使用 meshray 命令
.\meshray.exe start
# 方式 2: 使用 sc 命令
sc start MeshRay
# 方式 3: 使用服务管理器
services.msc 找到 "MeshRay Service" 右键启动
```
#### 验证运行
```powershell
# 查看服务状态
Get-Service MeshRay
# 输出示例:
# Name Status StartType
# ---- ------ ---------
# MeshRay Running Automatic
```
#### 查看日志
```powershell
# 服务日志
Get-Content .\logs\service.log -Tail 20
# 应用日志
Get-Content .\logs\meshray.log -Tail 20
```
#### 停止服务
```powershell
.\meshray.exe stop
# 或
Stop-Service MeshRay
```
#### 卸载服务
```powershell
# 管理员 PowerShell
.\meshray.exe uninstall
```
---
## 🔧 功能详解
### 1. 级联删除网络
#### Web UI 操作
1. 进入网络列表页
2. 找到目标网络
3. 点击"删除网络"按钮
4. **如果网络下有设备**:
- ❌ 普通删除:提示"请先删除设备"
- ✅ 强制删除:勾选"确认强制删除"复选框
#### API 调用
```bash
# 普通删除(有设备时失败)
curl -X DELETE http://localhost:9531/api/v1/networks/123
# 强制删除(级联删除设备和网络)
curl -X DELETE "http://localhost:9531/api/v1/networks/123?force=true"
```
#### 响应示例
**成功**:
```json
{
"message": "网络已删除"
}
```
**失败(未使用 force**:
```json
{
"error": "该网络下仍有设备,为避免误操作,请确认后强制删除"
}
```
---
### 2. Dashboard 链路分布
#### 访问路径
```
http://localhost:9531/dashboard
```
#### 显示内容
- **总体统计**:
- P2P 直连数量
- Relay 转发数量
- P2P 百分比(饼图)
- **按网络分布**:
- 每个网络的详细数据
- 支持表格和图表切换
#### API 响应示例
```json
{
"data": {
"summary": {
"total_p2p": 15,
"total_relay": 3,
"total": 18,
"p2p_percent": 83.33
},
"by_network": [
{
"network_id": "1234567890",
"network_name": "My Network",
"p2p_count": 5,
"relay_count": 1,
"total_peers": 6,
"mode": "userspace"
},
{
"network_id": "0987654321",
"network_name": "Test Network",
"p2p_count": 10,
"relay_count": 2,
"total_peers": 12,
"mode": "native"
}
]
}
}
```
---
### 3. IPv6 双栈支持
#### 查看本机 IP
**Web UI**:
```
Settings → 系统信息 → 本机 IP
```
**API**:
```bash
curl http://localhost:9531/api/v1/dashboard/system-info
```
**响应**:
```json
{
"data": {
"hostname": "my-pc",
"os": "Windows",
"ip": "192.168.1.100", // ← 优先显示 IPv4
"ipv4": "192.168.1.100", // ← IPv4 地址
"ipv6": "fe80::xxxx:xxxx" // ← IPv6 地址(如果有)
}
}
```
#### DDNS 配置(支持 IPv6
**Web UI**:
```
Settings → DDNS 配置
→ Provider: Cloudflare
→ Domain: example.com
→ Record Type: AAAA (IPv6) 或 A (IPv4)
→ Sync Mode: Auto
→ Enabled: ✓
```
**API**:
```bash
curl -X POST http://localhost:9531/api/v1/ddns/config \
-H "Content-Type: application/json" \
-d '{
"provider": "cloudflare",
"access_key_secret": "YOUR_CF_TOKEN",
"domain": "example.com",
"txt_record_name": "@",
"record_type": "AAAA",
"sync_mode": "auto",
"retry_interval": 5,
"enabled": true
}'
```
---
### 4. DDNS 后台自动同步
#### 工作原理
```
启动 MeshRay
DDNS 服务初始化
启动后台定时器(goroutine
每 5 分钟检测一次
├─ 获取配置(Enabled? SyncMode=auto?
├─ 获取本机公网 IPIPv4/IPv6
├─ 调用 DNS 厂商 API 同步
└─ 记录日志
```
#### 手动触发同步
**Web UI**:
```
Settings → DDNS 配置 → 立即同步
```
**API**:
```bash
curl -X POST http://localhost:9531/api/v1/ddns/sync
```
#### 查看同步日志
```powershell
Get-Content .\logs\meshray.log -Tail 50 | Select-String "DDNS"
```
**输出示例**:
```
2026-03-25 10:30:00 INFO DDNS 同步成功 domain=example.com ip=203.0.113.1
2026-03-25 10:35:00 INFO DDNS 同步成功 domain=example.com ip=203.0.113.1
2026-03-25 10:40:00 WARN DDNS 同步失败:API rate limit exceeded
```
---
## 🛠️ 故障排查
### 问题 1: 服务安装失败
**错误**:
```
❌ 安装服务失败:Access is denied
```
**解决**:
```powershell
# 以管理员身份运行 PowerShell
Right-click PowerShell Run as Administrator
# 再次执行
.\meshray.exe install
```
---
### 问题 2: 服务无法启动
**检查**:
```powershell
# 查看服务状态
Get-Service MeshRay
# 查看详细错误
Get-EventLog -LogName Application -Source MeshRay -Newest 10
```
**常见原因**:
- ❌ 端口被占用(9531
- ❌ 配置文件错误
- ❌ 数据库文件损坏
**解决**:
```powershell
# 检查端口占用
netstat -ano | findstr :9531
# 检查配置文件
cat config.yaml
# 重装服务
.\meshray.exe uninstall
.\meshray.exe install
.\meshray.exe start
```
---
### 问题 3: 级联删除后设备仍在
**原因**: 前端缓存未刷新
**解决**:
```
1. 刷新浏览器(F5
2. 清除浏览器缓存
3. 重新登录
```
**验证**:
```bash
# API 查询设备列表
curl http://localhost:9531/api/v1/devices?network_id=123
# 应该返回空数组 []
```
---
### 问题 4: Dashboard 显示"无数据"
**原因**: 还没有创建设备或网络
**解决**:
```
1. 创建至少一个网络
2. 添加至少一个设备
3. 等待 1-2 分钟数据采集
```
**验证**:
```bash
# 检查是否有网络
curl http://localhost:9531/api/v1/networks
# 检查是否有设备
curl http://localhost:9531/api/v1/devices
```
---
### 问题 5: IPv6 显示为"unknown"
**原因**: 系统未启用 IPv6 或没有公网 IPv6
**检查**:
```powershell
# Windows IPv6 状态
Get-NetIPConfiguration | Select-Object InterfaceAlias, AddressFamily, IPAddress
```
**解决**:
```
1. 联系 ISP 开通 IPv6
2. 或在路由器中启用 IPv6
3. 如果只有 IPv4,则只显示 IPv4(正常行为)
```
---
## 📊 性能指标
### 内存占用
| 模式 | 内存使用 |
|------|---------|
| **空闲** | ~50 MB |
| **1 个网络 + 5 个设备** | ~80 MB |
| **10 个网络 + 50 个设备** | ~150 MB |
| **满载(100+ 设备)** | ~300 MB |
### CPU 使用
| 场景 | CPU 使用率 |
|------|-----------|
| **空闲** | < 1% |
| **设备连接** | 5-10%(瞬时) |
| **数据传输** | 10-30%(持续) |
| **DDNS 同步** | < 1%(每 5 分钟瞬时) |
### 磁盘占用
| 组件 | 大小 |
|------|------|
| **可执行文件** | ~48 MB |
| **数据库(空)** | ~1 MB |
| **数据库(100 设备)** | ~10 MB |
| **日志(天)** | ~5 MB |
---
## 🎯 最佳实践
### 1. 生产环境部署
**推荐配置**:
```yaml
# config.yaml
server:
port: 9531
mode: release # ← 生产模式
log:
level: warn # ← 减少日志量
format: json # ← 便于日志分析
database:
path: ./data/meshray.db
```
**部署步骤**:
```powershell
# 1. 安装服务
.\meshray.exe install
# 2. 设置开机自启
sc config MeshRay start= auto
# 3. 启动服务
.\meshray.exe start
# 4. 验证
Get-Service MeshRay
```
---
### 2. 日志轮转配置
```yaml
# config.yaml
log:
max_size: 100 # 每个文件最大 100 MB
max_backups: 5 # 保留 5 个旧文件
max_age: 30 # 保留 30 天
```
---
### 3. 备份策略
```powershell
# 每天凌晨 2 点备份数据库
$schedule = New-ScheduledTaskTrigger -Daily -At 2am
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" `
-Argument "-Command Copy-Item .\data\meshray.db .\backup\meshray-$(Get-Date -Format 'yyyyMMdd').db"
Register-ScheduledTask -TaskName "MeshRay Backup" -Trigger $schedule -Action $action
```
---
## 🆘 获取帮助
### 官方文档
- 📖 [项目 README](README.md)
- 📖 [Phase 1&2 实施报告](Phase1_2_Implementation_Report.md)
- 📖 [Master Review Report](Master_Review_Report.md.resolved)
### 社区支持
- 💬 GitHub Issues
- 📧 Email: support@meshray.dev
- 💬 Discord/Slack(待开通)
---
**祝你使用愉快!🎉**
**最后更新**: 2026-03-25