删除过时的API文档和README文件
This commit is contained in:
708
docs/部署指南.md
Normal file
708
docs/部署指南.md
Normal file
@@ -0,0 +1,708 @@
|
||||
# 📦 结伴客系统部署指南
|
||||
|
||||
## 📋 部署概述
|
||||
|
||||
本文档详细说明了结伴客项目的完整部署流程,包括开发环境、测试环境和生产环境的部署配置。项目采用容器化部署方式,支持快速部署和弹性扩容。
|
||||
|
||||
## 🛠️ 环境要求
|
||||
|
||||
### 系统要求
|
||||
- **操作系统**:Ubuntu 20.04+ / CentOS 7+ / macOS 10.15+
|
||||
- **CPU**:最低2核,推荐4核+
|
||||
- **内存**:最低4GB,推荐8GB+
|
||||
- **存储**:最低20GB可用空间,推荐50GB+
|
||||
- **网络**:稳定的互联网连接,带宽10Mbps+
|
||||
|
||||
### 软件依赖
|
||||
|
||||
#### 基础软件
|
||||
- **Node.js**:16.x 或 18.x LTS版本
|
||||
- **npm**:8.x+ 或 yarn 1.22+
|
||||
- **Git**:2.30+
|
||||
- **Docker**:20.10+
|
||||
- **Docker Compose**:2.0+
|
||||
|
||||
#### 数据库
|
||||
- **MySQL**:8.0+
|
||||
- **Redis**:6.0+(可选,用于缓存)
|
||||
|
||||
#### 其他工具
|
||||
- **Nginx**:1.18+(用于反向代理)
|
||||
- **PM2**:5.0+(用于进程管理)
|
||||
- **微信开发者工具**:最新版本
|
||||
|
||||
## 🚀 快速部署
|
||||
|
||||
### 一键部署脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 快速部署脚本 - deploy.sh
|
||||
|
||||
echo "开始部署结伴客项目..."
|
||||
|
||||
# 1. 克隆项目
|
||||
git clone https://github.com/your-org/jiebanke.git
|
||||
cd jiebanke
|
||||
|
||||
# 2. 安装依赖
|
||||
echo "安装项目依赖..."
|
||||
npm install
|
||||
|
||||
# 3. 配置环境变量
|
||||
echo "配置环境变量..."
|
||||
cp .env.example .env
|
||||
|
||||
# 4. 初始化数据库
|
||||
echo "初始化数据库..."
|
||||
npm run db:migrate
|
||||
npm run db:seed
|
||||
|
||||
# 5. 构建项目
|
||||
echo "构建项目..."
|
||||
npm run build
|
||||
|
||||
# 6. 启动服务
|
||||
echo "启动服务..."
|
||||
npm run start:prod
|
||||
|
||||
echo "部署完成!访问 http://localhost:3000"
|
||||
```
|
||||
|
||||
### Docker一键部署
|
||||
|
||||
```bash
|
||||
# 使用Docker Compose一键部署
|
||||
docker-compose up -d
|
||||
|
||||
# 查看服务状态
|
||||
docker-compose ps
|
||||
|
||||
# 查看日志
|
||||
docker-compose logs -f
|
||||
```
|
||||
|
||||
## 🏗️ 开发环境部署
|
||||
|
||||
### 1. 环境准备
|
||||
|
||||
#### 安装Node.js
|
||||
```bash
|
||||
# 使用nvm安装Node.js
|
||||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
|
||||
source ~/.bashrc
|
||||
nvm install 18
|
||||
nvm use 18
|
||||
```
|
||||
|
||||
#### 安装MySQL
|
||||
```bash
|
||||
# Ubuntu/Debian
|
||||
sudo apt update
|
||||
sudo apt install mysql-server
|
||||
|
||||
# macOS
|
||||
brew install mysql
|
||||
brew services start mysql
|
||||
|
||||
# 创建数据库
|
||||
mysql -u root -p
|
||||
CREATE DATABASE jiebandata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
||||
CREATE USER 'jieban'@'localhost' IDENTIFIED BY 'password';
|
||||
GRANT ALL PRIVILEGES ON jiebandata.* TO 'jieban'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
```
|
||||
|
||||
### 2. 项目配置
|
||||
|
||||
#### 克隆项目代码
|
||||
```bash
|
||||
git clone https://github.com/your-org/jiebanke.git
|
||||
cd jiebanke
|
||||
```
|
||||
|
||||
#### 安装项目依赖
|
||||
```bash
|
||||
# 后端依赖
|
||||
cd backend
|
||||
npm install
|
||||
|
||||
# 前端管理系统依赖
|
||||
cd ../admin-system
|
||||
npm install
|
||||
|
||||
# 小程序依赖
|
||||
cd ../mini-program
|
||||
npm install
|
||||
|
||||
# 官网依赖
|
||||
cd ../website
|
||||
npm install
|
||||
```
|
||||
|
||||
#### 配置环境变量
|
||||
```bash
|
||||
# 复制环境变量模板
|
||||
cd backend
|
||||
cp .env.example .env
|
||||
|
||||
# 编辑环境变量
|
||||
vim .env
|
||||
```
|
||||
|
||||
**环境变量配置示例:**
|
||||
```env
|
||||
# 应用配置
|
||||
NODE_ENV=development
|
||||
PORT=3000
|
||||
APP_NAME=结伴客
|
||||
|
||||
# 数据库配置
|
||||
DB_HOST=localhost
|
||||
DB_PORT=3306
|
||||
DB_NAME=jiebandata
|
||||
DB_USER=jieban
|
||||
DB_PASSWORD=password
|
||||
|
||||
# Redis配置
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6379
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# JWT配置
|
||||
JWT_SECRET=your-jwt-secret-key
|
||||
JWT_EXPIRES_IN=7d
|
||||
|
||||
# 微信小程序配置
|
||||
WECHAT_APP_ID=your-wechat-app-id
|
||||
WECHAT_APP_SECRET=your-wechat-app-secret
|
||||
|
||||
# 文件上传配置
|
||||
UPLOAD_PATH=./uploads
|
||||
MAX_FILE_SIZE=10485760
|
||||
|
||||
# 邮件配置
|
||||
SMTP_HOST=smtp.qq.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=your-email@qq.com
|
||||
SMTP_PASS=your-email-password
|
||||
```
|
||||
|
||||
### 3. 数据库初始化
|
||||
|
||||
```bash
|
||||
# 运行数据库迁移
|
||||
cd backend
|
||||
npm run db:migrate
|
||||
|
||||
# 运行数据库种子文件
|
||||
npm run db:seed
|
||||
|
||||
# 或者直接执行SQL文件
|
||||
mysql -u jieban -p jiebandata < scripts/init-database.sql
|
||||
```
|
||||
|
||||
### 4. 启动开发服务
|
||||
|
||||
```bash
|
||||
# 启动后端服务
|
||||
cd backend
|
||||
npm run dev
|
||||
|
||||
# 启动前端管理系统(新终端)
|
||||
cd admin-system
|
||||
npm run dev
|
||||
|
||||
# 启动官网(新终端)
|
||||
cd website
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 5. 验证部署
|
||||
|
||||
访问以下地址验证部署是否成功:
|
||||
- 后端API:http://localhost:3000/api/health
|
||||
- 管理系统:http://localhost:8080
|
||||
- 官网:http://localhost:8081
|
||||
|
||||
## 🧪 测试环境部署
|
||||
|
||||
### 1. 服务器配置
|
||||
|
||||
#### 服务器信息
|
||||
- **主机**:192.168.0.240
|
||||
- **操作系统**:Ubuntu 20.04
|
||||
- **用户**:deploy
|
||||
- **部署路径**:/var/www/jiebanke
|
||||
|
||||
#### 环境变量配置
|
||||
```env
|
||||
NODE_ENV=testing
|
||||
PORT=3000
|
||||
DB_HOST=192.168.0.240
|
||||
DB_PORT=3306
|
||||
DB_NAME=jiebandata_test
|
||||
DB_USER=jieban_test
|
||||
DB_PASSWORD=test_password
|
||||
```
|
||||
|
||||
### 2. 自动化部署脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 测试环境部署脚本 - deploy-test.sh
|
||||
|
||||
SERVER_HOST="192.168.0.240"
|
||||
SERVER_USER="deploy"
|
||||
DEPLOY_PATH="/var/www/jiebanke"
|
||||
|
||||
echo "开始部署到测试环境..."
|
||||
|
||||
# 1. 构建项目
|
||||
echo "构建项目..."
|
||||
npm run build
|
||||
|
||||
# 2. 打包文件
|
||||
echo "打包部署文件..."
|
||||
tar -czf jiebanke-$(date +%Y%m%d-%H%M%S).tar.gz \
|
||||
backend/ admin-system/dist/ website/dist/ \
|
||||
package.json docker-compose.yml
|
||||
|
||||
# 3. 上传到服务器
|
||||
echo "上传文件到服务器..."
|
||||
scp jiebanke-*.tar.gz $SERVER_USER@$SERVER_HOST:$DEPLOY_PATH/
|
||||
|
||||
# 4. 远程部署
|
||||
echo "执行远程部署..."
|
||||
ssh $SERVER_USER@$SERVER_HOST << 'EOF'
|
||||
cd /var/www/jiebanke
|
||||
tar -xzf jiebanke-*.tar.gz
|
||||
docker-compose down
|
||||
docker-compose up -d --build
|
||||
docker-compose ps
|
||||
EOF
|
||||
|
||||
echo "测试环境部署完成!"
|
||||
```
|
||||
|
||||
## 🌐 生产环境部署
|
||||
|
||||
### 1. 服务器配置
|
||||
|
||||
#### 服务器信息
|
||||
- **主机**:129.211.213.226
|
||||
- **端口**:9527
|
||||
- **操作系统**:CentOS 7
|
||||
- **用户**:root
|
||||
- **部署路径**:/opt/jiebanke
|
||||
|
||||
#### 高可用架构
|
||||
```mermaid
|
||||
graph TB
|
||||
A[负载均衡器 Nginx] --> B[应用服务器1]
|
||||
A --> C[应用服务器2]
|
||||
A --> D[应用服务器3]
|
||||
B --> E[MySQL主库]
|
||||
C --> E
|
||||
D --> E
|
||||
E --> F[MySQL从库1]
|
||||
E --> G[MySQL从库2]
|
||||
B --> H[Redis集群]
|
||||
C --> H
|
||||
D --> H
|
||||
```
|
||||
|
||||
### 2. Docker容器化部署
|
||||
|
||||
#### Dockerfile配置
|
||||
```dockerfile
|
||||
# 后端服务Dockerfile
|
||||
FROM node:18-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production && npm cache clean --force
|
||||
|
||||
FROM node:18-alpine
|
||||
WORKDIR /app
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
COPY . .
|
||||
|
||||
EXPOSE 3000
|
||||
USER node
|
||||
CMD ["npm", "start"]
|
||||
```
|
||||
|
||||
#### Docker Compose配置
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
# 后端API服务
|
||||
api:
|
||||
build:
|
||||
context: ./backend
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
- NODE_ENV=production
|
||||
- DB_HOST=mysql
|
||||
- REDIS_HOST=redis
|
||||
depends_on:
|
||||
- mysql
|
||||
- redis
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jiebanke-network
|
||||
|
||||
# 前端管理系统
|
||||
admin:
|
||||
build:
|
||||
context: ./admin-system
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "8080:80"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jiebanke-network
|
||||
|
||||
# MySQL数据库
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
environment:
|
||||
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
|
||||
MYSQL_DATABASE: jiebandata
|
||||
MYSQL_USER: jieban
|
||||
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
|
||||
volumes:
|
||||
- mysql_data:/var/lib/mysql
|
||||
- ./scripts/init-database.sql:/docker-entrypoint-initdb.d/init.sql
|
||||
ports:
|
||||
- "3306:3306"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jiebanke-network
|
||||
|
||||
# Redis缓存
|
||||
redis:
|
||||
image: redis:6-alpine
|
||||
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
|
||||
volumes:
|
||||
- redis_data:/data
|
||||
ports:
|
||||
- "6379:6379"
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jiebanke-network
|
||||
|
||||
# Nginx反向代理
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
|
||||
- ./nginx/ssl:/etc/nginx/ssl
|
||||
depends_on:
|
||||
- api
|
||||
- admin
|
||||
restart: unless-stopped
|
||||
networks:
|
||||
- jiebanke-network
|
||||
|
||||
volumes:
|
||||
mysql_data:
|
||||
redis_data:
|
||||
|
||||
networks:
|
||||
jiebanke-network:
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
### 3. Nginx配置
|
||||
|
||||
```nginx
|
||||
# nginx.conf
|
||||
upstream api_backend {
|
||||
server api:3000;
|
||||
}
|
||||
|
||||
upstream admin_backend {
|
||||
server admin:80;
|
||||
}
|
||||
|
||||
# API服务器配置
|
||||
server {
|
||||
listen 80;
|
||||
server_name api.jiebanke.com;
|
||||
|
||||
# 重定向到HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name api.jiebanke.com;
|
||||
|
||||
# SSL证书配置
|
||||
ssl_certificate /etc/nginx/ssl/api.jiebanke.com.crt;
|
||||
ssl_certificate_key /etc/nginx/ssl/api.jiebanke.com.key;
|
||||
|
||||
# SSL安全配置
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384;
|
||||
ssl_prefer_server_ciphers off;
|
||||
|
||||
# 安全头
|
||||
add_header X-Frame-Options DENY;
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header X-XSS-Protection "1; mode=block";
|
||||
|
||||
# API代理
|
||||
location /api/ {
|
||||
proxy_pass http://api_backend;
|
||||
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;
|
||||
|
||||
# 超时配置
|
||||
proxy_connect_timeout 30s;
|
||||
proxy_send_timeout 30s;
|
||||
proxy_read_timeout 30s;
|
||||
}
|
||||
|
||||
# 文件上传大小限制
|
||||
client_max_body_size 10M;
|
||||
}
|
||||
|
||||
# 管理系统配置
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
server_name admin.jiebanke.com;
|
||||
|
||||
ssl_certificate /etc/nginx/ssl/admin.jiebanke.com.crt;
|
||||
ssl_certificate_key /etc/nginx/ssl/admin.jiebanke.com.key;
|
||||
|
||||
location / {
|
||||
proxy_pass http://admin_backend;
|
||||
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;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 生产环境部署脚本
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 生产环境部署脚本 - deploy-prod.sh
|
||||
|
||||
set -e
|
||||
|
||||
PROD_SERVER="129.211.213.226"
|
||||
PROD_USER="root"
|
||||
DEPLOY_PATH="/opt/jiebanke"
|
||||
BACKUP_PATH="/opt/backups"
|
||||
|
||||
echo "开始生产环境部署..."
|
||||
|
||||
# 1. 备份当前版本
|
||||
echo "备份当前版本..."
|
||||
ssh $PROD_USER@$PROD_SERVER << EOF
|
||||
if [ -d "$DEPLOY_PATH" ]; then
|
||||
sudo mkdir -p $BACKUP_PATH
|
||||
sudo tar -czf $BACKUP_PATH/jiebanke-backup-$(date +%Y%m%d-%H%M%S).tar.gz -C $DEPLOY_PATH .
|
||||
fi
|
||||
EOF
|
||||
|
||||
# 2. 构建生产版本
|
||||
echo "构建生产版本..."
|
||||
NODE_ENV=production npm run build
|
||||
|
||||
# 3. 创建部署包
|
||||
echo "创建部署包..."
|
||||
tar -czf jiebanke-prod-$(date +%Y%m%d-%H%M%S).tar.gz \
|
||||
backend/ admin-system/dist/ website/dist/ \
|
||||
docker-compose.prod.yml nginx/ scripts/
|
||||
|
||||
# 4. 上传到生产服务器
|
||||
echo "上传到生产服务器..."
|
||||
scp jiebanke-prod-*.tar.gz $PROD_USER@$PROD_SERVER:$DEPLOY_PATH/
|
||||
|
||||
# 5. 执行部署
|
||||
echo "执行生产部署..."
|
||||
ssh $PROD_USER@$PROD_SERVER << 'EOF'
|
||||
cd /opt/jiebanke
|
||||
tar -xzf jiebanke-prod-*.tar.gz
|
||||
|
||||
# 停止旧服务
|
||||
docker-compose -f docker-compose.prod.yml down
|
||||
|
||||
# 启动新服务
|
||||
docker-compose -f docker-compose.prod.yml up -d --build
|
||||
|
||||
# 等待服务启动
|
||||
sleep 30
|
||||
|
||||
# 检查服务状态
|
||||
docker-compose -f docker-compose.prod.yml ps
|
||||
|
||||
# 健康检查
|
||||
curl -f http://localhost:3000/api/health || exit 1
|
||||
|
||||
echo "生产环境部署成功!"
|
||||
EOF
|
||||
|
||||
echo "部署完成!"
|
||||
```
|
||||
|
||||
## 🔍 部署验证
|
||||
|
||||
### 健康检查
|
||||
|
||||
```bash
|
||||
# API健康检查
|
||||
curl -X GET http://localhost:3000/api/health
|
||||
|
||||
# 数据库连接检查
|
||||
curl -X GET http://localhost:3000/api/health/db
|
||||
|
||||
# Redis连接检查
|
||||
curl -X GET http://localhost:3000/api/health/redis
|
||||
```
|
||||
|
||||
### 性能测试
|
||||
|
||||
```bash
|
||||
# 使用Apache Bench进行压力测试
|
||||
ab -n 1000 -c 10 http://localhost:3000/api/health
|
||||
|
||||
# 使用wrk进行性能测试
|
||||
wrk -t12 -c400 -d30s http://localhost:3000/api/health
|
||||
```
|
||||
|
||||
## 📊 监控配置
|
||||
|
||||
### 系统监控
|
||||
|
||||
#### Prometheus配置
|
||||
```yaml
|
||||
# prometheus.yml
|
||||
global:
|
||||
scrape_interval: 15s
|
||||
|
||||
scrape_configs:
|
||||
- job_name: 'jiebanke-api'
|
||||
static_configs:
|
||||
- targets: ['localhost:3000']
|
||||
metrics_path: '/metrics'
|
||||
```
|
||||
|
||||
#### Grafana仪表板
|
||||
- **系统指标**:CPU、内存、磁盘使用率
|
||||
- **应用指标**:QPS、响应时间、错误率
|
||||
- **业务指标**:用户注册量、订单量、收入
|
||||
|
||||
### 日志管理
|
||||
|
||||
#### 日志收集配置
|
||||
```yaml
|
||||
# filebeat.yml
|
||||
filebeat.inputs:
|
||||
- type: log
|
||||
enabled: true
|
||||
paths:
|
||||
- /opt/jiebanke/logs/*.log
|
||||
fields:
|
||||
service: jiebanke
|
||||
environment: production
|
||||
|
||||
output.elasticsearch:
|
||||
hosts: ["elasticsearch:9200"]
|
||||
```
|
||||
|
||||
## 🚨 故障排除
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### 1. 数据库连接失败
|
||||
```bash
|
||||
# 检查数据库服务状态
|
||||
docker-compose ps mysql
|
||||
|
||||
# 查看数据库日志
|
||||
docker-compose logs mysql
|
||||
|
||||
# 测试数据库连接
|
||||
mysql -h localhost -u jieban -p jiebandata
|
||||
```
|
||||
|
||||
#### 2. Redis连接失败
|
||||
```bash
|
||||
# 检查Redis服务状态
|
||||
docker-compose ps redis
|
||||
|
||||
# 测试Redis连接
|
||||
redis-cli -h localhost -p 6379 ping
|
||||
```
|
||||
|
||||
#### 3. 应用启动失败
|
||||
```bash
|
||||
# 查看应用日志
|
||||
docker-compose logs api
|
||||
|
||||
# 检查环境变量
|
||||
docker-compose exec api env
|
||||
|
||||
# 进入容器调试
|
||||
docker-compose exec api sh
|
||||
```
|
||||
|
||||
### 回滚操作
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# 回滚脚本 - rollback.sh
|
||||
|
||||
BACKUP_FILE=$1
|
||||
DEPLOY_PATH="/opt/jiebanke"
|
||||
|
||||
if [ -z "$BACKUP_FILE" ]; then
|
||||
echo "请指定备份文件名"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "开始回滚到版本: $BACKUP_FILE"
|
||||
|
||||
# 停止当前服务
|
||||
docker-compose down
|
||||
|
||||
# 恢复备份
|
||||
tar -xzf /opt/backups/$BACKUP_FILE -C $DEPLOY_PATH
|
||||
|
||||
# 启动服务
|
||||
docker-compose up -d
|
||||
|
||||
echo "回滚完成!"
|
||||
```
|
||||
|
||||
## 📞 技术支持
|
||||
|
||||
### 联系方式
|
||||
- **技术支持邮箱**:tech-support@jiebanke.com
|
||||
- **紧急联系电话**:400-xxx-xxxx
|
||||
- **技术文档**:https://docs.jiebanke.com
|
||||
|
||||
### 支持时间
|
||||
- **工作日**:9:00 - 18:00
|
||||
- **紧急故障**:7×24小时响应
|
||||
|
||||
---
|
||||
|
||||
*文档版本:v1.0*
|
||||
*最后更新:2025年1月*
|
||||
Reference in New Issue
Block a user