完成了文档的说明,数据库可选择mysql部署

This commit is contained in:
zhang1106
2025-12-20 09:37:43 +08:00
parent 315e4a7ae7
commit fb99194c21
7 changed files with 1580 additions and 152 deletions
+818
View File
@@ -0,0 +1,818 @@
# IDC设备管理系统 - 安装部署指南
[![https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D14.0.0-brightgreen.svg)](https://nodejs.org/)
[![React](https://img.shields.io/badge/React-18.2.0-blue.svg)](https://reactjs.org/)
[![Status](https://img.shields.io/badge/Status-Production%20Ready-success.svg)]()
## 📋 目录
- [环境要求](#环境要求)
- [快速开始](#快速开始)
- [详细安装步骤](#详细安装步骤)
- [生产部署](#生产部署)
- [数据库配置](#数据库配置)
- [监控和维护](#监控和维护)
- [常见问题解决](#常见问题解决)
---
## 🖥️ 环境要求
### 开发环境
- **Node.js**: ≥14.0.0
- **npm**: ≥6.0.0 或 **yarn**: ≥1.22.0
- **操作系统**: Windows 10/11, macOS 10.14+, Linux (Ubuntu 18.04+)
- **内存**: 最小 4GB RAM
- **硬盘**: 最小 2GB 可用空间
### 生产环境
- **Node.js**: ≥14.0.0
- **npm**: ≥6.0.0 或 **yarn**: ≥1.22.0
- **Web服务器**: Nginx (推荐) 或 Apache
- **操作系统**: Linux (Ubuntu 18.04+, CentOS 7+, RHEL 7+)
- **内存**: 最小 8GB RAM (推荐 16GB+)
- **硬盘**: 最小 10GB 可用空间 (SSD 推荐)
- **SSL证书**: Let's Encrypt (推荐) 或其他CA证书
---
## ⚡ 快速开始
### 1. 克隆项目
```bash
git clone https://gitee.com/zhang1106/idc_assest.git
cd idc_assest
```
### 2. 安装后端依赖
```bash
cd backend
npm install
```
### 3. 安装前端依赖
```bash
cd ../frontend
npm install
```
### 4. 启动服务
```bash
# 启动后端服务(端口8000
cd backend && npm run dev
# 启动前端服务(端口3000)- 新终端
cd frontend && npm run dev
```
**访问地址**
- 前端应用:http://localhost:3000
- 后端APIhttp://localhost:8000/api
- 健康检查:http://localhost:8000/health
---
## 📖 详细安装步骤
### 后端配置
#### 1. 进入后端目录
```bash
cd backend
```
#### 2. 安装依赖包
```bash
npm install
```
#### 3. 配置环境变量
项目支持使用 `.env` 文件进行配置。请按以下步骤操作:
```bash
# 复制环境变量示例文件
cp .env.example .env
# 编辑 .env 文件,修改配置
# 可以使用任意文本编辑器,如:
# Windows: notepad .env
# macOS: nano .env
# 或IDE: 在编辑器中打开 .env 文件
```
**重要说明**
- `.env` 文件包含了所有可配置的选项和详细注释
- 每个配置项都有默认值,默认情况下可以直接使用
- 如需修改配置,请编辑 `.env` 文件中的相应值
- 建议开发时使用 `NODE_ENV=development`,部署时使用 `NODE_ENV=production`
**配置项说明**
**服务器配置**
- `PORT`:服务器端口(默认8000
- `NODE_ENV`:运行环境
- `development`:开发模式,详细日志便于调试
- `production`:生产模式,性能优化,减少日志输出
**数据库配置**
- `DB_TYPE`:数据库类型(默认 sqlite,可选 mysql
- `sqlite`:零配置嵌入式数据库,适合开发和小规模应用
- `mysql`:关系型数据库,适合生产环境和大规模应用
- `DB_PATH`:SQLite数据库文件路径(默认 ./idc_management.db
- `MYSQL_HOST`MySQL服务器地址(默认 localhost
- `MYSQL_PORT`MySQL端口(默认 3306
- `MYSQL_USERNAME`MySQL用户名(默认 root
- `MYSQL_PASSWORD`MySQL密码
- `MYSQL_DATABASE`MySQL数据库名(默认 idc_management
#### 4. 数据库配置
**默认配置(推荐)**:使用SQLite数据库,无需额外配置
**MySQL配置**:如需使用MySQL数据库,请按以下步骤操作:
1. 确保MySQL服务已安装并运行
2. 创建数据库:
```sql
CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
3.`.env` 文件中修改配置:
```env
DB_TYPE=mysql
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=root
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=idc_management
```
#### 5. 启动后端服务
```bash
# 开发模式(自动重启)
npm run dev
# 生产模式
npm start
```
**后端服务将在 http://localhost:8000 启动**(或配置的端口号)
### 前端配置
#### 1. 进入前端目录
```bash
cd frontend
```
#### 2. 安装依赖包
```bash
npm install
```
#### 3. 配置API地址
项目使用Vite代理配置,API地址在 `frontend/vite.config.js` 中配置:
```javascript
proxy: {
'/api': {
target: 'http://localhost:8000',
changeOrigin: true
}
}
```
如需修改后端地址,更新 `vite.config.js` 中的 `target` 字段。
#### 4. 启动前端开发服务器
```bash
npm run dev
```
**前端应用将在 http://localhost:3000 启动**
---
## 🚀 生产部署
> **⚠️ 部署前必读**:生产部署涉及服务器安全,请确保在安全环境下操作,并及时更新安全配置。
#### 部署准备
1. **环境检查**
```bash
# 检查系统环境
node --version # 确保 Node.js ≥ 14.0
npm --version # 确保 npm 可用
# 检查服务器端口占用
netstat -tulpn | grep :8000
netstat -tulpn | grep :80
```
2. **创建部署目录**
```bash
# 创建应用目录
mkdir -p /var/www/idc_assest
mkdir -p /var/log/idc_assest
mkdir -p /etc/nginx/sites-available
mkdir -p /etc/nginx/sites-enabled
```
#### 后端部署
1. **设置生产环境配置**
```bash
# 进入后端目录
cd backend
# 复制并编辑环境配置文件
cp .env.example .env
# 编辑生产环境配置(重要!)
# 设置生产模式
NODE_ENV=production
# 设置安全端口(可选)
PORT=8000
# 数据库配置(推荐使用MySQL
DB_TYPE=mysql
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=idc_user # 创建专用数据库用户
MYSQL_PASSWORD=secure_password # 使用强密码
MYSQL_DATABASE=idc_management
```
2. **安装生产依赖**
```bash
# 安装生产依赖(只安装生产环境需要的包)
npm install --only=production
# 验证关键依赖是否安装成功
ls node_modules | grep -E "(express|sequelize|mysql2)"
```
3. **配置数据库**
```sql
-- 连接MySQL(使用root用户)
mysql -u root -p
-- 创建专用数据库
CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户(安全最佳实践)
CREATE USER 'idc_user'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
4. **安装并配置PM2(进程管理器)**
```bash
# 全局安装PM2
npm install -g pm2
# 启动应用
pm2 start server.js --name "idc-backend" --env production
# 设置开机自启
pm2 startup
pm2 save
# 查看运行状态
pm2 status
pm2 logs idc-backend
```
5. **配置防火墙**
```bash
# Ubuntu/Debian
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw enable
# CentOS/RHEL
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```
#### 前端部署
1. **构建生产版本**
```bash
cd frontend
# 安装依赖
npm install
# 构建生产版本(会生成优化的静态文件)
npm run build
# 验证构建结果
ls -la dist/
```
2. **部署到Web服务器**
```bash
# 将构建文件复制到Web目录
sudo cp -r dist/* /var/www/idc-frontend/
# 设置正确的文件权限
sudo chown -R www-data:www-data /var/www/idc-frontend
sudo chmod -R 755 /var/www/idc-frontend
```
#### Nginx配置
1. **创建站点配置文件**
```bash
sudo nano /etc/nginx/sites-available/idc_assest
```
2. **编辑Nginx配置**
```nginx
# 主配置
server {
listen 80;
server_name your-domain.com www.your-domain.com;
# 安全头部
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
# 前端静态文件
root /var/www/idc-frontend;
index index.html;
# 静态资源缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
# 前端路由(SPA支持)
location / {
try_files $uri $uri/ /index.html;
}
# API代理
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# 超时设置
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
# 日志配置
access_log /var/log/nginx/idc_assest-access.log;
error_log /var/log/nginx/idc_assest-error.log;
}
# HTTPS配置(推荐)
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL证书配置(使用Let's Encrypt
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL安全配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
# HSTS
add_header Strict-Transport-Security "max-age=63072000" always;
# 其他配置同HTTP
root /var/www/idc-frontend;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
}
# HTTP重定向到HTTPS
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
```
3. **启用站点并重启Nginx**
```bash
# 启用站点
sudo ln -s /etc/nginx/sites-available/idc_assest /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
sudo systemctl enable nginx
```
#### SSL证书配置(推荐)
1. **安装Certbot**
```bash
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install certbot python3-certbot-nginx
```
2. **获取SSL证书**
```bash
# 自动配置SSL证书
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# 设置自动续期
sudo crontab -e
# 添加以下行:
0 12 * * * /usr/bin/certbot renew --quiet
```
---
## 🗄️ 数据库配置
### 数据库选择建议
| 数据库类型 | 适用场景 | 优势 | 劣势 |
|------------|----------|------|------|
| **SQLite** | 开发环境、小规模应用、个人使用 | 零配置、无需安装、数据文件便携 | 并发能力有限、大数据量性能差 |
| **MySQL** | 生产环境、企业级应用、大规模数据 | 高性能、并发处理能力强、数据完整性好 | 需要额外配置和维护 |
### SQLite配置(推荐开发使用)
1. **默认配置**
```env
# .env 文件中保持默认配置
DB_TYPE=sqlite
DB_PATH=./idc_management.db
NODE_ENV=development
```
2. **文件位置管理**
```bash
# 备份SQLite数据库
mkdir -p backup
cp backend/idc_management.db backup/database_$(date +%Y%m%d_%H%M%S).db
# 查看数据库信息
sqlite3 backend/idc_management.db ".schema"
sqlite3 backend/idc_management.db ".tables"
```
### MySQL配置(推荐生产使用)
1. **创建生产数据库**
```sql
-- 创建专用数据库
CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建专用用户
CREATE USER 'idc_prod_user'@'localhost' IDENTIFIED BY 'secure_password_123!';
GRANT ALL PRIVILEGES ON idc_management.* TO 'idc_prod_user'@'localhost';
FLUSH PRIVILEGES;
```
2. **配置生产环境变量**
```env
# .env 文件
NODE_ENV=production
DB_TYPE=mysql
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USERNAME=idc_prod_user
MYSQL_PASSWORD=secure_password_123!
MYSQL_DATABASE=idc_management
```
### 数据备份与恢复
#### 1. 自动备份脚本
```bash
#!/bin/bash
# backup_database.sh - 自动数据库备份脚本
# 设置备份目录
BACKUP_DIR="/var/backups/idc_assest"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="$BACKUP_DIR/database_$DATE"
# 创建备份目录
mkdir -p $BACKUP_DIR
# SQLite备份
if [ -f "backend/idc_management.db" ]; then
cp backend/idc_management.db "$BACKUP_FILE.db"
echo "SQLite备份完成: $BACKUP_FILE.db"
fi
# MySQL备份
mysqldump -u idc_prod_user -pYourPassword123! idc_management > "$BACKUP_FILE.sql"
if [ $? -eq 0 ]; then
echo "MySQL备份完成: $BACKUP_FILE.sql"
fi
# 压缩备份文件
gzip "$BACKUP_FILE.db"
gzip "$BACKUP_FILE.sql"
# 清理30天前的备份
find $BACKUP_DIR -name "database_*.gz" -mtime +30 -delete
echo "备份任务完成"
```
#### 2. 定时任务配置
```bash
# 添加到crontab
crontab -e
# 每天凌晨2点执行备份
0 2 * * * /path/to/backup_database.sh
# 每周日凌晨3点执行完整备份
0 3 * * 0 /path/to/full_backup.sh
```
#### 3. 数据恢复
**SQLite恢复**
```bash
# 停止应用
pm2 stop idc-backend
# 恢复数据库
cp backup/database_20240101.db backend/idc_management.db
# 重启应用
pm2 start idc-backend
```
**MySQL恢复**
```bash
# 停止应用
pm2 stop idc-backend
# 恢复数据库
gunzip backup/database_20240101.sql.gz
mysql -u idc_prod_user -p idc_management < backup/database_20240101.sql
# 重启应用
pm2 start idc-backend
```
### 监控和维护
#### 1. 数据库健康检查
```bash
#!/bin/bash
# health_check.sh - 数据库健康检查
# 检查SQLite
if [ -f "backend/idc_management.db" ]; then
echo "SQLite数据库文件存在"
sqlite3 backend/idc_management.db "PRAGMA integrity_check;"
else
echo "SQLite数据库文件不存在"
fi
# 检查MySQL
mysql -u idc_prod_user -pYourPassword123! -e "SELECT 1;" idc_management > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "MySQL连接正常"
else
echo "MySQL连接失败"
fi
```
#### 2. 性能监控
```sql
-- MySQL性能监控查询
SHOW PROCESSLIST;
SHOW ENGINE INNODB STATUS;
SELECT * FROM information_schema.innodb_trx;
SELECT * FROM information_schema.innodb_locks;
```
---
## 🔧 常见问题解决
### 1. 端口冲突
```bash
# 检查端口占用
netstat -tulpn | grep :8000
netstat -tulpn | grep :3000
# 修改端口
PORT=8001 npm run dev # 后端
npm run dev -- --port 3001 # 前端
```
### 2. 权限问题
```bash
# Linux/macOS权限修复
chmod +x backend/server.js
chown -R $USER:$USER backend/
```
### 3. 依赖安装失败
```bash
# 清理缓存重新安装
npm cache clean --force
rm -rf node_modules package-lock.json
npm install
```
### 4. 数据库连接失败
**SQLite连接问题**
- 检查数据库文件权限
- 确保有写入权限
- 验证磁盘空间充足
**MySQL连接问题**
- 检查MySQL服务是否运行:`systemctl status mysql``netstat -tulpn | grep :3306`
- 验证MySQL连接参数是否正确
- 确保数据库已创建:`CREATE DATABASE idc_management;`
- 检查MySQL用户权限
- 查看MySQL错误日志
---
## 📊 监控和维护
### 服务监控
```bash
# 检查服务状态
curl http://localhost:8000/health
# 查看日志
pm2 logs idc-backend
```
### 数据迁移
```bash
# 导出数据
node scripts/export-data.js
# 导入数据
node scripts/import-data.js backup/data.json
```
### 性能优化
#### 1. PM2性能配置
```javascript
// ecosystem.config.js
module.exports = {
apps: [{
name: 'idc-backend',
script: 'server.js',
instances: 'max', // 使用所有CPU核心
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 8000
},
max_memory_restart: '1G', // 内存超过1G自动重启
node_args: '--max-old-space-size=1024'
}]
};
```
#### 2. 数据库优化
```sql
-- MySQL性能优化
SET GLOBAL innodb_buffer_pool_size = 1073741824; -- 1GB
SET GLOBAL query_cache_size = 67108864; -- 64MB
-- 创建索引优化查询
CREATE INDEX idx_device_rack ON devices(rackId);
CREATE INDEX idx_device_type ON devices(deviceType);
```
---
## 🔒 安全配置
### 1. 防火墙配置
```bash
# Ubuntu/Debian UFW
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
# CentOS/RHEL firewalld
sudo firewall-cmd --set-default-zone=public
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
```
### 2. 系统安全加固
```bash
# 更新系统
sudo apt update && sudo apt upgrade -y
# 配置fail2ban防止暴力破解
sudo apt install fail2ban
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
# 配置SSH密钥登录
ssh-keygen -t rsa -b 4096
ssh-copy-id user@server-ip
```
### 3. 应用程序安全
```env
# .env 生产环境安全配置
NODE_ENV=production
PORT=8000
# 设置强密码
DATABASE_PASSWORD=ComplexPassword123!@#
# 启用HTTPS(使用反向代理)
FORCE_HTTPS=true
# 设置会话密钥
SESSION_SECRET=random_session_secret_key_here
```
---
## 📞 技术支持
如果在安装部署过程中遇到问题,请:
1. **查看日志文件**
- 后端日志:`pm2 logs idc-backend`
- Nginx日志:`tail -f /var/log/nginx/idc_assest-error.log`
2. **检查服务状态**
```bash
pm2 status
sudo systemctl status nginx
```
3. **验证配置文件**
```bash
# 测试Nginx配置
sudo nginx -t
# 测试数据库连接
mysql -u idc_prod_user -p -e "SELECT 1;" idc_management
```
---
**🎉 部署完成后,您就可以开始使用IDC设备管理系统了!**
---
**⭐ 如果这个部署指南对您有帮助,请给我们一个Star!**
+565 -147
View File
@@ -1,180 +1,598 @@
# IDC设备管理系统
一个基于React+Node.js+MySQL的IDC设备管理系统,用于管理IDC机房中的设备、机柜和机房信息。
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D14.0.0-brightgreen.svg)](https://nodejs.org/)
[![React](https://img.shields.io/badge/React-18.2.0-blue.svg)](https://reactjs.org/)
[![Status](https://img.shields.io/badge/Status-Production%20Ready-success.svg)]()
## 功能特点
一个现代化的数据中心(IDC)设备管理系统,提供机房、机柜、设备的全生命周期管理,具备3D可视化展示功能。
### 后端功能
- 机房管理(增删改查)
- 机柜管理(增删改查)
- 设备管理(增删改查)
- 功率统计与管理
- 设备状态监控
## 📋 目录
### 前端功能
- 仪表盘:设备、机柜、机房统计信息
- 设备管理:设备列表、搜索、筛选、添加、编辑、删除
- 机柜管理:机柜列表、搜索、筛选、添加、编辑、删除
- 机房管理:机房列表、搜索、筛选、添加、编辑、删除
- [系统概述](#系统概述)
- [项目架构](#项目架构)
- [技术栈说明](#技术栈说明)
- [API接口文档](#api接口文档)
- [安装部署指南](#安装部署指南)
- [功能特性](#功能特性)
- [开发团队](#开发团队)
- [许可证](#许可证)
## 技术栈
---
### 前端
- React 18
- Ant Design 5
- Vite 4
- React Router 6
- Axios
## 🎯 系统概述
### 后端
- Node.js
- Express.js
- Sequelize
- MySQL
### 核心功能
## 项目结构
IDC设备管理系统是一个专为数据中心设计的综合性管理平台,提供以下核心功能:
- **🏢 机房管理**:管理多个机房的详细信息、容量和使用状态
- **🗄️ 机柜管理**:机柜的增删改查,支持按机房分类管理
- **💻 设备管理**:服务器、网络设备、存储设备的全生命周期管理
- **📊 数据看板**:实时监控数据中心整体运行状态
- **🎮 3D可视化**:三维机柜可视化展示,支持设备悬停详情查看
- **🔧 设备字段管理**:可配置的设备属性字段管理系统
### 主要特点
- **现代化UI**:基于Ant Design的专业企业级界面
- **响应式设计**:支持桌面和移动端访问
- **实时交互**:悬停显示设备详细信息
- **数据可视化**:直观的图表和统计信息
- **级联选择**:机房→机柜的智能选择机制
- **3D渲染**Three.js实现的三维可视化效果
### 应用场景
- 数据中心运营管理
- IT资产盘点与跟踪
- 机房容量规划
- 设备维护管理
- 故障快速定位
- 合规性审计
---
## 🏗️ 项目架构
### 整体架构图
```
idc-device-management/
├── backend/ # 后端代码
├── models/ # 数据库模型
│ ├── Room.js # 机房模型
│ ├── Rack.js # 机柜模型
│ └── Device.js # 设备模型
│ ├── routes/ # API路由
│ │ ├── rooms.js # 机房路由
│ │ ├── racks.js # 机柜路由
│ │ └── devices.js # 设备路由
│ ├── server.js # 服务器主文件
│ └── package.json # 后端依赖
├── frontend/ # 前端代码
│ ├── src/ # 前端源码
│ │ ├── pages/ # 页面组件
│ │ │ ├── Dashboard.jsx # 仪表盘
│ │ │ ├── DeviceManagement.jsx # 设备管理
│ │ │ ├── RackManagement.jsx # 机柜管理
│ │ │ └── RoomManagement.jsx # 机房管理
│ │ ├── App.jsx # 应用主组件
│ │ ├── main.jsx # 应用入口
│ │ └── index.css # 全局样式
│ ├── index.html # HTML模板
│ ├── vite.config.js # Vite配置
│ └── package.json # 前端依赖
└── package.json # 项目依赖
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 前端应用 │ │ 后端API │ │ 数据库层 │
│ │
React + Vite │◄──►│ Express + │◄──►│ SQLite/MySQL + │
Ant Design │ │ Sequelize │ │ Sequelize ORM │
Three.js │ │ RESTful API │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
```
## 安装与运行
### 系统模块划分
### 1. 安装依赖
#### 前端模块 (`frontend/src/pages/`)
- **Dashboard.jsx** - 数据看板和统计图表
- **RoomManagement.jsx** - 机房管理界面
- **RackManagement.jsx** - 机柜管理界面
- **DeviceManagement.jsx** - 设备管理界面
- **DeviceFieldManagement.jsx** - 设备字段管理
- **RackVisualization.jsx** - 3D机柜可视化界面
#### 后端模块 (`backend/`)
- **models/** - 数据模型定义
- `Room.js` - 机房模型
- `Rack.js` - 机柜模型
- `Device.js` - 设备模型
- `DeviceField.js` - 设备字段模型
- **routes/** - API路由处理
- `rooms.js` - 机房相关API
- `racks.js` - 机柜相关API
- `devices.js` - 设备相关API
- `deviceFields.js` - 设备字段API
### 数据流图
```
用户操作 ──► 前端组件 ──► HTTP请求 ──► Express路由 ──► Sequelize ORM ──► SQLite数据库
▲ │
│ ▼
└─────────────────── 响应数据流向 ←────────────────────────────────────────┘
```
### 组件关系图
```
App.jsx (根组件)
├── Layout (布局组件)
│ ├── Sider (侧边导航)
│ └── Content (主内容区)
└── Routes (路由组件)
├── Dashboard
├── RoomManagement
├── RackManagement
├── DeviceManagement
├── DeviceFieldManagement
└── RackVisualization
```
---
## 🛠️ 技术栈说明
### 前端技术栈
| 技术 | 版本 | 用途 | 选择原因 |
|------|------|------|----------|
| **React** | 18.2.0 | 前端框架 | 现代化、组件化、生态丰富 |
| **Vite** | 4.4.9 | 构建工具 | 快速开发服务器、HMR支持 |
| **Ant Design** | 5.8.6 | UI组件库 | 企业级组件、主题定制 |
| **Axios** | 1.5.0 | HTTP客户端 | Promise-based、拦截器支持 |
| **React Router** | 6.15.0 | 路由管理 | 声明式路由、代码分割 |
| **Three.js** | 0.160.0 | 3D渲染 | 强大的3D图形库 |
| **@ant-design/icons** | 6.1.0 | 图标库 | 统一的视觉语言 |
### 后端技术栈
| 技术 | 版本 | 用途 | 选择原因 |
|------|------|------|----------|
| **Node.js** | ≥14.0.0 | 运行时环境 | JavaScript全栈、高性能 |
| **Express** | 4.18.2 | Web框架 | 简洁灵活、中间件丰富 |
| **Sequelize** | 6.32.1 | ORM框架 | 数据库抽象、多数据库支持 |
| **SQLite/MySQL** | 5.1.6/8.0+ | 数据库 | SQLite零配置、MySQL高性能 |
| **CORS** | 2.8.5 | 跨域处理 | 前后端分离架构必需 |
| **CSV-Parser** | 3.2.0 | CSV处理 | 数据导入导出功能 |
| **Nodemon** | 3.0.1 | 开发工具 | 自动重启、开发效率 |
### 开发工具
- **Git** - 版本控制
- **ESLint/Prettier** - 代码规范
- **Postman** - API测试
- **VSCode** - 开发IDE
---
## 📡 API接口文档
### 基础信息
- **Base URL**: `http://localhost:8000/api`
- **Content-Type**: `application/json`
- **响应格式**: JSON
### 通用响应格式
#### 成功响应
```json
{
"success": true,
"data": {...},
"message": "操作成功"
}
```
#### 错误响应
```json
{
"success": false,
"error": "错误信息",
"message": "详细描述"
}
```
### 机房管理API
#### 1. 获取所有机房
```http
GET /api/rooms
```
**响应示例**:
```json
[
{
"roomId": "room001",
"name": "A区机房",
"location": "一楼东侧",
"area": 500,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
]
```
#### 2. 创建机房
```http
POST /api/rooms
```
**请求参数**:
```json
{
"roomId": "room002",
"name": "B区机房",
"location": "二楼西侧",
"area": 600
}
```
**响应示例**:
```json
{
"roomId": "room002",
"name": "B区机房",
"location": "二楼西侧",
"area": 600,
"createdAt": "2024-01-01T00:00:00.000Z",
"updatedAt": "2024-01-01T00:00:00.000Z"
}
```
#### 3. 更新机房
```http
PUT /api/rooms/:roomId
```
#### 4. 删除机房
```http
DELETE /api/rooms/:roomId
```
### 机柜管理API
#### 1. 获取所有机柜
```http
GET /api/racks
```
**查询参数**:
- `roomId`: 按机房ID筛选
**响应示例**:
```json
[
{
"rackId": "rack001",
"name": "机柜A1",
"height": 42,
"powerRating": 5000,
"Room": {
"roomId": "room001",
"name": "A区机房"
},
"Devices": []
}
]
```
#### 2. 创建机柜
```http
POST /api/racks
```
**请求参数**:
```json
{
"rackId": "rack002",
"name": "机柜A2",
"height": 42,
"powerRating": 5000,
"RoomId": "room001"
}
```
#### 3. 更新机柜
```http
PUT /api/racks/:rackId
```
#### 4. 删除机柜
```http
DELETE /api/racks/:rackId
```
#### 5. 获取单个机柜详情
```http
GET /api/racks/:rackId
```
### 设备管理API
#### 1. 获取所有设备
```http
GET /api/devices
```
**查询参数**:
- `rackId`: 按机柜ID筛选
- `deviceType`: 按设备类型筛选
**响应示例**:
```json
[
{
"deviceId": "dev001",
"name": "Web服务器01",
"deviceType": "服务器",
"manufacturer": "Dell",
"model": "R740",
"rackPosition": 1,
"height": 2,
"ipAddress": "192.168.1.100",
"macAddress": "00:1B:44:11:3A:B7",
"status": "运行中",
"purchaseDate": "2023-01-01",
"warrantyDate": "2026-01-01",
"description": "主要Web应用服务器",
"Rack": {
"rackId": "rack001",
"name": "机柜A1"
}
}
]
```
#### 2. 创建设备
```http
POST /api/devices
```
**请求参数**:
```json
{
"deviceId": "dev002",
"name": "数据库服务器",
"deviceType": "服务器",
"manufacturer": "HP",
"model": "DL380",
"rackId": "rack001",
"rackPosition": 3,
"height": 2,
"ipAddress": "192.168.1.101",
"status": "运行中"
}
```
#### 3. 更新设备
```http
PUT /api/devices/:deviceId
```
#### 4. 删除设备
```http
DELETE /api/devices/:deviceId
```
#### 5. 批量导入设备
```http
POST /api/devices/batch-import
```
**Content-Type**: `multipart/form-data`
**请求参数**:
- `file`: CSV格式的设备数据文件
### 设备字段管理API
#### 1. 获取所有设备字段
```http
GET /api/deviceFields
```
#### 2. 创建设备字段
```http
POST /api/deviceFields
```
**请求参数**:
```json
{
"fieldName": "cpuModel",
"displayName": "CPU型号",
"fieldType": "text",
"isRequired": false,
"defaultValue": ""
}
```
#### 3. 更新设备字段
```http
PUT /api/deviceFields/:id
```
#### 4. 删除设备字段
```http
DELETE /api/deviceFields/:id
```
### 健康检查API
#### 服务状态检查
```http
GET /health
```
**响应示例**:
```json
{
"status": "ok",
"message": "IDC设备管理系统后端服务正常运行"
}
```
---
## 🚀 安装部署指南
### 环境要求
#### 开发环境
- **Node.js**: ≥14.0.0
- **npm**: ≥6.0.0 或 **yarn**: ≥1.22.0
- **操作系统**: Windows 10/11, macOS 10.14+, Linux (Ubuntu 18.04+)
- **内存**: 最小 4GB RAM
- **硬盘**: 最小 2GB 可用空间
#### 生产环境
- **Node.js**: ≥14.0.0
- **npm**: ≥6.0.0 或 **yarn**: ≥1.22.0
- **Web服务器**: Nginx (推荐) 或 Apache
- **操作系统**: Linux (Ubuntu 18.04+, CentOS 7+, RHEL 7+)
- **内存**: 最小 8GB RAM (推荐 16GB+)
- **硬盘**: 最小 10GB 可用空间 (SSD 推荐)
- **SSL证书**: Let's Encrypt (推荐) 或其他CA证书
### 快速开始
#### 1. 克隆项目
```bash
# 安装所有依赖
npm run install:all
git clone https://gitee.com/zhang1106/idc_assest.git
cd idc_assest
```
### 2. 配置数据库
1. 创建MySQL数据库:
```sql
CREATE DATABASE idc_management;
```
2. 修改后端数据库连接配置(backend/server.js):
```javascript
const sequelize = new Sequelize({
dialect: 'mysql',
host: 'localhost',
port: 3306,
username: 'root', // 修改为你的MySQL用户名
password: 'password', // 修改为你的MySQL密码
database: 'idc_management'
});
```
### 3. 启动服务
```bash
# 同时启动前后端服务
npm start
# 或分别启动
npm run start:backend # 启动后端服务(端口:3001
npm run start:frontend # 启动前端服务(端口:3000
```
### 4. 访问系统
前端地址:http://localhost:3000
后端API地址:http://localhost:3001
## API接口
### 机房管理
- GET /api/rooms - 获取所有机房
- GET /api/rooms/:roomId - 获取单个机房
- POST /api/rooms - 创建机房
- PUT /api/rooms/:roomId - 更新机房
- DELETE /api/rooms/:roomId - 删除机房
### 机柜管理
- GET /api/racks - 获取所有机柜
- GET /api/racks/:rackId - 获取单个机柜
- POST /api/racks - 创建机柜
- PUT /api/racks/:rackId - 更新机柜
- DELETE /api/racks/:rackId - 删除机柜
### 设备管理
- GET /api/devices - 获取所有设备
- GET /api/devices/:deviceId - 获取单个设备
- POST /api/devices - 创建设备
- PUT /api/devices/:deviceId - 更新设备
- DELETE /api/devices/:deviceId - 删除设备
## 开发说明
### 后端开发
1. 进入后端目录:
#### 2. 安装后端依赖
```bash
cd backend
```
2. 安装依赖:
```bash
npm install
```
3. 启动开发服务器:
```bash
npm run dev
```
### 前端开发
1. 进入前端目录:
```bash
cd frontend
```
2. 安装依赖:
#### 3. 安装前端依赖
```bash
cd ../frontend
npm install
```
3. 启动开发服务器:
#### 4. 配置环境变量
```bash
npm run dev
# 复制环境变量示例文件
cp .env.example .env
# 编辑 .env 文件,根据需要修改配置
# 默认配置可直接使用 SQLite 数据库
```
## 注意事项
#### 5. 启动服务
```bash
# 启动后端服务(端口8000
cd backend && npm run dev
1. 确保MySQL服务已经启动
2. 首次运行需要创建数据库
3. 设备创建时会自动更新机柜的当前功率
4. 设备更新或删除时会自动调整机柜的当前功率
5. 机柜删除前需要确保没有关联的设备
6. 机房删除前需要确保没有关联的机柜
# 启动前端服务(端口3000)- 新终端
cd frontend && npm run dev
```
## License
**访问地址**
- 前端应用:http://localhost:3000
- 后端APIhttp://localhost:8000/api
- 健康检查:http://localhost:8000/health
MIT
### 详细安装和部署指南
📚 **完整安装部署文档**:请参考 [DEPLOYMENT.md](./DEPLOYMENT.md)
该文档包含:
- 🖥️ 开发环境详细配置
- 🚀 生产环境完整部署流程
- 🗄️ 数据库配置和管理
- 🔒 安全配置和优化
- 📊 监控和维护指南
- 🛠️ 常见问题解决方案
### 数据库选择
| 数据库类型 | 适用场景 | 优势 | 劣势 |
|------------|----------|------|------|
| **SQLite** | 开发环境、小规模应用 | 零配置、无需安装、数据文件便携 | 并发能力有限 |
| **MySQL** | 生产环境、企业级应用 | 高性能、并发处理能力强 | 需要额外配置 |
**默认配置使用 SQLite,无需额外配置即可开始使用。**
---
## ✨ 功能特性
### 🏢 机房管理
- 多机房支持
- 机房详细信息记录
- 按机房分类管理机柜
### 🗄️ 机柜管理
- 机柜的增删改查
- 机柜容量统计
- 可视化机柜状态
### 💻 设备管理
- 设备全生命周期管理
- 批量导入/导出功能
- 设备状态跟踪
- 自定义设备字段
### 📊 数据看板
- 实时统计图表
- 设备状态分布
- 容量使用率分析
- 关键指标监控
### 🎮 3D可视化
- 三维机柜展示
- 设备悬停详情
- 实时交互体验
- 视角控制功能
### 🔧 系统特性
- 响应式设计
- 现代化UI界面
- 级联选择机制
- 数据实时刷新
---
## 📄 许可证
本项目采用 [MIT 许可证](LICENSE)。
```
MIT License
Copyright (c) 2024 IDC Management System
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
---
## 🤝 贡献指南
我们欢迎所有形式的贡献!请阅读 [CONTRIBUTING.md](CONTRIBUTING.md) 了解详细信息。
### 贡献方式
- 🐛 报告Bug
- 💡 提出新功能建议
- 📝 改进文档
- 🔧 提交代码补丁
### 开发流程
1. Fork本项目
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启Pull Request
**⭐ 如果这个项目对您有帮助,请给我们一个Star!**
+37
View File
@@ -0,0 +1,37 @@
# IDC设备管理系统环境配置示例
# 复制此文件为 .env 并根据需要修改配置
# ==============================================
# 服务器配置
# ==============================================
# 服务器端口(默认8000
# 如需修改,请设置为其他端口号
PORT=8000
# 运行环境(development/production
# development: 开发模式,详细日志便于调试
# production: 生产模式,性能优化,减少日志输出
NODE_ENV=development
# ==============================================
# 数据库配置
# ==============================================
# 数据库类型:sqlite(默认)或 mysql
# sqlite: 零配置嵌入式数据库,适合开发和小规模应用
# mysql: 关系型数据库,适合生产环境和大规模应用
DB_TYPE=sqlite
# SQLite 配置(当DB_TYPE=sqlite时使用)
# SQLite数据库文件路径,文件会自动创建
DB_PATH=./idc_management.db
# MySQL 配置(当DB_TYPE=mysql时使用)
# 注意:使用MySQL前请确保MySQL服务已安装并创建相应的数据库
# 数据库创建命令:CREATE DATABASE idc_management CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MYSQL_HOST=localhost # MySQL服务器地址
MYSQL_PORT=3306 # MySQL端口号
MYSQL_USERNAME=root # MySQL用户名
MYSQL_PASSWORD= # MySQL密码(为空则无密码)
MYSQL_DATABASE=idc_management # MySQL数据库名
+27 -5
View File
@@ -1,9 +1,31 @@
const { Sequelize } = require('sequelize');
// 创建并导出sequelize实例
const sequelize = new Sequelize({
dialect: 'sqlite',
storage: './idc_management.db' // SQLite数据库文件路径
});
// 获取数据库配置
const DB_TYPE = process.env.DB_TYPE || 'sqlite'; // 数据库类型:sqlite 或 mysql
// 根据数据库类型创建连接
let sequelize;
if (DB_TYPE === 'mysql') {
// MySQL 配置
sequelize = new Sequelize(
process.env.MYSQL_DATABASE || 'idc_management',
process.env.MYSQL_USERNAME || 'root',
process.env.MYSQL_PASSWORD || '',
{
host: process.env.MYSQL_HOST || 'localhost',
port: parseInt(process.env.MYSQL_PORT) || 3306,
dialect: 'mysql',
logging: process.env.NODE_ENV === 'development' ? console.log : false
}
);
} else {
// SQLite 配置(默认)
sequelize = new Sequelize({
dialect: 'sqlite',
storage: process.env.DB_PATH || './idc_management.db',
logging: process.env.NODE_ENV === 'development' ? console.log : false
});
}
module.exports = { sequelize };
+130
View File
@@ -11,9 +11,11 @@
"cors": "^2.8.5",
"csv-parser": "^3.2.0",
"csv-writer": "^1.6.0",
"dotenv": "^17.2.3",
"express": "^4.18.2",
"express-fileupload": "^1.5.2",
"iconv-lite": "^0.6.3",
"mysql2": "^3.16.0",
"sequelize": "^6.32.1",
"sqlite3": "^5.1.6",
"three": "^0.182.0"
@@ -232,6 +234,15 @@
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"license": "MIT"
},
"node_modules/aws-ssl-profiles": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz",
"integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==",
"license": "MIT",
"engines": {
"node": ">= 6.0.0"
}
},
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -630,6 +641,15 @@
"license": "MIT",
"optional": true
},
"node_modules/denque": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
"integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
"license": "Apache-2.0",
"engines": {
"node": ">=0.10"
}
},
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -658,6 +678,18 @@
"node": ">=8"
}
},
"node_modules/dotenv": {
"version": "17.2.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
"integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
},
"funding": {
"url": "https://dotenvx.com"
}
},
"node_modules/dottie": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz",
@@ -973,6 +1005,15 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/generate-function": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
"integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
"license": "MIT",
"dependencies": {
"is-property": "^1.0.2"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -1408,6 +1449,12 @@
"node": ">=0.12.0"
}
},
"node_modules/is-property": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
"integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==",
"license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
@@ -1421,6 +1468,12 @@
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
"license": "MIT"
},
"node_modules/long": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/long/-/long-5.3.2.tgz",
"integrity": "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==",
"license": "Apache-2.0"
},
"node_modules/lru-cache": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
@@ -1434,6 +1487,21 @@
"node": ">=10"
}
},
"node_modules/lru.min": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.3.tgz",
"integrity": "sha512-Lkk/vx6ak3rYkRR0Nhu4lFUT2VDnQSxBe8Hbl7f36358p6ow8Bnvr8lrLt98H8J1aGxfhbX4Fs5tYg2+FTwr5Q==",
"license": "MIT",
"engines": {
"bun": ">=1.0.0",
"deno": ">=1.30.0",
"node": ">=8.0.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/wellwelwel"
}
},
"node_modules/make-fetch-happen": {
"version": "9.1.0",
"resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
@@ -1705,6 +1773,54 @@
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
"license": "MIT"
},
"node_modules/mysql2": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.16.0.tgz",
"integrity": "sha512-AEGW7QLLSuSnjCS4pk3EIqOmogegmze9h8EyrndavUQnIUcfkVal/sK7QznE+a3bc6rzPbAiui9Jcb+96tPwYA==",
"license": "MIT",
"dependencies": {
"aws-ssl-profiles": "^1.1.1",
"denque": "^2.1.0",
"generate-function": "^2.3.1",
"iconv-lite": "^0.7.0",
"long": "^5.2.1",
"lru.min": "^1.0.0",
"named-placeholders": "^1.1.3",
"seq-queue": "^0.0.5",
"sqlstring": "^2.3.2"
},
"engines": {
"node": ">= 8.0"
}
},
"node_modules/mysql2/node_modules/iconv-lite": {
"version": "0.7.1",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz",
"integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==",
"license": "MIT",
"dependencies": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
},
"engines": {
"node": ">=0.10.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/express"
}
},
"node_modules/named-placeholders": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.6.tgz",
"integrity": "sha512-Tz09sEL2EEuv5fFowm419c1+a/jSMiBjI9gHxVLrVdbUkkNUUfjsVYs9pVZu5oCon/kmRh9TfLEObFtkVxmY0w==",
"license": "MIT",
"dependencies": {
"lru.min": "^1.1.0"
},
"engines": {
"node": ">=8.0.0"
}
},
"node_modules/napi-build-utils": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
@@ -2233,6 +2349,11 @@
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/seq-queue": {
"version": "0.0.5",
"resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz",
"integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q=="
},
"node_modules/sequelize": {
"version": "6.37.7",
"resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.37.7.tgz",
@@ -2582,6 +2703,15 @@
}
}
},
"node_modules/sqlstring": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz",
"integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==",
"license": "MIT",
"engines": {
"node": ">= 0.6"
}
},
"node_modules/ssri": {
"version": "8.0.1",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
+2
View File
@@ -10,9 +10,11 @@
"cors": "^2.8.5",
"csv-parser": "^3.2.0",
"csv-writer": "^1.6.0",
"dotenv": "^17.2.3",
"express": "^4.18.2",
"express-fileupload": "^1.5.2",
"iconv-lite": "^0.6.3",
"mysql2": "^3.16.0",
"sequelize": "^6.32.1",
"sqlite3": "^5.1.6",
"three": "^0.182.0"
+1
View File
@@ -1,3 +1,4 @@
require('dotenv').config();
const express = require('express');
const cors = require('cors');
const fileUpload = require('express-fileupload');