13 KiB
13 KiB
🚀 部署指南 - 一键部署脚本
📋 快速开始
# 基础部署(推荐)
./deploy.sh
# 仅部署前端
./deploy.sh frontend
# 仅部署后端
./deploy.sh backend
# 强制重新构建
./deploy.sh --rebuild
# 完整部署(备份+测试+清理)
./deploy.sh --backup --test --cleanup
📖 详细说明
脚本功能
deploy.sh 是一个自动化部署脚本,用于快速部署和更新股票推荐系统。
主要功能:
- ✅ 自动检查环境依赖
- ✅ 构建Docker镜像
- ✅ 启动/重启服务
- ✅ 健康检查
- ✅ 数据备份
- ✅ 日志查看
- ✅ 镜像清理
使用方法
1. 基础部署(所有服务)
./deploy.sh
执行流程:
- 检查环境依赖
- 显示当前服务状态
- 停止旧服务
- 构建新镜像
- 启动基础设施(PostgreSQL, Redis)
- 启动应用服务(Backend, Frontend)
- 等待服务就绪
- 显示最终状态
预计时间: 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