# 宁夏智慧养殖监管平台 环境配置文档 ## 版本历史 | 版本 | 日期 | 作者 | 描述 | |------|------|------|------| | v1.0 | 2025-01-20 | 开发团队 | 初始版本 | ## 1. 环境概述 ### 1.1 环境分类 本项目包含以下几种环境: - **开发环境 (Development)**: 本地开发使用 - **测试环境 (Testing)**: QA测试使用 - **预生产环境 (Staging)**: 用户验收测试使用 - **生产环境 (Production)**: 正式运行环境 ### 1.2 技术栈要求 **基础环境:** - Node.js: 18.0+ (推荐 LTS 版本) - npm: 8.0+ 或 yarn: 1.22+ 或 pnpm: 7.0+ - MySQL: 8.0+ - Redis: 6.0+ - Git: 2.25+ **开发工具:** - Visual Studio Code (推荐) - Postman (API测试) - MySQL Workbench (数据库管理) ## 2. 开发环境配置 ### 2.1 Node.js 安装 #### 2.1.1 使用 nvm 管理 Node.js 版本 **macOS/Linux:** ```bash # 安装 nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # 重启终端或执行 source ~/.bashrc # 安装并使用 Node.js 18 nvm install 18 nvm use 18 nvm alias default 18 ``` **Windows:** ```bash # 下载并安装 nvm-windows # https://github.com/coreybutler/nvm-windows/releases # 安装 Node.js nvm install 18.19.0 nvm use 18.19.0 ``` #### 2.1.2 验证安装 ```bash node --version # 应显示 v18.x.x npm --version # 应显示 8.x.x 或更高 ``` ### 2.2 数据库配置 #### 2.2.1 MySQL 安装 **macOS (使用 Homebrew):** ```bash brew install mysql brew services start mysql ``` **Ubuntu/Debian:** ```bash sudo apt update sudo apt install mysql-server sudo systemctl start mysql sudo systemctl enable mysql ``` **Windows:** 下载并安装 MySQL Community Server: https://dev.mysql.com/downloads/mysql/ #### 2.2.2 数据库初始化 ```bash # 登录 MySQL mysql -u root -p # 创建数据库 CREATE DATABASE nxxm_farming_dev CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; # 创建用户 CREATE USER 'nxxm_dev'@'localhost' IDENTIFIED BY 'dev_password_123'; GRANT ALL PRIVILEGES ON nxxm_farming_dev.* TO 'nxxm_dev'@'localhost'; FLUSH PRIVILEGES; ``` ### 2.3 Redis 配置 #### 2.3.1 Redis 安装 **macOS:** ```bash brew install redis brew services start redis ``` **Ubuntu/Debian:** ```bash sudo apt update sudo apt install redis-server sudo systemctl start redis-server sudo systemctl enable redis-server ``` **Windows:** 下载并安装 Redis for Windows: https://github.com/microsoftarchive/redis/releases #### 2.3.2 验证 Redis ```bash redis-cli ping # 应返回 PONG ``` ### 2.4 项目配置 #### 2.4.1 克隆项目 ```bash git clone https://github.com/nxxmdata/smart-farming-platform.git cd smart-farming-platform ``` #### 2.4.2 安装依赖 **后端依赖:** ```bash cd backend npm install ``` **前端依赖:** ```bash cd admin-system npm install ``` **小程序依赖:** ```bash cd bank_mini_program npm install ``` #### 2.4.3 环境变量配置 **后端环境变量 (.env):** ```bash # 复制环境变量模板 cp backend/.env.example backend/.env # 编辑环境变量 vim backend/.env ``` ```env # 服务器配置 NODE_ENV=development PORT=5350 # 数据库配置 DB_HOST=localhost DB_PORT=3306 DB_NAME=nxxm_farming_dev DB_USER=nxxm_dev DB_PASSWORD=dev_password_123 DB_DIALECT=mysql # Redis 配置 REDIS_HOST=localhost REDIS_PORT=6379 REDIS_PASSWORD= # JWT 配置 JWT_SECRET=your_jwt_secret_key_here JWT_EXPIRES_IN=24h # 文件上传配置 UPLOAD_PATH=./uploads UPLOAD_MAX_SIZE=10485760 # 日志配置 LOG_LEVEL=debug LOG_FILE=logs/app.log ``` **前端环境变量 (.env.development):** ```env # API 配置 VITE_API_BASE_URL=http://localhost:5350/api VITE_API_TIMEOUT=10000 # 百度地图配置 VITE_BAIDU_MAP_AK=your_baidu_map_ak # 上传配置 VITE_UPLOAD_URL=http://localhost:5350/api/upload ``` ## 3. 数据库迁移 ### 3.1 运行迁移 ```bash cd backend npm run migrate ``` ### 3.2 填充种子数据 ```bash npm run seed ``` ### 3.3 重置数据库 ```bash npm run db:reset ``` ## 4. 启动项目 ### 4.1 启动后端服务 ```bash cd backend npm run dev ``` ### 4.2 启动前端服务 ```bash cd admin-system npm run dev ``` ### 4.3 启动小程序开发 ```bash cd bank_mini_program npm run dev:mp-weixin ``` ### 4.4 验证服务 ```bash # 检查后端服务 curl http://localhost:5350/api/health # 检查前端服务 # 浏览器访问 http://localhost:3000 ``` ## 5. 测试环境配置 ### 5.1 环境变量 **后端测试环境 (.env.test):** ```env NODE_ENV=test PORT=5351 # 测试数据库 DB_NAME=nxxm_farming_test DB_USER=nxxm_test DB_PASSWORD=test_password_123 # 其他配置保持与开发环境一致 ``` ### 5.2 测试数据库初始化 ```bash # 创建测试数据库 mysql -u root -p -e "CREATE DATABASE nxxm_farming_test CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" # 运行测试迁移 NODE_ENV=test npm run migrate ``` ### 5.3 运行测试 ```bash # 后端测试 cd backend npm test # 前端测试 cd admin-system npm run test # 小程序测试 cd bank_mini_program npm test ``` ## 6. 生产环境配置 ### 6.1 服务器要求 **最低配置:** - CPU: 2核 - 内存: 4GB - 存储: 50GB SSD - 网络: 10Mbps **推荐配置:** - CPU: 4核 - 内存: 8GB - 存储: 100GB SSD - 网络: 100Mbps ### 6.2 环境变量 **生产环境 (.env.production):** ```env NODE_ENV=production PORT=5350 # 数据库配置 DB_HOST=your_production_db_host DB_PORT=3306 DB_NAME=nxxm_farming_prod DB_USER=nxxm_prod DB_PASSWORD=your_secure_password # Redis 配置 REDIS_HOST=your_redis_host REDIS_PORT=6379 REDIS_PASSWORD=your_redis_password # JWT 配置 JWT_SECRET=your_very_secure_jwt_secret JWT_EXPIRES_IN=24h # HTTPS 配置 HTTPS_ENABLED=true SSL_CERT_PATH=/path/to/cert.pem SSL_KEY_PATH=/path/to/key.pem # 日志配置 LOG_LEVEL=info LOG_FILE=/var/log/nxxm-farming/app.log ``` ### 6.3 部署脚本 **部署脚本 (deploy.sh):** ```bash #!/bin/bash # 拉取最新代码 git pull origin main # 安装依赖 npm ci --production # 运行数据库迁移 npm run migrate # 构建前端 cd admin-system npm run build cd .. # 重启服务 pm2 restart nxxm-farming-backend pm2 restart nxxm-farming-frontend echo "部署完成" ``` ## 7. Docker 配置 ### 7.1 Dockerfile **后端 Dockerfile:** ```dockerfile FROM node:18-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --only=production COPY . . EXPOSE 5350 CMD ["npm", "start"] ``` **前端 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 ``` ### 7.2 Docker Compose **docker-compose.yml:** ```yaml version: '3.8' services: backend: build: ./backend ports: - "5350:5350" environment: - NODE_ENV=production - DB_HOST=mysql - REDIS_HOST=redis depends_on: - mysql - redis frontend: build: ./admin-system ports: - "80:80" depends_on: - backend mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: rootpassword MYSQL_DATABASE: nxxm_farming_prod MYSQL_USER: nxxm_prod MYSQL_PASSWORD: prodpassword volumes: - mysql_data:/var/lib/mysql redis: image: redis:6-alpine volumes: - redis_data:/data volumes: mysql_data: redis_data: ``` ## 8. 监控和日志 ### 8.1 日志配置 **Winston 日志配置:** ```javascript const winston = require('winston'); const logger = winston.createLogger({ level: process.env.LOG_LEVEL || 'info', format: winston.format.combine( winston.format.timestamp(), winston.format.errors({ stack: true }), winston.format.json() ), transports: [ new winston.transports.File({ filename: 'logs/error.log', level: 'error' }), new winston.transports.File({ filename: 'logs/combined.log' }) ] }); if (process.env.NODE_ENV !== 'production') { logger.add(new winston.transports.Console({ format: winston.format.simple() })); } ``` ### 8.2 健康检查 **健康检查端点:** ```javascript app.get('/api/health', async (req, res) => { try { // 检查数据库连接 await sequelize.authenticate(); // 检查 Redis 连接 await redis.ping(); res.json({ status: 'healthy', timestamp: new Date().toISOString(), services: { database: 'connected', redis: 'connected' } }); } catch (error) { res.status(503).json({ status: 'unhealthy', error: error.message }); } }); ``` ## 9. 故障排除 ### 9.1 常见问题 #### 9.1.1 端口占用 ```bash # 查看端口占用 lsof -i :5350 # 杀死进程 kill -9 ``` #### 9.1.2 数据库连接失败 ```bash # 检查 MySQL 服务状态 sudo systemctl status mysql # 重启 MySQL 服务 sudo systemctl restart mysql # 检查数据库连接 mysql -u nxxm_dev -p -h localhost ``` #### 9.1.3 Redis 连接失败 ```bash # 检查 Redis 服务状态 sudo systemctl status redis # 重启 Redis 服务 sudo systemctl restart redis # 测试 Redis 连接 redis-cli ping ``` ### 9.2 性能优化 #### 9.2.1 数据库优化 ```sql -- 添加索引 CREATE INDEX idx_farm_status ON farms(status); CREATE INDEX idx_animal_farm_id ON animals(farm_id); -- 查看慢查询 SHOW VARIABLES LIKE 'slow_query_log'; SET GLOBAL slow_query_log = 'ON'; ``` #### 9.2.2 Redis 缓存优化 ```javascript // 缓存配置 const redis = new Redis({ host: process.env.REDIS_HOST, port: process.env.REDIS_PORT, maxRetriesPerRequest: 3, retryDelayOnFailover: 100, lazyConnect: true }); ``` ## 10. 安全配置 ### 10.1 HTTPS 配置 **Nginx HTTPS 配置:** ```nginx server { listen 443 ssl http2; server_name api.nxxmdata.com; ssl_certificate /path/to/cert.pem; ssl_certificate_key /path/to/key.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; 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; } } ``` ### 10.2 防火墙配置 **UFW 防火墙配置:** ```bash # 启用防火墙 sudo ufw enable # 允许 SSH sudo ufw allow ssh # 允许 HTTP/HTTPS sudo ufw allow 80 sudo ufw allow 443 # 允许应用端口(仅内网) sudo ufw allow from 10.0.0.0/8 to any port 5350 ``` ## 11. 备份和恢复 ### 11.1 数据库备份 **自动备份脚本:** ```bash #!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backup/mysql" DB_NAME="nxxm_farming_prod" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份数据库 mysqldump -u root -p$MYSQL_ROOT_PASSWORD $DB_NAME > $BACKUP_DIR/backup_$DATE.sql # 压缩备份文件 gzip $BACKUP_DIR/backup_$DATE.sql # 删除7天前的备份 find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -delete ``` ### 11.2 文件备份 **文件备份脚本:** ```bash #!/bin/bash DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/backup/files" SOURCE_DIR="/app/uploads" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份文件 tar -czf $BACKUP_DIR/files_$DATE.tar.gz -C $SOURCE_DIR . # 删除30天前的备份 find $BACKUP_DIR -name "files_*.tar.gz" -mtime +30 -delete ``` --- **最后更新**: 2025年1月20日 **文档版本**: v1.0 **维护团队**: 宁夏智慧养殖平台开发团队