| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- #!/bin/bash
- # 模型部署脚本
- # 用法: ./deploy_model.sh <model_name> <environment>
- set -e
- MODEL_NAME=${1:-"nlp_bert"}
- ENVIRONMENT=${2:-"staging"}
- DOCKER_IMAGE="dualflow-${MODEL_NAME}:latest"
- echo "🚀 开始部署模型: ${MODEL_NAME} 到环境: ${ENVIRONMENT}"
- # 检查Docker是否运行
- if ! docker info > /dev/null 2>&1; then
- echo "❌ Docker未运行,请启动Docker"
- exit 1
- fi
- # 检查模型目录是否存在
- if [ ! -d "models/${MODEL_NAME}" ]; then
- echo "❌ 模型目录不存在: models/${MODEL_NAME}"
- exit 1
- fi
- # 构建Docker镜像
- echo "📦 构建Docker镜像..."
- cd models/${MODEL_NAME}
- docker build -t ${DOCKER_IMAGE} .
- # 停止现有容器
- echo "🛑 停止现有容器..."
- docker stop ${MODEL_NAME}-container 2>/dev/null || true
- docker rm ${MODEL_NAME}-container 2>/dev/null || true
- # 运行新容器
- echo "🏃 启动新容器..."
- if [ "${ENVIRONMENT}" = "production" ]; then
- # 生产环境配置
- docker run -d \
- --name ${MODEL_NAME}-container \
- --restart unless-stopped \
- -p 8000:8000 \
- -e ENVIRONMENT=production \
- ${DOCKER_IMAGE}
- else
- # 开发/测试环境配置
- docker run -d \
- --name ${MODEL_NAME}-container \
- -p 8000:8000 \
- -e ENVIRONMENT=${ENVIRONMENT} \
- ${DOCKER_IMAGE}
- fi
- # 等待服务启动
- echo "⏳ 等待服务启动..."
- sleep 10
- # 健康检查
- echo "🔍 执行健康检查..."
- if curl -f http://localhost:8000/health > /dev/null 2>&1; then
- echo "✅ 模型部署成功!"
- echo "🌐 服务地址: http://localhost:8000"
- echo "📊 健康检查: http://localhost:8000/health"
- else
- echo "❌ 健康检查失败"
- echo "📋 容器日志:"
- docker logs ${MODEL_NAME}-container
- exit 1
- fi
- # 显示容器状态
- echo "📊 容器状态:"
- docker ps | grep ${MODEL_NAME}-container
- echo "🎉 部署完成!"
|