Files
ljwx-stock/DEPLOY_GUIDE.md
2025-11-18 22:44:41 +08:00

13 KiB
Raw Permalink Blame History

🚀 部署指南 - 一键部署脚本

📋 快速开始

# 基础部署(推荐)
./deploy.sh

# 仅部署前端
./deploy.sh frontend

# 仅部署后端
./deploy.sh backend

# 强制重新构建
./deploy.sh --rebuild

# 完整部署(备份+测试+清理)
./deploy.sh --backup --test --cleanup

📖 详细说明

脚本功能

deploy.sh 是一个自动化部署脚本,用于快速部署和更新股票推荐系统。

主要功能:

  • ✅ 自动检查环境依赖
  • ✅ 构建Docker镜像
  • ✅ 启动/重启服务
  • ✅ 健康检查
  • ✅ 数据备份
  • ✅ 日志查看
  • ✅ 镜像清理

使用方法

1. 基础部署(所有服务)

./deploy.sh

执行流程:

  1. 检查环境依赖
  2. 显示当前服务状态
  3. 停止旧服务
  4. 构建新镜像
  5. 启动基础设施(PostgreSQL, Redis)
  6. 启动应用服务(Backend, Frontend)
  7. 等待服务就绪
  8. 显示最终状态

预计时间: 2-5分钟(取决于是否需要重新构建)

2. 部署单个服务

# 仅部署后端
./deploy.sh backend

# 仅部署前端
./deploy.sh frontend

使用场景:

  • 只修改了前端代码,仅需要更新前端
  • 只修改了后端代码,仅需要更新后端
  • 加快部署速度

预计时间: 1-3分钟

3. 强制重新构建

./deploy.sh --rebuild

说明:

  • 使用 --no-cache 参数构建镜像
  • 不使用Docker构建缓存
  • 确保所有依赖都是最新的

使用场景:

  • 修改了 requirements.txt 或 package.json
  • 需要更新系统依赖
  • 构建缓存导致问题

预计时间: 5-10分钟

4. 备份数据

./deploy.sh --backup

说明:

  • 在部署前自动备份PostgreSQL数据库
  • 备份目录: ./backups/YYYYMMDD_HHMMSS/
  • 备份文件: stockai_db.sql

使用场景:

  • 重要更新前备份数据
  • 定期数据备份
  • 防止数据丢失

5. 运行测试

./deploy.sh --test

说明:

  • 部署后自动运行健康检查
  • 测试后端API、前端页面、数据流管道

测试项目:

  • ✅ 后端健康检查: /health
  • ✅ 前端页面访问: /
  • ✅ 数据流管道API: /api/data-pipeline/stats

6. 查看日志

./deploy.sh --logs

# 查看特定服务日志
./deploy.sh backend --logs
./deploy.sh frontend --logs

说明:

  • 显示服务最近50行日志
  • 用于快速诊断问题

7. 仅重启服务(不重新构建)

./deploy.sh --no-build

说明:

  • 跳过镜像构建步骤
  • 仅停止并重启服务
  • 最快的重启方式

使用场景:

  • 配置文件修改后重启
  • 环境变量更新后重启
  • 快速重启服务

预计时间: 30秒

8. 清理旧镜像

./deploy.sh --cleanup

说明:

  • 清理未使用的Docker镜像
  • 释放磁盘空间

使用场景:

  • 磁盘空间不足
  • 定期清理维护

9. 组合使用

# 完整部署流程
./deploy.sh --backup --rebuild --test --cleanup

# 强制重新构建前端
./deploy.sh frontend --rebuild

# 重启后端并查看日志
./deploy.sh backend --no-build --logs

# 备份并部署
./deploy.sh --backup

🎯 常见使用场景

场景1: 日常开发 - 更新前端

# 1. 修改前端代码
vim frontend/src/views/DataPipeline.vue

# 2. 部署前端
./deploy.sh frontend

# 3. 验证更新
# 访问 http://localhost:8090/data-pipeline

场景2: 日常开发 - 更新后端

# 1. 修改后端代码
vim backend/app/routes/data_pipeline.py

# 2. 部署后端
./deploy.sh backend

# 3. 验证更新
curl http://localhost:8001/api/data-pipeline/stats

场景3: 生产部署 - 完整流程

# 1. 备份数据
./deploy.sh --backup

# 2. 强制重新构建并测试
./deploy.sh --rebuild --test

# 3. 验证部署
# 访问 http://192.168.1.83:8090

# 4. 清理旧镜像
./deploy.sh --cleanup

场景4: 紧急修复 - 快速重启

# 仅重启服务,不重新构建
./deploy.sh --no-build

# 或指定服务
./deploy.sh backend --no-build

场景5: 依赖更新

# 1. 更新依赖文件
vim frontend/package.json
vim backend/requirements.txt

# 2. 强制重新构建
./deploy.sh --rebuild

# 3. 运行测试
./deploy.sh --test

📊 部署输出示例

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   _____ _             _      ____
  / ____| |           | |    / __ \
 | (___ | |_ ___   ___| | __| |  | |_   _ ___
  \___ \| __/ _ \ / __| |/ /| |  | | | | / __|
  ____) | || (_) | (__|   < | |__| | |_| \__ \
 |_____/ \__\___/ \___|_|\_\ \____/ \__, |___/
                                     __/ |
   AI Stock Recommendation System   |___/
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

ℹ️  部署开始时间: 2025-11-17 23:00:00

═══════════════════════════════════════
  检查环境依赖
═══════════════════════════════════════

✅ 环境依赖检查通过
✅ Docker服务运行正常
✅ docker-compose.yml 文件存在

═══════════════════════════════════════
  当前服务状态
═══════════════════════════════════════

NAME             IMAGE                   STATUS
stock_backend    claude-stock-backend    Up 2 hours
stock_frontend   claude-stock-frontend   Up 2 hours
stock_postgres   postgres:16-alpine      Up 2 hours
stock_redis      redis:7-alpine          Up 2 hours

═══════════════════════════════════════
  停止服务: backend frontend
═══════════════════════════════════════

ℹ️  停止指定服务: backend frontend
✅ 服务已停止

═══════════════════════════════════════
  构建Docker镜像
═══════════════════════════════════════

ℹ️  构建指定服务镜像: backend frontend
[+] Building 45.2s
✅ 镜像构建完成

═══════════════════════════════════════
  启动基础设施服务
═══════════════════════════════════════

ℹ️  启动 PostgreSQL 和 Redis...
ℹ️  等待数据库就绪...
✅ PostgreSQL已就绪
✅ Redis已就绪

═══════════════════════════════════════
  启动应用服务
═══════════════════════════════════════

ℹ️  启动指定服务: backend frontend
✅ 服务已启动

═══════════════════════════════════════
  等待服务就绪
═══════════════════════════════════════

ℹ️  等待后端服务就绪...
✅ 后端服务就绪
ℹ️  等待前端服务就绪...
✅ 前端服务就绪

═══════════════════════════════════════
  部署完成 - 服务状态
═══════════════════════════════════════

NAME             IMAGE                   STATUS
stock_backend    claude-stock-backend    Up 10 seconds (healthy)
stock_frontend   claude-stock-frontend   Up 10 seconds (healthy)
stock_postgres   postgres:16-alpine      Up 2 hours (healthy)
stock_redis      redis:7-alpine          Up 2 hours (healthy)

═══════════════════════════════════════
  访问地址
═══════════════════════════════════════

📊 前端页面:
   http://localhost:8090
   http://192.168.1.83:8090

📊 数据流管道:
   http://localhost:8090/data-pipeline
   http://192.168.1.83:8090/data-pipeline

🔧 后端API:
   http://localhost:8001/api
   http://192.168.1.83:8001/api

📚 API文档:
   http://localhost:8001/docs
   http://192.168.1.83:8001/docs

🗄️  数据库管理:
   http://localhost:8091 (Adminer)

═══════════════════════════════════════
  部署成功
═══════════════════════════════════════

✅ 所有服务已成功部署并运行
ℹ️  部署完成时间: 2025-11-17 23:02:30

ℹ️  常用命令:
  查看日志:       docker-compose logs -f [backend|frontend]
  重启服务:       docker-compose restart [backend|frontend]
  停止所有:       docker-compose down
  进入容器:       docker-compose exec [backend|frontend] sh

🔧 故障排除

问题1: Docker服务未运行

错误信息:

❌ Docker服务未运行,请先启动Docker

解决方案:

# macOS
open -a Docker

# Linux
sudo systemctl start docker

问题2: 端口被占用

错误信息:

Error: Bind for 0.0.0.0:8090 failed: port is already allocated

解决方案:

# 查找占用端口的进程
lsof -i :8090

# 停止占用端口的进程
kill -9 <PID>

# 或修改 docker-compose.yml 中的端口映射

问题3: 磁盘空间不足

错误信息:

Error: No space left on device

解决方案:

# 清理Docker镜像和容器
docker system prune -a

# 或使用脚本清理
./deploy.sh --cleanup

问题4: 构建超时

解决方案:

# 增加Docker构建超时时间
export DOCKER_CLIENT_TIMEOUT=300
export COMPOSE_HTTP_TIMEOUT=300

# 重新部署
./deploy.sh --rebuild

问题5: 数据库连接失败

解决方案:

# 检查PostgreSQL容器状态
docker-compose ps postgres

# 检查数据库连接
docker-compose exec postgres psql -U stockai -d stockai -c "SELECT 1;"

# 重启数据库
docker-compose restart postgres

📝 最佳实践

1. 定期备份

# 每天自动备份(添加到crontab)
0 2 * * * cd /path/to/project && ./deploy.sh --backup --no-build

2. 生产部署检查清单

  • 代码已提交到Git
  • 已通过本地测试
  • 已备份数据
  • 通知团队成员
  • 使用 --rebuild 重新构建
  • 运行 --test 健康检查
  • 验证所有功能
  • 监控错误日志

3. 快速回滚

# 1. 停止当前服务
docker-compose down

# 2. 恢复备份
cat backups/20251117_230000/stockai_db.sql | \
  docker-compose exec -T postgres psql -U stockai stockai

# 3. 使用旧镜像启动
docker-compose up -d

4. 监控日志

# 实时查看所有日志
docker-compose logs -f

# 查看特定服务
docker-compose logs -f backend

# 查看最近错误
docker-compose logs --tail=100 | grep -i error

🚀 高级用法

自定义环境变量

# 方法1: 临时设置
VITE_USE_MOCK=true ./deploy.sh frontend

# 方法2: 创建 .env 文件
cat > .env << EOF
VITE_API_URL=/api
VITE_USE_MOCK=false
DATABASE_URL=postgresql://user:pass@host:5432/db
EOF

./deploy.sh

CI/CD集成

# .github/workflows/deploy.yml
name: Deploy

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Deploy to production
        run: |
          ssh user@server 'cd /path/to/project && ./deploy.sh --backup --rebuild --test'

多环境部署

# 开发环境
./deploy.sh --no-build

# 测试环境
./deploy.sh --test

# 生产环境
./deploy.sh --backup --rebuild --test --cleanup

📚 相关文档

  • docker-compose.yml - Docker Compose配置
  • FRONTEND_UPDATE_COMPLETE.md - 前端更新指南
  • DATA_PIPELINE_INTEGRATION_REPORT.md - API集成报告
  • CLAUDE.md - 项目开发指南

💡 提示

  • 首次部署可能需要5-10分钟下载镜像
  • 后续部署通常只需1-3分钟
  • 使用 --no-build 可以最快重启服务(30秒)
  • 定期使用 --cleanup 清理磁盘空间
  • 重要更新前务必使用 --backup 备份数据

创建时间: 2025-11-17 版本: v1.0.0 维护: Claude Code