diff --git a/crm-mcp/Dockerfile b/crm-mcp/Dockerfile index a589407..78b7301 100644 --- a/crm-mcp/Dockerfile +++ b/crm-mcp/Dockerfile @@ -1,5 +1,5 @@ # 多阶段构建 - 构建阶段 -FROM maven:3.8.6-openjdk-17-slim AS builder +FROM registry.cn-hangzhou.aliyuncs.com/library/maven:3.8.6-openjdk-17-slim AS builder # 设置工作目录 WORKDIR /app @@ -13,7 +13,7 @@ COPY src ./src RUN mvn clean package -DskipTests # 运行阶段 -FROM openjdk:17-jre-alpine +FROM registry.cn-hangzhou.aliyuncs.com/library/openjdk:17-jre-alpine # 设置时区和安装必要工具 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ diff --git a/crm-mcp/Dockerfile_backup b/crm-mcp/Dockerfile_backup new file mode 100644 index 0000000..5a2db21 --- /dev/null +++ b/crm-mcp/Dockerfile_backup @@ -0,0 +1,25 @@ +# 备用 Dockerfile - 使用 Eclipse Temurin JDK +FROM eclipse-temurin:17-jre-alpine + +# 设置时区和安装必要工具 +RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ + echo 'Asia/Shanghai' >/etc/timezone && \ + apk add --no-cache curl + +# 复制 jar 包 +COPY ./target/crm-mcp-*.jar /app/crm-mcp.jar + +# 设置工作目录 +WORKDIR /app + +# 暴露端口 +EXPOSE 8080 + +# 设置 JVM 参数和启动命令 +CMD ["java", \ + "-Xms512m", \ + "-Xmx1024m", \ + "-Dspring.profiles.active=dev", \ + "-Dspring.ai.mcp.server.stdio=false", \ + "-jar", \ + "crm-mcp.jar"] diff --git a/crm-mcp/Dockerfile_test b/crm-mcp/Dockerfile_test index 346cd52..7eec96b 100644 --- a/crm-mcp/Dockerfile_test +++ b/crm-mcp/Dockerfile_test @@ -1,4 +1,5 @@ -FROM openjdk:17-jre-alpine +# 使用阿里云镜像源的 OpenJDK +FROM registry.cn-hangzhou.aliyuncs.com/library/openjdk:17-jre-alpine # 设置时区和安装必要工具 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && \ diff --git a/crm-mcp/build.sh b/crm-mcp/build.sh new file mode 100755 index 0000000..b922d61 --- /dev/null +++ b/crm-mcp/build.sh @@ -0,0 +1,166 @@ +#!/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 构建..." + + if [ "$USE_DOCKER_BUILD" = true ]; then + # 使用多阶段构建 + docker build -t crm-mcp:latest . + else + # 使用测试 Dockerfile(需要先有 jar 包) + docker build -f Dockerfile_test -t crm-mcp:latest . + fi + + print_message "Docker 构建完成" +} + +# 启动服务 +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 "$@" diff --git a/crm-mcp/docker-compose.yml b/crm-mcp/docker-compose.yml new file mode 100644 index 0000000..112f59b --- /dev/null +++ b/crm-mcp/docker-compose.yml @@ -0,0 +1,53 @@ +version: '3.8' + +services: + crm-mcp: + build: + context: . + dockerfile: Dockerfile + image: crm-mcp:latest + container_name: crm-mcp-server + ports: + - "8080:8080" + environment: + - SPRING_PROFILES_ACTIVE=prod + - JAVA_OPTS=-Xms512m -Xmx1024m + - CRM_URL=https://www.rzdata.net/bcrm-statis-jwt/ + - CRM_TENANT_ID=BIO + - CRM_TOKEN=Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJJUXdrczhuUWc4NnJPQkpuenJDUThtbjl1N3FEQ2lWZyJ9.91GO7OMhVbc0tLBRZ7HYiFDEA92PXE7H1gHduwxWu2I + volumes: + - ./logs:/app/logs + - ./config:/app/config + networks: + - crm-network + restart: unless-stopped + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + + # 可选:添加 Nginx 反向代理 + nginx: + image: nginx:alpine + container_name: crm-mcp-nginx + ports: + - "80:80" + - "443:443" + volumes: + - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro + - ./nginx/ssl:/etc/nginx/ssl:ro + depends_on: + - crm-mcp + networks: + - crm-network + restart: unless-stopped + +networks: + crm-network: + driver: bridge + +volumes: + crm-logs: + driver: local