173 lines
4.2 KiB
Bash
Executable File
173 lines
4.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# AI Service 部署脚本
|
||
|
||
set -e
|
||
|
||
# 颜色定义
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# 配置
|
||
SERVICE_NAME="ai-service"
|
||
SERVICE_PORT=8087
|
||
REGISTRY="registry.example.com"
|
||
TAG=${VERSION:-latest}
|
||
|
||
echo -e "${GREEN}========================================${NC}"
|
||
echo -e "${GREEN} AI Service 部署脚本${NC}"
|
||
echo -e "${GREEN}========================================${NC}"
|
||
|
||
# 检查环境
|
||
check_env() {
|
||
echo -e "${YELLOW}[1/4] 检查环境...${NC}"
|
||
|
||
if ! command -v docker &> /dev/null; then
|
||
echo -e "${RED}错误: Docker 未安装${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
if ! command -v kubectl &> /dev/null; then
|
||
echo -e "${YELLOW}警告: kubectl 未安装,K8s部署将被跳过${NC}"
|
||
fi
|
||
|
||
echo -e "${GREEN}环境检查完成${NC}"
|
||
}
|
||
|
||
# 构建镜像
|
||
build_image() {
|
||
echo -e "${YELLOW}[2/4] 构建Docker镜像...${NC}"
|
||
|
||
cd "$(dirname "$0")/.."
|
||
|
||
docker build -t ${SERVICE_NAME}:${TAG} -f docker/Dockerfile .
|
||
docker tag ${SERVICE_NAME}:${TAG} ${REGISTRY}/${SERVICE_NAME}:${TAG}
|
||
|
||
echo -e "${GREEN}镜像构建完成: ${SERVICE_NAME}:${TAG}${NC}"
|
||
}
|
||
|
||
# Docker Compose 部署
|
||
deploy_docker() {
|
||
echo -e "${YELLOW}[3/4] 使用Docker Compose部署...${NC}"
|
||
|
||
cd "$(dirname "$0")/.."
|
||
|
||
# 设置环境变量
|
||
export OPENAI_API_KEY=${OPENAI_API_KEY:-}
|
||
export ALIYUN_QWEN_API_KEY=${ALIYUN_QWEN_API_KEY:-}
|
||
export ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
|
||
|
||
docker-compose -f docker/docker-compose.yml up -d
|
||
|
||
echo -e "${GREEN}Docker Compose部署完成${NC}"
|
||
echo -e "${GREEN}服务地址: http://localhost:${SERVICE_PORT}${NC}"
|
||
}
|
||
|
||
# K8s 部署
|
||
deploy_k8s() {
|
||
echo -e "${YELLOW}[4/4] 使用Kubernetes部署...${NC}"
|
||
|
||
if ! command -v kubectl &> /dev/null; then
|
||
echo -e "${YELLOW}跳过K8s部署${NC}"
|
||
return
|
||
fi
|
||
|
||
cd "$(dirname "$0")/.."
|
||
|
||
# 应用配置
|
||
kubectl apply -f k8s/config.yaml
|
||
kubectl apply -f k8s/deployment.yaml
|
||
|
||
# 等待部署完成
|
||
echo -e "${YELLOW}等待Pod启动...${NC}"
|
||
kubectl rollout status deployment/ai-service -n erp
|
||
|
||
echo -e "${GREEN}Kubernetes部署完成${NC}"
|
||
}
|
||
|
||
# 显示状态
|
||
show_status() {
|
||
echo ""
|
||
echo -e "${GREEN}========================================${NC}"
|
||
echo -e "${GREEN} 部署状态${NC}"
|
||
echo -e "${GREEN}========================================${NC}"
|
||
|
||
if command -v kubectl &> /dev/null; then
|
||
kubectl get pods -l app=${SERVICE_NAME} -n erp 2>/dev/null || true
|
||
fi
|
||
|
||
echo ""
|
||
echo -e "${GREEN}API端点:${NC}"
|
||
echo -e " - 健康检查: http://localhost:${SERVICE_PORT}/api/ai/health"
|
||
echo -e " - 对话接口: http://localhost:${SERVICE_PORT}/api/ai/chat"
|
||
echo -e " - 模型管理: http://localhost:${SERVICE_PORT}/api/ai/models"
|
||
echo ""
|
||
}
|
||
|
||
# 主流程
|
||
main() {
|
||
check_env
|
||
|
||
case "${DEPLOY_MODE:-docker}" in
|
||
docker)
|
||
build_image
|
||
deploy_docker
|
||
;;
|
||
k8s)
|
||
build_image
|
||
deploy_k8s
|
||
;;
|
||
all)
|
||
build_image
|
||
deploy_docker
|
||
deploy_k8s
|
||
;;
|
||
*)
|
||
echo -e "${RED}未知的部署模式: ${DEPLOY_MODE}${NC}"
|
||
echo "支持的模式: docker, k8s, all"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
show_status
|
||
|
||
echo -e "${GREEN}部署完成!${NC}"
|
||
}
|
||
|
||
# 卸载
|
||
uninstall() {
|
||
echo -e "${YELLOW}卸载AI Service...${NC}"
|
||
|
||
if command -v kubectl &> /dev/null; then
|
||
kubectl delete -f k8s/deployment.yaml -n erp 2>/dev/null || true
|
||
kubectl delete -f k8s/config.yaml -n erp 2>/dev/null || true
|
||
fi
|
||
|
||
cd "$(dirname "$0")/.." 2>/dev/null || true
|
||
docker-compose -f docker/docker-compose.yml down 2>/dev/null || true
|
||
|
||
echo -e "${GREEN}卸载完成${NC}"
|
||
}
|
||
|
||
# 根据参数执行
|
||
case "${1:-deploy}" in
|
||
deploy)
|
||
main
|
||
;;
|
||
uninstall)
|
||
uninstall
|
||
;;
|
||
restart)
|
||
docker-compose -f docker/docker-compose.yml restart ${SERVICE_NAME}
|
||
;;
|
||
logs)
|
||
docker-compose -f docker/docker-compose.yml logs -f ${SERVICE_NAME}
|
||
;;
|
||
*)
|
||
echo "用法: $0 {deploy|uninstall|restart|logs}"
|
||
exit 1
|
||
;;
|
||
esac
|