Files
jiebanke/DEPLOYMENT.md

459 lines
7.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 部署指南
## 📋 部署概述
本文档详细描述了杰邦科项目的部署流程,包括开发环境、测试环境和生产环境的部署步骤。
## 🛠️ 环境要求
### 系统要求
- **操作系统**: Ubuntu 20.04+ / CentOS 7+ / macOS 10.15+
- **内存**: 最低 2GB推荐 4GB+
- **存储**: 最低 10GB 可用空间
- **网络**: 稳定的互联网连接
### 软件要求
- **Node.js**: 16.x 或 18.x
- **MySQL**: 8.0+
- **Redis**: 6.0+ (可选)
- **Docker**: 20.10+ (可选)
- **npm**: 8.x+
## 🏗️ 开发环境部署
### 1. 克隆项目
```bash
git clone <repository-url>
cd jiebanke
```
### 2. 安装依赖
```bash
# 安装后端依赖
cd backend
npm install
# 安装前端依赖
cd ../admin-system
npm install
cd ../mini-program
npm install
cd ../website
npm install
```
### 3. 配置环境变量
```bash
# 复制环境变量模板
cp backend/.env.example backend/.env
# 编辑环境变量
vim backend/.env
```
### 4. 启动数据库
```bash
# 使用Docker启动MySQL
cd backend
docker-compose up -d mysql
# 或者使用本地MySQL
mysql -u root -p < scripts/init-database.sql
```
### 5. 启动应用
```bash
# 启动后端服务
cd backend
npm run dev
# 启动后台管理系统 (新终端)
cd admin-system
npm run dev
# 启动官方网站 (新终端)
cd website
npm run dev
```
### 6. 验证部署
- 后端API: http://localhost:3000/api/v1/health
- 后台管理: http://localhost:3001
- 官方网站: http://localhost:3002
## 🧪 测试环境部署
### 1. 服务器准备
```bash
# 登录测试服务器
ssh user@test-server
# 创建项目目录
mkdir -p /opt/jiebanke
cd /opt/jiebanke
```
### 2. 部署脚本
```bash
#!/bin/bash
# deploy-test.sh
# 拉取最新代码
git pull origin develop
# 安装依赖
cd backend && npm install --production
cd ../admin-system && npm install --production && npm run build
cd ../website && npm install --production && npm run build
# 重启服务
pm2 restart all
```
### 3. 环境配置
```bash
# 测试环境变量
cat > /opt/jiebanke/backend/.env << EOF
NODE_ENV=test
DB_HOST=192.168.0.240
DB_PORT=3306
DB_USER=root
DB_PASSWORD=aiotAiot123!
DB_DATABASE=jiebandata_test
JWT_SECRET=your-test-jwt-secret
EOF
```
### 4. 进程管理
```bash
# 使用PM2管理进程
npm install -g pm2
# 启动服务
pm2 start ecosystem.config.js --env test
# 查看状态
pm2 status
```
## 🚀 生产环境部署
### 1. 服务器准备
```bash
# 购买云服务器 (阿里云/腾讯云/AWS)
# 配置安全组: 开放80, 443, 3000, 3306, 6379端口
# 服务器初始化
apt update && apt upgrade -y
apt install -y nginx mysql-server redis-server
```
### 2. 数据库部署
```bash
# 安装MySQL
apt install -y mysql-server
# 安全配置
mysql_secure_installation
# 创建生产数据库
mysql -u root -p -e "CREATE DATABASE jiebandata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入数据
mysql -u root -p jiebandata < scripts/prod-database.sql
```
### 3. 应用部署
```bash
# 创建部署用户
adduser deploy
usermod -aG sudo deploy
# 项目目录
mkdir -p /home/deploy/jiebanke
chown deploy:deploy /home/deploy/jiebanke
```
### 4. 自动化部署脚本
```bash
#!/bin/bash
# deploy-prod.sh
set -e
# 变量配置
APP_NAME="jiebanke"
APP_DIR="/home/deploy/jiebanke"
BRANCH="main"
echo "🚀 开始部署 $APP_NAME..."
# 拉取代码
echo "📦 拉取最新代码..."
cd $APP_DIR
git fetch origin
git checkout $BRANCH
git reset --hard origin/$BRANCH
# 安装依赖
echo "🔧 安装依赖..."
cd backend && npm install --production
cd ../admin-system && npm install --production && npm run build
cd ../website && npm install --production && npm run build
# 数据库迁移
echo "🗄️ 执行数据库迁移..."
cd backend
npm run db:migrate
# 重启服务
echo "🔄 重启服务..."
pm2 reload ecosystem.config.js --env production
# 清理
echo "🧹 清理临时文件..."
npm cache clean --force
echo "✅ 部署完成!"
echo "🌐 应用地址: https://your-domain.com"
```
### 5. Nginx 配置
```nginx
# /etc/nginx/sites-available/jiebanke
server {
listen 80;
server_name your-domain.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 / {
root /home/deploy/jiebanke/admin-system/dist;
index index.html;
try_files $uri $uri/ /index.html;
}
}
```
### 6. SSL证书配置
```bash
# 安装Certbot
apt install -y certbot python3-certbot-nginx
# 获取SSL证书
certbot --nginx -d your-domain.com
# 自动续期
certbot renew --dry-run
```
## 📊 监控与日志
### 应用监控
```bash
# 安装PM2监控
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
# 监控面板
pm2 monitor
```
### 日志管理
```bash
# 查看实时日志
pm2 logs
# 查看特定应用日志
pm2 logs backend
# 日志文件位置
/root/.pm2/logs/
/var/log/nginx/
/var/log/mysql/
```
### 性能监控
```bash
# 安装监控工具
apt install -y htop iotop nmon
# 监控系统资源
top
htop
# 监控磁盘使用
df -h
```
## 🔒 安全配置
### 防火墙配置
```bash
# 配置UFW防火墙
apt install -y ufw
ufw allow ssh
ufw allow http
ufw allow https
ufw enable
```
### 数据库安全
```bash
# 修改MySQL默认端口
vim /etc/mysql/mysql.conf.d/mysqld.cnf
# port = 3307
# 创建应用专用用户
mysql -u root -p -e "
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'strongpassword';
GRANT SELECT, INSERT, UPDATE, DELETE ON jiebandata.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
"
```
### SSH安全
```bash
# 禁用root登录
vim /etc/ssh/sshd_config
# PermitRootLogin no
# 使用密钥认证
# PasswordAuthentication no
# 重启SSH
systemctl restart sshd
```
## 📦 容器化部署
### Docker Compose
```yaml
# docker-compose.prod.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=root
- DB_PASSWORD=rootpassword
depends_on:
- mysql
mysql:
image: mysql:8.0
environment:
- MYSQL_ROOT_PASSWORD=rootpassword
- MYSQL_DATABASE=jiebandata
volumes:
- mysql_data:/var/lib/mysql
ports:
- "3306:3306"
volumes:
mysql_data:
```
### Kubernetes部署
```yaml
# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: jiebanke-backend
spec:
replicas: 3
template:
spec:
containers:
- name: app
image: jiebanke-backend:latest
ports:
- containerPort: 3000
env:
- name: NODE_ENV
value: "production"
```
## 🚨 故障排除
### 常见问题
1. **端口占用**
```bash
# 查找占用端口的进程
lsof -i :3000
# 杀死进程
kill -9 <PID>
```
2. **权限问题**
```bash
# 修改文件权限
chown -R deploy:deploy /home/deploy/jiebanke
chmod -R 755 /home/deploy/jiebanke
```
3. **数据库连接失败**
```bash
# 检查MySQL服务
systemctl status mysql
# 检查防火墙
ufw status
```
### 日志分析
```bash
# 查看错误日志
tail -f /var/log/nginx/error.log
# 查看应用日志
tail -f /root/.pm2/logs/backend-error.log
# 数据库日志
tail -f /var/log/mysql/error.log
```
## 📞 支持与维护
### 紧急联系人
- **运维团队**: ops@company.com
- **开发团队**: dev@company.com
- **值班电话**: +86-138-0013-8000
### 维护窗口
- **常规维护**: 每周四凌晨 2:00-4:00
- **紧急维护**: 随时响应
- **系统监控**: 7x24小时
### 备份策略
```bash
# 数据库备份
mysqldump -u root -p jiebandata > backup-$(date +%Y%m%d).sql
# 文件备份
tar -czf backup-$(date +%Y%m%d).tar.gz /home/deploy/jiebanke
# 上传到云存储
rclone copy backup-* remote:backups/
```
---
*最后更新: 2024年* 📅