#!/bin/bash # 模型部署脚本 # 用法: ./deploy_model.sh 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 "🎉 部署完成!"