From 31ee0d4ecedf3317a9807eb8583c1da0a0c4486b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Mon, 27 Apr 2026 15:44:22 +0800 Subject: [PATCH] =?UTF-8?q?feat(docker):=20=E6=B7=BB=E5=8A=A0=E7=BD=91?= =?UTF-8?q?=E5=85=B3=E6=9C=8D=E5=8A=A1=EF=BC=8C=E5=AE=9E=E7=8E=B0=E5=89=8D?= =?UTF-8?q?=E7=AB=AF-=E3=80=8B=E7=BD=91=E5=85=B3-=E3=80=8B=E5=90=8E?= =?UTF-8?q?=E7=AB=AF=E8=B0=83=E7=94=A8=E9=93=BE=E8=B7=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新 docker-compose.yml 添加网关服务 - 更新后端 Dockerfile 支持多模块构建 - 更新网关 Dockerfile 支持多模块构建 - 前端 API 请求现在通过网关路由到后端 --- docker-compose.yml | 37 ++++++++++- novalon-manage-api/Dockerfile | 33 +++++++--- novalon-manage-api/manage-gateway/Dockerfile | 65 +++++++++++++++++++- 3 files changed, 123 insertions(+), 12 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 5560563..273d819 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -30,6 +30,39 @@ services: - novalon-network restart: unless-stopped + # 网关服务 + gateway: + build: + context: ./novalon-manage-api + dockerfile: manage-gateway/Dockerfile + args: + - BUILD_VERSION=${BUILD_VERSION:-latest} + container_name: novalon-gateway + environment: + <<: *common-env + SPRING_PROFILES_ACTIVE: docker + USER_SERVICE_URL: http://backend:8084 + SPRING_CLOUD_GATEWAY_ROUTES_0_URI: http://backend:8084 + ports: + - "8080:8080" + depends_on: + backend: + condition: service_healthy + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + networks: + - novalon-network + restart: unless-stopped + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" + # 后端API服务 backend: build: @@ -77,11 +110,11 @@ services: ports: - "3001:80" depends_on: - backend: + gateway: condition: service_healthy environment: <<: *common-env - VITE_API_BASE_URL: http://backend:8084 + VITE_API_BASE_URL: http://gateway:8080 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:80"] interval: 30s diff --git a/novalon-manage-api/Dockerfile b/novalon-manage-api/Dockerfile index 02e8eef..7d57b99 100644 --- a/novalon-manage-api/Dockerfile +++ b/novalon-manage-api/Dockerfile @@ -1,20 +1,39 @@ -# 多阶段构建优化Dockerfile +# 多阶段构建优化Dockerfile - 多模块项目 FROM maven:3.9-eclipse-temurin-21 AS builder WORKDIR /app -# 复制Maven配置文件和源码 +# 复制根POM和Maven包装器 COPY pom.xml . COPY mvnw . COPY mvnw.cmd . COPY .mvn .mvn +# 复制所有子模块POM和源码 +COPY manage-common/pom.xml manage-common/ +COPY manage-db/pom.xml manage-db/ +COPY manage-sys/pom.xml manage-sys/ +COPY manage-gateway/pom.xml manage-gateway/ +COPY manage-notify/pom.xml manage-notify/ +COPY manage-file/pom.xml manage-file/ +COPY manage-audit/pom.xml manage-audit/ +COPY manage-app/pom.xml manage-app/ + # 下载依赖(利用Docker缓存层) RUN ./mvnw dependency:go-offline -B -# 复制源码并构建 -COPY src ./src -RUN ./mvnw clean package -DskipTests +# 复制源码 +COPY manage-common/src manage-common/src +COPY manage-db/src manage-db/src +COPY manage-sys/src manage-sys/src +COPY manage-gateway/src manage-gateway/src +COPY manage-notify/src manage-notify/src +COPY manage-file/src manage-file/src +COPY manage-audit/src manage-audit/src +COPY manage-app/src manage-app/src + +# 构建manage-app模块 +RUN ./mvnw clean package -DskipTests -pl manage-app -am # 运行时镜像 FROM eclipse-temurin:21-jre-jammy @@ -30,7 +49,7 @@ RUN groupadd -r novalon && useradd -r -g novalon novalon WORKDIR /app # 复制构建产物 -COPY --from=builder --chown=novalon:novalon /app/target/*.jar app.jar +COPY --from=builder --chown=novalon:novalon /app/manage-app/target/*.jar app.jar # 设置JVM参数优化 ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport -Djava.security.egd=file:/dev/./urandom" @@ -46,4 +65,4 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ CMD curl -f http://localhost:8084/actuator/health || exit 1 # 启动命令 -ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] \ No newline at end of file +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] diff --git a/novalon-manage-api/manage-gateway/Dockerfile b/novalon-manage-api/manage-gateway/Dockerfile index d285685..55adf0a 100644 --- a/novalon-manage-api/manage-gateway/Dockerfile +++ b/novalon-manage-api/manage-gateway/Dockerfile @@ -1,9 +1,68 @@ -FROM openjdk:21-jdk-slim +# 多阶段构建优化Dockerfile - 多模块项目(网关) +FROM maven:3.9-eclipse-temurin-21 AS builder WORKDIR /app -COPY manage-gateway/target/manage-gateway-1.0.0.jar app.jar +# 复制根POM和Maven包装器 +COPY pom.xml . +COPY mvnw . +COPY mvnw.cmd . +COPY .mvn .mvn +# 复制所有子模块POM +COPY manage-common/pom.xml manage-common/ +COPY manage-db/pom.xml manage-db/ +COPY manage-sys/pom.xml manage-sys/ +COPY manage-gateway/pom.xml manage-gateway/ +COPY manage-notify/pom.xml manage-notify/ +COPY manage-file/pom.xml manage-file/ +COPY manage-audit/pom.xml manage-audit/ +COPY manage-app/pom.xml manage-app/ + +# 下载依赖(利用Docker缓存层) +RUN ./mvnw dependency:go-offline -B + +# 复制源码 +COPY manage-common/src manage-common/src +COPY manage-db/src manage-db/src +COPY manage-sys/src manage-sys/src +COPY manage-gateway/src manage-gateway/src +COPY manage-notify/src manage-notify/src +COPY manage-file/src manage-file/src +COPY manage-audit/src manage-audit/src +COPY manage-app/src manage-app/src + +# 构建manage-gateway模块 +RUN ./mvnw clean package -DskipTests -pl manage-gateway -am + +# 运行时镜像 +FROM eclipse-temurin:21-jre-jammy + +# 设置时区和语言环境 +RUN apt-get update && apt-get install -y \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# 创建非root用户运行应用 +RUN groupadd -r novalon && useradd -r -g novalon novalon + +WORKDIR /app + +# 复制构建产物 +COPY --from=builder --chown=novalon:novalon /app/manage-gateway/target/*.jar app.jar + +# 设置JVM参数优化 +ENV JAVA_OPTS="-Xmx512m -Xms256m -XX:+UseG1GC -XX:+UnlockExperimentalVMOptions -XX:+UseContainerSupport -Djava.security.egd=file:/dev/./urandom" + +# 暴露端口 EXPOSE 8080 -ENTRYPOINT ["java", "-jar", "app.jar"] +# 切换用户 +USER novalon + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:8080/actuator/health || exit 1 + +# 启动命令 +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]