841 lines
16 KiB
Markdown
841 lines
16 KiB
Markdown
|
|
# 宁夏智慧养殖监管平台部署文档
|
|||
|
|
|
|||
|
|
## 版本历史
|
|||
|
|
|
|||
|
|
| 版本 | 日期 | 修改内容 | 修改人 |
|
|||
|
|
|------|------|----------|--------|
|
|||
|
|
| 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
|
|||
|
|
- **微信群**: 宁夏智慧养殖技术支持群
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**注意**: 本文档会根据系统更新持续维护,请定期查看最新版本。
|