708 lines
13 KiB
Markdown
708 lines
13 KiB
Markdown
|
|
# 📦 结伴客系统部署指南
|
|||
|
|
|
|||
|
|
## 📋 部署概述
|
|||
|
|
|
|||
|
|
本文档详细说明了结伴客项目的完整部署流程,包括开发环境、测试环境和生产环境的部署配置。项目采用容器化部署方式,支持快速部署和弹性扩容。
|
|||
|
|
|
|||
|
|
## 🛠️ 环境要求
|
|||
|
|
|
|||
|
|
### 系统要求
|
|||
|
|
- **操作系统**: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月*
|