# 宁夏智慧养殖监管平台部署文档 ## 版本历史 | 版本 | 日期 | 修改内容 | 修改人 | |------|------|----------|--------| | v1.0 | 2024-01-15 | 初始版本,基础部署流程 | 开发团队 | | v2.0 | 2024-01-20 | 全面重构,增加多端部署和容器化支持 | 开发团队 | ## 1. 部署概述 ### 1.1 部署架构 本平台采用前后端分离架构,支持多端部署: - **后端服务**: Node.js + Express + MySQL - **管理后台**: Vue.js 3 + Ant Design Vue - **官网大屏**: Vue.js 3 + ECharts - **微信小程序**: 原生小程序开发 - **移动端应用**: 基于 Vue.js 的响应式设计 ### 1.2 部署环境 - **开发环境**: 本地开发调试 - **测试环境**: 功能测试和集成测试 - **预生产环境**: 性能测试和用户验收 - **生产环境**: 正式运行环境 ## 2. 系统要求 ### 2.1 基础要求 - **操作系统**: Linux (推荐 Ubuntu 20.04+), CentOS 8+, macOS 11+, Windows 10+ - **Node.js**: 18.0+ (推荐 18.17.0) - **MySQL**: 8.0+ (推荐 8.0.33) - **Redis**: 6.0+ (推荐 7.0.11) - **Nginx**: 1.18+ (生产环境) ### 2.2 硬件要求 #### 开发环境 - **CPU**: 2核心 - **内存**: 8GB RAM - **存储**: 50GB 可用空间 - **网络**: 10Mbps #### 生产环境 - **CPU**: 8核心或更高 - **内存**: 32GB RAM - **存储**: 500GB SSD - **网络**: 100Mbps 专线 - **负载均衡**: 支持高可用部署 ### 2.3 软件依赖 ```bash # 必需软件 - Node.js 18.17.0+ - MySQL 8.0.33+ - Redis 7.0.11+ - PM2 (生产环境进程管理) - Nginx (反向代理和静态文件服务) # 可选软件 - Docker & Docker Compose (容器化部署) - Git (版本控制) - SSL证书 (HTTPS支持) ``` ## 3. 环境准备 ### 3.1 系统环境检查 ```bash # 检查 Node.js 版本 node --version # 应显示 v18.17.0 或更高 # 检查 npm 版本 npm --version # 应显示 9.0.0 或更高 # 检查 MySQL 版本 mysql --version # 应显示 8.0.33 或更高 # 检查 Redis 版本 redis-server --version # 应显示 7.0.11 或更高 ``` ### 3.2 数据库初始化 ```sql -- 创建主数据库 CREATE DATABASE nxxmdata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建测试数据库 CREATE DATABASE nxxmdata_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 创建专用用户 CREATE USER 'nxxmdata_user'@'%' IDENTIFIED BY 'NxxmData2024!@#'; GRANT ALL PRIVILEGES ON nxxmdata.* TO 'nxxmdata_user'@'%'; GRANT ALL PRIVILEGES ON nxxmdata_test.* TO 'nxxmdata_user'@'%'; FLUSH PRIVILEGES; -- 优化配置 SET GLOBAL innodb_buffer_pool_size = 2147483648; -- 2GB SET GLOBAL max_connections = 1000; SET GLOBAL query_cache_size = 268435456; -- 256MB ``` ### 3.3 Redis 配置 ```bash # Redis 配置文件 /etc/redis/redis.conf bind 127.0.0.1 port 6379 timeout 300 tcp-keepalive 60 maxmemory 1gb maxmemory-policy allkeys-lru save 900 1 save 300 10 save 60 10000 ``` ## 4. 源码部署 ### 4.1 获取源码 ```bash # 方式1: Git克隆 git clone https://github.com/your-org/nxxmdata.git cd nxxmdata # 方式2: 下载压缩包 wget https://github.com/your-org/nxxmdata/archive/main.zip unzip main.zip cd nxxmdata-main # 检查项目结构 ls -la # 应该看到: backend/, admin-system/, website/, mini-app/, docs/ ``` ### 4.2 后端服务部署 #### 4.2.1 安装依赖 ```bash cd backend npm install --production # 安装全局依赖 npm install -g pm2 nodemon ``` #### 4.2.2 环境配置 创建 `backend/.env` 文件: ```bash # 应用配置 NODE_ENV=production PORT=5350 APP_NAME=宁夏智慧养殖监管平台 # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_NAME=nxxmdata DB_USER=nxxmdata_user DB_PASSWORD=NxxmData2024!@# DB_POOL_MIN=5 DB_POOL_MAX=20 # Redis配置 REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= REDIS_DB=0 # JWT配置 JWT_SECRET=nxxmdata_jwt_secret_2024_very_secure_key JWT_EXPIRES_IN=24h JWT_REFRESH_EXPIRES_IN=7d # 文件上传配置 UPLOAD_PATH=/var/www/nxxmdata/uploads MAX_FILE_SIZE=10485760 ALLOWED_FILE_TYPES=jpg,jpeg,png,gif,pdf,doc,docx,xls,xlsx # 第三方服务配置 BAIDU_MAP_AK=your_baidu_map_api_key WECHAT_APPID=your_wechat_appid WECHAT_SECRET=your_wechat_secret # 邮件配置 SMTP_HOST=smtp.qq.com SMTP_PORT=587 SMTP_USER=your_email@qq.com SMTP_PASS=your_email_password # 日志配置 LOG_LEVEL=info LOG_PATH=/var/log/nxxmdata ``` #### 4.2.3 数据库迁移 ```bash # 运行数据库迁移 npm run migrate # 初始化基础数据 npm run seed # 验证数据库连接 npm run db:check ``` #### 4.2.4 启动后端服务 ```bash # 开发环境 npm run dev # 生产环境 npm run start # 使用PM2管理进程 pm2 start ecosystem.config.js pm2 save pm2 startup ``` ### 4.3 管理后台部署 #### 4.3.1 安装依赖 ```bash cd admin-system npm install ``` #### 4.3.2 环境配置 创建 `admin-system/.env.production` 文件: ```bash # API配置 VITE_API_BASE_URL=https://api.nxxmdata.com VITE_API_TIMEOUT=30000 # 应用配置 VITE_APP_TITLE=宁夏智慧养殖监管平台 VITE_APP_VERSION=2.0.0 VITE_APP_ENV=production # 地图配置 VITE_BAIDU_MAP_AK=your_baidu_map_api_key # 文件上传配置 VITE_UPLOAD_URL=https://api.nxxmdata.com/api/upload VITE_MAX_FILE_SIZE=10485760 # 功能开关 VITE_ENABLE_MOCK=false VITE_ENABLE_DEBUG=false ``` #### 4.3.3 构建和部署 ```bash # 构建生产版本 npm run build # 检查构建结果 ls -la dist/ # 部署到Web服务器 sudo cp -r dist/* /var/www/nxxmdata/admin/ sudo chown -R www-data:www-data /var/www/nxxmdata/admin/ ``` ### 4.4 官网大屏部署 #### 4.4.1 安装依赖 ```bash cd website npm install ``` #### 4.4.2 环境配置 创建 `website/.env.production` 文件: ```bash # API配置 VITE_API_BASE_URL=https://api.nxxmdata.com VITE_WS_URL=wss://api.nxxmdata.com/ws # 大屏配置 VITE_SCREEN_WIDTH=1920 VITE_SCREEN_HEIGHT=1080 VITE_AUTO_REFRESH_INTERVAL=30000 # 地图配置 VITE_BAIDU_MAP_AK=your_baidu_map_api_key VITE_MAP_CENTER_LNG=106.2309 VITE_MAP_CENTER_LAT=38.4872 ``` #### 4.4.3 构建和部署 ```bash # 构建生产版本 npm run build # 部署到Web服务器 sudo cp -r dist/* /var/www/nxxmdata/screen/ sudo chown -R www-data:www-data /var/www/nxxmdata/screen/ ``` ### 4.5 微信小程序部署 #### 4.5.1 配置小程序 编辑 `mini-app/project.config.json`: ```json { "appid": "your_wechat_miniprogram_appid", "projectname": "宁夏智慧养殖监管平台", "setting": { "urlCheck": true, "es6": true, "enhance": true, "postcss": true, "minified": true } } ``` #### 4.5.2 配置API地址 编辑 `mini-app/config/index.js`: ```javascript const config = { development: { baseURL: 'https://dev-api.nxxmdata.com' }, production: { baseURL: 'https://api.nxxmdata.com' } } export default config[process.env.NODE_ENV || 'production'] ``` #### 4.5.3 上传发布 ```bash # 使用微信开发者工具上传代码 # 或使用命令行工具 npm install -g miniprogram-ci npm run upload ``` ## 5. Nginx 配置 ### 5.1 安装 Nginx ```bash # Ubuntu/Debian sudo apt update sudo apt install nginx # CentOS/RHEL sudo yum install nginx ``` ### 5.2 配置文件 创建 `/etc/nginx/sites-available/nxxmdata` 文件: ```nginx # 管理后台配置 server { listen 80; server_name admin.nxxmdata.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name admin.nxxmdata.com; ssl_certificate /etc/ssl/certs/nxxmdata.crt; ssl_certificate_key /etc/ssl/private/nxxmdata.key; root /var/www/nxxmdata/admin; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:5350; 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; } location /uploads { alias /var/www/nxxmdata/uploads; expires 30d; add_header Cache-Control "public, immutable"; } } # 大屏展示配置 server { listen 80; server_name screen.nxxmdata.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name screen.nxxmdata.com; ssl_certificate /etc/ssl/certs/nxxmdata.crt; ssl_certificate_key /etc/ssl/private/nxxmdata.key; root /var/www/nxxmdata/screen; index index.html; location / { try_files $uri $uri/ /index.html; } location /api { proxy_pass http://localhost:5350; 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; } location /ws { proxy_pass http://localhost:5350; 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; } } # API服务配置 server { listen 80; server_name api.nxxmdata.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name api.nxxmdata.com; ssl_certificate /etc/ssl/certs/nxxmdata.crt; ssl_certificate_key /etc/ssl/private/nxxmdata.key; location / { proxy_pass http://localhost:5350; 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; # CORS配置 add_header Access-Control-Allow-Origin *; add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS'; add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; if ($request_method = 'OPTIONS') { return 204; } } location /uploads { alias /var/www/nxxmdata/uploads; expires 30d; add_header Cache-Control "public, immutable"; } } ``` ### 5.3 启用配置 ```bash # 创建软链接 sudo ln -s /etc/nginx/sites-available/nxxmdata /etc/nginx/sites-enabled/ # 测试配置 sudo nginx -t # 重启Nginx sudo systemctl restart nginx sudo systemctl enable nginx ``` ## 6. 容器化部署 ### 6.1 Docker 配置 #### 6.1.1 后端 Dockerfile 创建 `backend/Dockerfile`: ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 5350 CMD ["npm", "start"] ``` #### 6.1.2 前端 Dockerfile 创建 `admin-system/Dockerfile`: ```dockerfile FROM node:18-alpine as builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build FROM nginx:alpine COPY --from=builder /app/dist /usr/share/nginx/html COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80 CMD ["nginx", "-g", "daemon off;"] ``` ### 6.2 Docker Compose 配置 创建 `docker-compose.yml`: ```yaml version: '3.8' services: mysql: image: mysql:8.0 container_name: nxxmdata-mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: nxxmdata MYSQL_USER: nxxmdata_user MYSQL_PASSWORD: NxxmData2024!@# volumes: - mysql_data:/var/lib/mysql - ./backend/database/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "3306:3306" restart: unless-stopped redis: image: redis:7-alpine container_name: nxxmdata-redis ports: - "6379:6379" volumes: - redis_data:/data restart: unless-stopped backend: build: ./backend container_name: nxxmdata-backend environment: NODE_ENV: production DB_HOST: mysql REDIS_HOST: redis ports: - "5350:5350" depends_on: - mysql - redis volumes: - uploads_data:/app/uploads restart: unless-stopped admin: build: ./admin-system container_name: nxxmdata-admin ports: - "8080:80" restart: unless-stopped screen: build: ./website container_name: nxxmdata-screen ports: - "8081:80" restart: unless-stopped nginx: image: nginx:alpine container_name: nxxmdata-nginx ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/ssl:/etc/ssl - uploads_data:/var/www/uploads depends_on: - backend - admin - screen restart: unless-stopped volumes: mysql_data: redis_data: uploads_data: ``` ### 6.3 容器部署命令 ```bash # 构建和启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 查看日志 docker-compose logs -f backend # 停止服务 docker-compose down # 更新服务 docker-compose pull docker-compose up -d --force-recreate ``` ## 7. 生产环境优化 ### 7.1 性能优化 ```bash # PM2 集群模式 pm2 start ecosystem.config.js --env production # Nginx 缓存配置 location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; } # 数据库连接池优化 DB_POOL_MIN=10 DB_POOL_MAX=50 DB_POOL_IDLE=10000 DB_POOL_ACQUIRE=60000 ``` ### 7.2 安全配置 ```bash # 防火墙配置 sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable # SSL证书配置 sudo certbot --nginx -d admin.nxxmdata.com -d api.nxxmdata.com -d screen.nxxmdata.com # 定期更新证书 sudo crontab -e 0 12 * * * /usr/bin/certbot renew --quiet ``` ### 7.3 监控配置 ```bash # 安装监控工具 npm install -g pm2-logrotate pm2 install pm2-server-monit # 日志轮转 pm2 set pm2-logrotate:max_size 10M pm2 set pm2-logrotate:retain 30 pm2 set pm2-logrotate:compress true ``` ## 8. 备份与恢复 ### 8.1 数据库备份 ```bash #!/bin/bash # 创建备份脚本 /opt/nxxmdata/backup.sh DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/opt/nxxmdata/backups" DB_NAME="nxxmdata" DB_USER="nxxmdata_user" DB_PASS="NxxmData2024!@#" # 创建备份目录 mkdir -p $BACKUP_DIR # 数据库备份 mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/db_backup_$DATE.sql # 文件备份 tar -czf $BACKUP_DIR/files_backup_$DATE.tar.gz /var/www/nxxmdata/uploads # 清理7天前的备份 find $BACKUP_DIR -name "*.sql" -mtime +7 -delete find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete echo "Backup completed: $DATE" ``` ### 8.2 自动备份 ```bash # 添加到crontab sudo crontab -e 0 2 * * * /opt/nxxmdata/backup.sh >> /var/log/nxxmdata-backup.log 2>&1 ``` ### 8.3 数据恢复 ```bash # 恢复数据库 mysql -u nxxmdata_user -p nxxmdata < /opt/nxxmdata/backups/db_backup_20240120_020000.sql # 恢复文件 tar -xzf /opt/nxxmdata/backups/files_backup_20240120_020000.tar.gz -C / ``` ## 9. 故障排除 ### 9.1 常见问题 #### 9.1.1 数据库连接失败 ```bash # 检查MySQL服务状态 sudo systemctl status mysql # 检查端口占用 netstat -tlnp | grep 3306 # 检查防火墙 sudo ufw status # 测试连接 mysql -h localhost -u nxxmdata_user -p nxxmdata ``` #### 9.1.2 Node.js 服务异常 ```bash # 查看PM2进程状态 pm2 status # 查看应用日志 pm2 logs backend # 重启应用 pm2 restart backend # 查看系统资源 htop df -h ``` #### 9.1.3 Nginx 配置错误 ```bash # 测试配置文件 sudo nginx -t # 查看错误日志 sudo tail -f /var/log/nginx/error.log # 重新加载配置 sudo nginx -s reload ``` ### 9.2 性能监控 ```bash # 系统监控 htop iotop nethogs # 应用监控 pm2 monit # 数据库监控 SHOW PROCESSLIST; SHOW STATUS LIKE 'Threads_connected'; ``` ## 10. 维护计划 ### 10.1 日常维护 - **每日**: 检查系统日志和应用状态 - **每周**: 检查磁盘空间和数据库性能 - **每月**: 更新系统补丁和依赖包 - **每季度**: 性能评估和容量规划 ### 10.2 更新流程 ```bash # 1. 备份当前版本 ./backup.sh # 2. 下载新版本 git pull origin main # 3. 更新依赖 cd backend && npm install cd ../admin-system && npm install && npm run build # 4. 数据库迁移 npm run migrate # 5. 重启服务 pm2 restart all # 6. 验证功能 curl -f http://localhost:5350/api/health ``` ### 10.3 回滚计划 ```bash # 1. 停止服务 pm2 stop all # 2. 恢复代码 git checkout previous-stable-tag # 3. 恢复数据库 mysql -u nxxmdata_user -p nxxmdata < backup.sql # 4. 重启服务 pm2 start all ``` ## 11. 联系支持 ### 11.1 技术支持 - **邮箱**: support@nxxmdata.com - **电话**: 400-xxx-xxxx - **工作时间**: 周一至周五 9:00-18:00 ### 11.2 紧急联系 - **24小时热线**: 138-xxxx-xxxx - **微信群**: 宁夏智慧养殖技术支持群 --- **注意**: 本文档会根据系统更新持续维护,请定期查看最新版本。