2025-08-31 23:29:26 +08:00
|
|
|
|
# 爱鉴花小程序 - 部署操作指南
|
|
|
|
|
|
|
|
|
|
|
|
## 📋 概述
|
|
|
|
|
|
|
|
|
|
|
|
本文档提供「爱鉴花」小程序项目的完整部署指南,涵盖开发、测试、生产环境的部署流程和运维操作。
|
|
|
|
|
|
|
|
|
|
|
|
## 🚀 环境准备
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 系统要求
|
|
|
|
|
|
- **操作系统**: Ubuntu 20.04+ / CentOS 7+
|
|
|
|
|
|
- **Node.js**: 16.0.0+
|
|
|
|
|
|
- **MySQL**: 8.0+
|
|
|
|
|
|
- **Redis**: 6.0+
|
|
|
|
|
|
- **Nginx**: 1.18+
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 依赖安装
|
|
|
|
|
|
|
|
|
|
|
|
#### 后端依赖
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
npm install
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 前端依赖
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd mini_program
|
|
|
|
|
|
npm install
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔧 环境配置
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 数据库配置
|
|
|
|
|
|
|
|
|
|
|
|
#### 创建配置文件
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 复制环境变量模板
|
|
|
|
|
|
cp backend/.env.example backend/.env.development
|
|
|
|
|
|
|
|
|
|
|
|
# 编辑配置文件
|
|
|
|
|
|
vim backend/.env.development
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 环境变量配置示例
|
|
|
|
|
|
```env
|
|
|
|
|
|
# 应用配置
|
|
|
|
|
|
NODE_ENV=development
|
|
|
|
|
|
PORT=3000
|
|
|
|
|
|
APP_NAME=爱鉴花小程序后端
|
|
|
|
|
|
|
2025-09-01 01:05:53 +08:00
|
|
|
|
# 数据库配置(开发环境使用SQLite,生产环境使用MySQL)
|
|
|
|
|
|
DB_TYPE=sqlite # 开发环境使用sqlite,生产环境使用mysql
|
2025-08-31 23:29:26 +08:00
|
|
|
|
DB_HOST=192.168.0.240
|
|
|
|
|
|
DB_PORT=3306
|
|
|
|
|
|
DB_USERNAME=root
|
|
|
|
|
|
DB_PASSWORD=aiot$Aiot123
|
|
|
|
|
|
DB_DATABASE=ajhdata
|
2025-09-01 01:05:53 +08:00
|
|
|
|
SQLITE_DB_PATH=./database.sqlite # SQLite数据库文件路径
|
2025-08-31 23:29:26 +08:00
|
|
|
|
|
|
|
|
|
|
# Redis配置
|
|
|
|
|
|
REDIS_HOST=127.0.0.1
|
|
|
|
|
|
REDIS_PORT=6379
|
|
|
|
|
|
REDIS_PASSWORD=
|
|
|
|
|
|
|
|
|
|
|
|
# 腾讯云配置
|
|
|
|
|
|
TENCENT_CLOUD_SECRET_ID=your_secret_id
|
|
|
|
|
|
TENCENT_CLOUD_SECRET_KEY=your_secret_key
|
|
|
|
|
|
COS_BUCKET=your_bucket_name
|
|
|
|
|
|
COS_REGION=ap-beijing
|
|
|
|
|
|
|
|
|
|
|
|
# 微信小程序配置
|
|
|
|
|
|
WX_APPID=your_wechat_appid
|
|
|
|
|
|
WX_APPSECRET=your_wechat_appsecret
|
|
|
|
|
|
|
|
|
|
|
|
# JWT配置
|
|
|
|
|
|
JWT_SECRET=your_jwt_secret_key
|
|
|
|
|
|
JWT_EXPIRE=7d
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 数据库初始化
|
|
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 验证数据库连接
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
npm run db:check
|
|
|
|
|
|
|
|
|
|
|
|
# 完整数据库初始化
|
|
|
|
|
|
npm run db:init
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🏗️ 构建部署
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 后端服务部署
|
|
|
|
|
|
|
|
|
|
|
|
#### 开发环境启动
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
npm run dev
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 生产环境构建
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装生产依赖
|
|
|
|
|
|
npm install --production
|
|
|
|
|
|
|
|
|
|
|
|
# 启动生产服务
|
|
|
|
|
|
npm start
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### PM2进程管理
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装PM2
|
|
|
|
|
|
npm install -g pm2
|
|
|
|
|
|
|
|
|
|
|
|
# 启动服务
|
|
|
|
|
|
pm2 start app.js --name aijianhua-backend
|
|
|
|
|
|
|
|
|
|
|
|
# 查看服务状态
|
|
|
|
|
|
pm2 status
|
|
|
|
|
|
|
|
|
|
|
|
# 设置开机自启
|
|
|
|
|
|
pm2 startup
|
|
|
|
|
|
pm2 save
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 前端小程序部署
|
|
|
|
|
|
|
|
|
|
|
|
#### 开发环境
|
|
|
|
|
|
```bash
|
|
|
|
|
|
cd mini_program
|
|
|
|
|
|
npm run dev:mp-weixin
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 生产构建
|
|
|
|
|
|
```bash
|
|
|
|
|
|
npm run build:mp-weixin
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 微信开发者工具
|
|
|
|
|
|
1. 打开微信开发者工具
|
|
|
|
|
|
2. 导入项目目录 `mini_program`
|
|
|
|
|
|
3. 配置AppID和项目设置
|
|
|
|
|
|
4. 点击"上传"发布体验版
|
|
|
|
|
|
|
|
|
|
|
|
### 3. Nginx配置
|
|
|
|
|
|
|
|
|
|
|
|
#### 创建Nginx配置文件
|
|
|
|
|
|
```nginx
|
|
|
|
|
|
server {
|
|
|
|
|
|
listen 80;
|
|
|
|
|
|
server_name api.aijianhua.com;
|
|
|
|
|
|
|
|
|
|
|
|
# API反向代理
|
|
|
|
|
|
location /api/ {
|
|
|
|
|
|
proxy_pass http://localhost:3000;
|
|
|
|
|
|
proxy_set_header Host $host;
|
|
|
|
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
|
|
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 静态资源服务
|
|
|
|
|
|
location /static/ {
|
|
|
|
|
|
alias /path/to/static/files/;
|
|
|
|
|
|
expires 30d;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# 健康检查
|
|
|
|
|
|
location /health {
|
|
|
|
|
|
access_log off;
|
|
|
|
|
|
return 200 "healthy\n";
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 启用配置
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 检查配置语法
|
|
|
|
|
|
nginx -t
|
|
|
|
|
|
|
|
|
|
|
|
# 重新加载配置
|
|
|
|
|
|
nginx -s reload
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📊 监控运维
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 日志管理
|
|
|
|
|
|
|
|
|
|
|
|
#### 查看应用日志
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# PM2日志
|
|
|
|
|
|
pm2 logs aijianhua-backend
|
|
|
|
|
|
|
|
|
|
|
|
# Nginx访问日志
|
|
|
|
|
|
tail -f /var/log/nginx/access.log
|
|
|
|
|
|
|
|
|
|
|
|
# Nginx错误日志
|
|
|
|
|
|
tail -f /var/log/nginx/error.log
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 日志轮转配置
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 安装logrotate
|
|
|
|
|
|
sudo apt-get install logrotate
|
|
|
|
|
|
|
|
|
|
|
|
# 创建日志轮转配置
|
|
|
|
|
|
sudo vim /etc/logrotate.d/aijianhua
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 性能监控
|
|
|
|
|
|
|
|
|
|
|
|
#### 系统监控
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看系统负载
|
|
|
|
|
|
top
|
|
|
|
|
|
htop
|
|
|
|
|
|
|
|
|
|
|
|
# 查看磁盘使用
|
|
|
|
|
|
df -h
|
|
|
|
|
|
|
|
|
|
|
|
# 查看内存使用
|
|
|
|
|
|
free -h
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 应用监控
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看Node.js进程
|
|
|
|
|
|
pm2 monit
|
|
|
|
|
|
|
|
|
|
|
|
# 查看数据库连接
|
|
|
|
|
|
mysql -u root -p -e "SHOW PROCESSLIST;"
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 备份恢复
|
|
|
|
|
|
|
|
|
|
|
|
#### 数据库备份
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 全量备份
|
|
|
|
|
|
mysqldump -u root -p ajhdata > backup_$(date +%Y%m%d).sql
|
|
|
|
|
|
|
|
|
|
|
|
# 压缩备份
|
|
|
|
|
|
gzip backup_$(date +%Y%m%d).sql
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 文件备份
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 备份重要文件
|
|
|
|
|
|
tar -czf backup_$(date +%Y%m%d).tar.gz /path/to/important/files
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🔒 安全配置
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 防火墙配置
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 启用防火墙
|
|
|
|
|
|
sudo ufw enable
|
|
|
|
|
|
|
|
|
|
|
|
# 开放必要端口
|
|
|
|
|
|
sudo ufw allow 22 # SSH
|
|
|
|
|
|
sudo ufw allow 80 # HTTP
|
|
|
|
|
|
sudo ufw allow 443 # HTTPS
|
|
|
|
|
|
sudo ufw allow 3000 # Node.js
|
|
|
|
|
|
|
|
|
|
|
|
# 查看防火墙状态
|
|
|
|
|
|
sudo ufw status
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. SSL证书配置
|
|
|
|
|
|
|
|
|
|
|
|
#### 申请证书
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 使用Certbot申请SSL证书
|
|
|
|
|
|
sudo apt-get install certbot python3-certbot-nginx
|
|
|
|
|
|
sudo certbot --nginx -d api.aijianhua.com
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 自动续期
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 测试续期
|
|
|
|
|
|
sudo certbot renew --dry-run
|
|
|
|
|
|
|
|
|
|
|
|
# 设置定时任务
|
|
|
|
|
|
sudo crontab -e
|
|
|
|
|
|
# 添加:0 12 * * * /usr/bin/certbot renew --quiet
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 3. 安全加固
|
|
|
|
|
|
|
|
|
|
|
|
#### 数据库安全
|
|
|
|
|
|
```sql
|
|
|
|
|
|
-- 创建专用用户
|
|
|
|
|
|
CREATE USER 'aijianhua'@'localhost' IDENTIFIED BY 'strong_password';
|
|
|
|
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON ajhdata.* TO 'aijianhua'@'localhost';
|
|
|
|
|
|
FLUSH PRIVILEGES;
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 文件权限
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 设置正确的文件权限
|
|
|
|
|
|
chmod 600 /path/to/config/file
|
|
|
|
|
|
chmod 700 /path/to/executable
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 🚨 故障处理
|
|
|
|
|
|
|
|
|
|
|
|
### 1. 常见问题
|
|
|
|
|
|
|
|
|
|
|
|
#### 端口冲突
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看端口占用
|
|
|
|
|
|
netstat -tlnp | grep :3000
|
|
|
|
|
|
lsof -i :3000
|
|
|
|
|
|
|
|
|
|
|
|
# 杀死进程
|
|
|
|
|
|
kill -9 <PID>
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 服务无法启动
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 查看错误详情
|
|
|
|
|
|
npm start 2>&1 | tee error.log
|
|
|
|
|
|
|
|
|
|
|
|
# 检查依赖
|
|
|
|
|
|
npm ls --depth=0
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 数据库连接失败
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 测试数据库连接
|
|
|
|
|
|
mysql -h 192.168.0.240 -P 3306 -u root -p
|
|
|
|
|
|
|
|
|
|
|
|
# 检查MySQL服务状态
|
|
|
|
|
|
sudo systemctl status mysql
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### 2. 应急响应
|
|
|
|
|
|
|
|
|
|
|
|
#### 服务重启
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 重启Node.js服务
|
|
|
|
|
|
pm2 restart aijianhua-backend
|
|
|
|
|
|
|
|
|
|
|
|
# 重启Nginx
|
|
|
|
|
|
sudo systemctl restart nginx
|
|
|
|
|
|
|
|
|
|
|
|
# 重启MySQL
|
|
|
|
|
|
sudo systemctl restart mysql
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
#### 回滚部署
|
|
|
|
|
|
```bash
|
|
|
|
|
|
# 回滚到上一个版本
|
|
|
|
|
|
pm2 restart aijianhua-backend --update-env
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## 📞 支持联系
|
|
|
|
|
|
|
|
|
|
|
|
### 运维团队
|
|
|
|
|
|
- **值班电话**: 138-0013-8000
|
|
|
|
|
|
- **技术支持**: tech@aijianhua.com
|
|
|
|
|
|
- **紧急响应**: emergency@aijianhua.com
|
|
|
|
|
|
|
|
|
|
|
|
### 监控平台
|
|
|
|
|
|
- **应用性能**: NewRelic / Datadog
|
|
|
|
|
|
- **错误监控**: Sentry
|
|
|
|
|
|
- **日志分析**: ELK Stack
|
|
|
|
|
|
- **业务监控**: Grafana
|
|
|
|
|
|
|
|
|
|
|
|
---
|
|
|
|
|
|
*最后更新: 2024-01-15*
|
|
|
|
|
|
*文档版本: v1.0*
|