680 lines
11 KiB
Markdown
680 lines
11 KiB
Markdown
|
|
# 宁夏智慧养殖监管平台 环境配置文档
|
|||
|
|
|
|||
|
|
## 版本历史
|
|||
|
|
|
|||
|
|
| 版本 | 日期 | 作者 | 描述 |
|
|||
|
|
|------|------|------|------|
|
|||
|
|
| 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 <PID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 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
|
|||
|
|
**维护团队**: 宁夏智慧养殖平台开发团队
|