Files
shensheshou/开发文档/8、部署/_智能展开.md

9.7 KiB
Raw Blame History

🚀 部署智能展开引擎 (Deployment Auto-Expand)

角色激活: 将此文件拖入 AI即刻激活 DevOps 运维专家 角色 核心能力: 自动化部署、CI/CD、Docker、服务器配置


📋 一、快速启动指令

1.1 项目转部署

@部署引擎 请根据以下项目信息,生成完整的部署方案:

【项目名称】:[项目名]
【技术栈】:[前端/后端技术]
【服务器】:[宝塔/Docker/云服务]
【域名】:[可选:域名信息]
【特殊需求】:[可选:负载均衡/SSL等]

1.2 展开输出清单

输出项 说明 格式
部署架构图 服务器拓扑 Mermaid
环境配置 .env 模板 文本
部署脚本 Shell 脚本 Bash
Nginx 配置 反向代理 Nginx conf
CI/CD 配置 自动化流程 YAML/Shell

🛠️ 二、部署方案选型

2.1 卡若标准部署栈

┌─────────────────────────────────────────────────────────────────────┐
│                        部署技术栈                                    │
├─────────────────────────────────────────────────────────────────────┤
│  🖥️ 服务器管理                                                      │
│  ├── 宝塔面板 (首选,可视化)                                        │
│  ├── Docker + Docker Compose (容器化)                              │
│  └── 云服务器:阿里云 / 腾讯云 / 轻量应用                           │
├─────────────────────────────────────────────────────────────────────┤
│  🌐 Web 服务                                                        │
│  ├── Nginx (反向代理 + SSL)                                        │
│  ├── PM2 (Node.js 进程管理)                                        │
│  └── Gunicorn + Uvicorn (Python ASGI)                              │
├─────────────────────────────────────────────────────────────────────┤
│  🔄 CI/CD                                                           │
│  ├── GitHub Webhook (自动部署)                                      │
│  ├── GitHub Actions (可选)                                          │
│  └── 宝塔 Webhook 插件                                              │
├─────────────────────────────────────────────────────────────────────┤
│  📊 监控                                                            │
│  ├── PM2 日志 / journalctl                                         │
│  ├── 宝塔监控面板                                                   │
│  └── Sentry (错误追踪)                                              │
└─────────────────────────────────────────────────────────────────────┘

📝 三、部署配置模板

3.1 环境变量模板 (.env)

# .env.production

# 应用配置
APP_NAME=私域银行
APP_ENV=production
DEBUG=false
PORT=8000

# 数据库
MONGODB_URL=mongodb://user:pass@host:27017/dbname
REDIS_URL=redis://:password@host:6379/0

# JWT
JWT_SECRET=your-super-secret-key-change-in-production
JWT_ALGORITHM=HS256
JWT_EXPIRE_HOURS=2

# AI 配置
OPENAI_API_KEY=sk-xxx
GEMINI_API_KEY=xxx

# 第三方服务
SMS_ACCESS_KEY=xxx
SMS_SECRET_KEY=xxx
OSS_BUCKET=xxx

3.2 Nginx 配置

# /etc/nginx/sites-available/project.conf

# 前端
server {
    listen 80;
    server_name example.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;
    
    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;
    
    # 前端静态文件
    location / {
        root /www/wwwroot/project/frontend/dist;
        try_files $uri $uri/ /index.html;
        
        # 缓存静态资源
        location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
            expires 30d;
            add_header Cache-Control "public, immutable";
        }
    }
    
    # 后端 API 代理
    location /api {
        proxy_pass http://127.0.0.1:8000;
        proxy_http_version 1.1;
        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;
        
        # WebSocket 支持
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

3.3 部署脚本 (deploy.sh)

#!/bin/bash
# deploy.sh - 自动部署脚本

set -e

PROJECT_DIR="/www/wwwroot/project"
BACKEND_DIR="$PROJECT_DIR/backend"
FRONTEND_DIR="$PROJECT_DIR/frontend"

echo "🚀 开始部署..."

# 1. 拉取最新代码
cd $PROJECT_DIR
git pull origin main

# 2. 后端部署
echo "📦 部署后端..."
cd $BACKEND_DIR
source venv/bin/activate
pip install -r requirements.txt --quiet
sudo systemctl restart project-backend

# 3. 前端部署
echo "🎨 部署前端..."
cd $FRONTEND_DIR
npm install --silent
npm run build

# 4. 重载 Nginx
sudo nginx -t && sudo nginx -s reload

echo "✅ 部署完成!"

3.4 Systemd 服务配置

# /etc/systemd/system/project-backend.service

[Unit]
Description=Project Backend Service
After=network.target

[Service]
Type=simple
User=www
Group=www
WorkingDirectory=/www/wwwroot/project/backend
Environment="PATH=/www/wwwroot/project/backend/venv/bin"
EnvironmentFile=/www/wwwroot/project/backend/.env
ExecStart=/www/wwwroot/project/backend/venv/bin/gunicorn \
    -w 4 \
    -k uvicorn.workers.UvicornWorker \
    -b 127.0.0.1:8000 \
    main:app
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target

🔄 四、CI/CD 配置

4.1 GitHub Webhook 自动部署

# webhook_handler.sh - Webhook 处理脚本

#!/bin/bash
cd /www/wwwroot/project
git pull origin main
bash deploy.sh >> /var/log/deploy.log 2>&1

4.2 宝塔 Webhook 配置

1. 安装宝塔 Webhook 插件
2. 添加 Webhook
   - 名称project-deploy
   - 执行脚本:/www/wwwroot/project/deploy.sh
3. 获取 Webhook URL
4. 在 GitHub 仓库设置中添加 Webhook

4.3 部署流程图

sequenceDiagram
    participant Dev as 开发者
    participant GitHub
    participant Server as 服务器
    participant Nginx
    
    Dev->>GitHub: git push
    GitHub->>Server: Webhook 触发
    Server->>Server: git pull
    Server->>Server: pip install
    Server->>Server: npm build
    Server->>Server: systemctl restart
    Server->>Nginx: nginx reload
    Nginx-->>Dev: 部署完成

🐳 五、Docker 部署方案

5.1 Dockerfile (后端)

# backend/Dockerfile
FROM python:3.11-slim

WORKDIR /app

# 安装依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制代码
COPY . .

# 启动命令
CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "-b", "0.0.0.0:8000", "main:app"]

5.2 docker-compose.yml

version: '3.8'

services:
  backend:
    build: ./backend
    ports:
      - "8000:8000"
    env_file:
      - ./backend/.env
    depends_on:
      - mongodb
      - redis
    restart: always

  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    restart: always

  mongodb:
    image: mongo:7
    volumes:
      - mongo_data:/data/db
    restart: always

  redis:
    image: redis:7-alpine
    restart: always

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
      - ./certs:/etc/nginx/certs
    depends_on:
      - backend
      - frontend
    restart: always

volumes:
  mongo_data:

🔗 六、跨目录联动

graph LR
    A[6、后端] -->|技术栈| B[8、部署]
    C[4、前端] -->|构建产物| B
    D[7、数据库] -->|备份策略| B
    B -->|运维手册| E[9、手册]

🤖 七、AI 协作指令

指令 功能 示例
@生成部署脚本 生成 Shell 脚本 @生成部署脚本 Python+React
@生成Nginx 生成 Nginx 配置 @生成Nginx 反向代理
@生成Docker 生成 Docker 配置 @生成Docker 全栈项目
@生成CI/CD 生成自动化流程 @生成CI/CD GitHub Webhook
@环境检查 检查服务器环境 @环境检查 Python+Node

⚠️ 八、注意事项

8.1 安全规范

必须做:
  - [ ] 密钥走环境变量,不提交代码
  - [ ] 开启 HTTPS
  - [ ] 配置防火墙
  - [ ] 定期备份数据库

禁止做:
  - [ ] 在代码中硬编码密钥
  - [ ] 开放不必要端口
  - [ ] root 用户运行服务

8.2 常用命令

# 查看服务状态
systemctl status project-backend

# 查看日志
journalctl -u project-backend -f

# 重启服务
systemctl restart project-backend

# Nginx 测试配置
nginx -t

# Docker 常用
docker-compose up -d
docker-compose logs -f
docker-compose restart

下一步: 部署完成后,拖入 9、手册/_智能展开.md 编写用户手册