feat: 新增网卡、端口和接线管理功能

- 添加网卡(NetworkCard)模型及相关路由
- 实现端口(DevicePort)管理功能
- 新增接线(Cable)管理功能
- 添加前端网卡和端口管理界面
- 更新机柜可视化页面显示接线
- 添加设备详情抽屉展示端口和接线信息
- 更新部署文档包含数据库迁移指南
- 添加批量创建端口功能
- 设备删除时自动清理相关接线
This commit is contained in:
zhang1106
2026-01-23 08:55:16 +08:00
parent e965be50c8
commit 8099edc5e5
21 changed files with 5080 additions and 15 deletions
+277
View File
@@ -1715,6 +1715,283 @@ echo "备份验证完成"
---
## 🚨 已部署项目更新指南
> **📋 版本更新说明**
> 本节介绍如何将已部署的生产环境更新到最新版本,包含网卡管理、批量创建端口等新功能。
### 更新前准备
#### 1. 确认当前版本
```bash
# 检查最后更新日期
cd /var/www/idc_assest
git log -1 --format="%cd" --date=short
# 查看当前分支
git branch
```
#### 2. 备份现有数据(强制操作)
```bash
# 创建备份目录
BACKUP_DIR="/var/backups/idc_assest/$(date +%Y%m%d_%H%M%S)"
mkdir -p $BACKUP_DIR
echo "开始备份..."
# 备份数据库(SQLite
if [ -f "/var/www/idc_assest/backend/idc_management.db" ]; then
cp /var/www/idc_assest/backend/idc_management.db "$BACKUP_DIR/idc_management.db"
echo "✓ SQLite数据库已备份"
fi
# 备份数据库(MySQL
read -p "是否需要备份MySQL数据库? (y/n): " need_mysql
if [ "$need_mysql" = "y" ]; then
read -p "MySQL用户名: " db_user
read -s -p "MySQL密码: " db_pass
echo
mysqldump -u $db_user -p$db_pass idc_management > "$BACKUP_DIR/database.sql"
echo "✓ MySQL数据库已备份"
fi
# 备份配置文件
cp /var/www/idc_assest/backend/.env "$BACKUP_DIR/.env"
cp /var/www/idc_assest/frontend/.env* "$BACKUP_DIR/" 2>/dev/null || true
echo "✓ 配置文件已备份"
# 备份上传文件
cp -r /var/www/idc_assest/backend/uploads "$BACKUP_DIR/uploads" 2>/dev/null || true
echo "✓ 上传文件已备份"
echo ""
echo "备份完成,保存在: $BACKUP_DIR"
```
### 数据库迁移
#### SQLite 数据库更新
```bash
cd /var/www/idc_assest/backend
# 方式一:使用迁移脚本(推荐)
node scripts/migrate-v2.js
# 预期输出:
# ========================================
# IDC管理系统 - 数据库迁移脚本 v2.0
# ========================================
# 🔍 检测数据库类型...
# 数据库类型: sqlite
# 📋 开始迁移...
# ...
# ✅ 迁移完成!
# ========================================
# 迁移成功完成!🎉
# ========================================
```
#### MySQL 数据库更新
```bash
cd /var/www/idc_assest/backend
# 执行迁移脚本
node scripts/migrate-v2.js
# 预期输出:
# ========================================
# IDC管理系统 - 数据库迁移脚本 v2.0
# ========================================
# 🔍 检测数据库类型...
# 数据库类型: mysql
# 📋 开始迁移...
# 1. 创建 network_cards 表
# 2. 为 device_ports 添加 nic_id 字段
# 3. 创建相关索引
# 🔄 执行 MySQL 迁移...
# → 创建表: network_cards
# → 检查 nic_id 字段是否存在...
# → 添加 nic_id 字段...
# → 创建 nic_id 索引...
# ✅ 迁移完成!
# ========================================
# 迁移成功完成!🎉
# ========================================
```
> **💡 提示**:迁移脚本会自动检测数据库类型并执行相应的迁移操作。
### 更新后端代码
```bash
cd /var/www/idc_assest
# 拉取最新代码
git pull origin master
# 更新依赖
cd backend
npm install --only=production
# 检查新增的文件
echo "新增的文件:"
git diff --name-only --diff-filter=A HEAD
# 验证新模型文件
ls -la models/NetworkCard.js
ls -la routes/networkCards.js
```
### 注册新路由
检查 `backend/server.js` 是否已包含新路由:
```javascript
// 确认以下代码存在
const networkCardsRouter = require('./routes/networkCards');
app.use('/api/network-cards', networkCardsRouter);
```
如果不存在,请手动添加:
```bash
# 编辑 server.js
nano /var/www/idc_assest/backend/server.js
# 在合适位置添加(通常在其他 app.use 语句附近)
const networkCardsRouter = require('./routes/networkCards');
app.use('/api/network-cards', networkCardsRouter);
```
### 重启后端服务
```bash
# 重启PM2进程
pm2 restart idc-backend
# 验证服务状态
pm2 status idc-backend
# 查看日志确认无错误
pm2 logs idc-backend --lines 50
```
### 更新前端代码
```bash
cd /var/www/idc_assest/frontend
# 拉取最新代码
git pull origin master
# 更新依赖
npm install
# 构建生产版本
npm run build
# 验证构建结果
ls -la dist/
# 部署到Web目录
sudo rm -rf /var/www/idc-frontend/*
sudo cp -r dist/* /var/www/idc-frontend/
sudo chown -R www-data:www-data /var/www/idc-frontend
```
### 验证更新
#### 1. API 接口验证
```bash
# 测试新API接口
curl http://localhost:8000/api/network-cards
# 预期返回:空数组或现有数据
curl http://localhost:8000/api/device-ports
# 预期返回:端口数据(可能包含 nic_id 字段)
```
#### 2. 前端功能验证
访问管理界面,验证以下功能:
- [ ] **网卡管理**
- [ ] 设备详情中显示"端口与网卡"标签页
- [ ] 可以创建新网卡
- [ ] 网卡列表正确显示
- [ ] 可以删除网卡(需无端口关联)
- [ ] **端口管理**
- [ ] 可以创建端口时选择所属网卡
- [ ] 端口按网卡分组显示
- [ ] 显示未分组的端口
- [ ] **批量创建端口**
- [ ] 输入格式如 `1/0/1-1/0/48` 可以创建多个端口
- [ ] 预览功能正确显示待创建端口数量
#### 3. 数据库验证
```bash
# 验证新表存在
sqlite3 /var/www/idc_assest/backend/idc_management.db ".tables"
# 应包含:network_cards
# 验证新字段
sqlite3 /var/www/idc_assest/backend/idc_management.db ".schema device_ports" | grep nic_id
# 应显示 nic_id 字段定义
# 检查数据
sqlite3 /var/www/idc_assest/backend/idc_management.db "SELECT COUNT(*) FROM network_cards;"
```
### 回滚操作(如果出现问题)
```bash
cd /var/www/idc_assest
# 1. 停止服务
pm2 stop idc-backend
# 2. 恢复数据库
# SQLite
cp /var/backups/idc_assest/最新备份目录/idc_management.db backend/idc_management.db
# 或 MySQL
mysql -u idc_prod_user -p idc_management < /var/backups/idc_assest/最新备份目录/database.sql
# 3. 恢复代码
git checkout HEAD@{1}
# 4. 重启服务
pm2 start idc-backend
# 5. 验证回滚
curl http://localhost:8000/api/health
```
### 更新日志
**v2.x.x 新增功能**
- 网卡(NIC)管理功能,支持为设备添加多块网卡
- 端口与网卡关联,支持按网卡分组管理端口
- 批量创建端口,支持端口范围格式(如 `1/0/1-1/0/48`
- 新增 `network_cards` 数据库表
- `device_ports` 表新增 `nic_id` 字段
- 新增API端点:
- `GET /api/network-cards` - 获取网卡列表
- `POST /api/network-cards` - 创建网卡
- `PUT /api/network-cards/:nicId` - 更新网卡
- `DELETE /api/network-cards/:nicId` - 删除网卡
- `GET /api/network-cards/device/:deviceId/with-ports` - 获取网卡及端口
---
## 🔐 安全加固清单
### 服务器安全