187 lines
4.5 KiB
Bash
Executable File
187 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# CRM MCP 服务构建和部署脚本
|
|
|
|
set -e
|
|
|
|
# 颜色定义
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# 打印带颜色的消息
|
|
print_message() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
print_warning() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
print_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# 检查 Docker 是否安装
|
|
check_docker() {
|
|
if ! command -v docker &> /dev/null; then
|
|
print_error "Docker 未安装,请先安装 Docker"
|
|
exit 1
|
|
fi
|
|
print_message "Docker 检查通过"
|
|
}
|
|
|
|
# 检查 Maven 是否安装
|
|
check_maven() {
|
|
if ! command -v mvn &> /dev/null; then
|
|
print_warning "Maven 未安装,将使用 Docker 多阶段构建"
|
|
USE_DOCKER_BUILD=true
|
|
else
|
|
print_message "Maven 检查通过"
|
|
USE_DOCKER_BUILD=false
|
|
fi
|
|
}
|
|
|
|
# 本地 Maven 构建
|
|
maven_build() {
|
|
print_message "开始 Maven 构建..."
|
|
mvn clean package -DskipTests
|
|
print_message "Maven 构建完成"
|
|
}
|
|
|
|
# Docker 构建
|
|
docker_build() {
|
|
print_message "开始 Docker 构建..."
|
|
|
|
# 按优先级尝试不同的 Dockerfile
|
|
DOCKERFILES=(
|
|
"Dockerfile_simple:最简单版本(推荐)"
|
|
"Dockerfile_alpine:使用Alpine+OpenJDK17"
|
|
"Dockerfile_test:智能检测系统类型"
|
|
"Dockerfile_corretto:使用Amazon Corretto"
|
|
"Dockerfile_backup:备用方案"
|
|
)
|
|
|
|
for dockerfile_info in "${DOCKERFILES[@]}"; do
|
|
dockerfile=$(echo "$dockerfile_info" | cut -d':' -f1)
|
|
description=$(echo "$dockerfile_info" | cut -d':' -f2)
|
|
|
|
if [ -f "$dockerfile" ]; then
|
|
print_message "尝试使用 $dockerfile ($description)..."
|
|
|
|
if docker build -f "$dockerfile" -t crm-mcp:latest . --network=host; then
|
|
print_message "✅ 使用 $dockerfile 构建成功!"
|
|
return 0
|
|
else
|
|
print_warning "❌ 使用 $dockerfile 构建失败,尝试下一个..."
|
|
sleep 2
|
|
fi
|
|
fi
|
|
done
|
|
|
|
print_error "所有 Dockerfile 构建都失败了"
|
|
print_message "请检查网络连接或尝试配置 Docker 镜像源"
|
|
exit 1
|
|
}
|
|
|
|
# 启动服务
|
|
start_service() {
|
|
print_message "启动 CRM MCP 服务..."
|
|
docker-compose up -d
|
|
print_message "服务启动完成"
|
|
|
|
# 等待服务启动
|
|
print_message "等待服务启动..."
|
|
sleep 10
|
|
|
|
# 检查服务状态
|
|
if docker-compose ps | grep -q "Up"; then
|
|
print_message "服务启动成功!"
|
|
print_message "访问地址: http://localhost:8080"
|
|
print_message "健康检查: http://localhost:8080/actuator/health"
|
|
else
|
|
print_error "服务启动失败,请检查日志"
|
|
docker-compose logs
|
|
fi
|
|
}
|
|
|
|
# 停止服务
|
|
stop_service() {
|
|
print_message "停止 CRM MCP 服务..."
|
|
docker-compose down
|
|
print_message "服务已停止"
|
|
}
|
|
|
|
# 查看日志
|
|
show_logs() {
|
|
docker-compose logs -f crm-mcp
|
|
}
|
|
|
|
# 清理
|
|
clean() {
|
|
print_message "清理 Docker 镜像和容器..."
|
|
docker-compose down --rmi all --volumes --remove-orphans
|
|
print_message "清理完成"
|
|
}
|
|
|
|
# 主函数
|
|
main() {
|
|
case "$1" in
|
|
"build")
|
|
check_docker
|
|
check_maven
|
|
if [ "$USE_DOCKER_BUILD" = false ]; then
|
|
maven_build
|
|
fi
|
|
docker_build
|
|
;;
|
|
"start")
|
|
check_docker
|
|
start_service
|
|
;;
|
|
"stop")
|
|
check_docker
|
|
stop_service
|
|
;;
|
|
"restart")
|
|
check_docker
|
|
stop_service
|
|
start_service
|
|
;;
|
|
"logs")
|
|
check_docker
|
|
show_logs
|
|
;;
|
|
"clean")
|
|
check_docker
|
|
clean
|
|
;;
|
|
"all")
|
|
check_docker
|
|
check_maven
|
|
if [ "$USE_DOCKER_BUILD" = false ]; then
|
|
maven_build
|
|
fi
|
|
docker_build
|
|
start_service
|
|
;;
|
|
*)
|
|
echo "使用方法: $0 {build|start|stop|restart|logs|clean|all}"
|
|
echo ""
|
|
echo "命令说明:"
|
|
echo " build - 构建 Docker 镜像"
|
|
echo " start - 启动服务"
|
|
echo " stop - 停止服务"
|
|
echo " restart - 重启服务"
|
|
echo " logs - 查看日志"
|
|
echo " clean - 清理所有资源"
|
|
echo " all - 构建并启动服务"
|
|
exit 1
|
|
;;
|
|
esac
|
|
}
|
|
|
|
# 执行主函数
|
|
main "$@"
|