deploy_model.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #!/bin/bash
  2. # 模型部署脚本
  3. # 用法: ./deploy_model.sh <model_name> <environment>
  4. set -e
  5. MODEL_NAME=${1:-"nlp_bert"}
  6. ENVIRONMENT=${2:-"staging"}
  7. DOCKER_IMAGE="dualflow-${MODEL_NAME}:latest"
  8. echo "🚀 开始部署模型: ${MODEL_NAME} 到环境: ${ENVIRONMENT}"
  9. # 检查Docker是否运行
  10. if ! docker info > /dev/null 2>&1; then
  11. echo "❌ Docker未运行,请启动Docker"
  12. exit 1
  13. fi
  14. # 检查模型目录是否存在
  15. if [ ! -d "models/${MODEL_NAME}" ]; then
  16. echo "❌ 模型目录不存在: models/${MODEL_NAME}"
  17. exit 1
  18. fi
  19. # 构建Docker镜像
  20. echo "📦 构建Docker镜像..."
  21. cd models/${MODEL_NAME}
  22. docker build -t ${DOCKER_IMAGE} .
  23. # 停止现有容器
  24. echo "🛑 停止现有容器..."
  25. docker stop ${MODEL_NAME}-container 2>/dev/null || true
  26. docker rm ${MODEL_NAME}-container 2>/dev/null || true
  27. # 运行新容器
  28. echo "🏃 启动新容器..."
  29. if [ "${ENVIRONMENT}" = "production" ]; then
  30. # 生产环境配置
  31. docker run -d \
  32. --name ${MODEL_NAME}-container \
  33. --restart unless-stopped \
  34. -p 8000:8000 \
  35. -e ENVIRONMENT=production \
  36. ${DOCKER_IMAGE}
  37. else
  38. # 开发/测试环境配置
  39. docker run -d \
  40. --name ${MODEL_NAME}-container \
  41. -p 8000:8000 \
  42. -e ENVIRONMENT=${ENVIRONMENT} \
  43. ${DOCKER_IMAGE}
  44. fi
  45. # 等待服务启动
  46. echo "⏳ 等待服务启动..."
  47. sleep 10
  48. # 健康检查
  49. echo "🔍 执行健康检查..."
  50. if curl -f http://localhost:8000/health > /dev/null 2>&1; then
  51. echo "✅ 模型部署成功!"
  52. echo "🌐 服务地址: http://localhost:8000"
  53. echo "📊 健康检查: http://localhost:8000/health"
  54. else
  55. echo "❌ 健康检查失败"
  56. echo "📋 容器日志:"
  57. docker logs ${MODEL_NAME}-container
  58. exit 1
  59. fi
  60. # 显示容器状态
  61. echo "📊 容器状态:"
  62. docker ps | grep ${MODEL_NAME}-container
  63. echo "🎉 部署完成!"