From 86e4580e5d7320abd1f5c65a107e01a876470e71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AE=85=E6=88=BF?= Date: Mon, 29 Dec 2025 14:34:54 +0800 Subject: [PATCH] feat: add multi-stage Dockerfile for full build with martial-tool - Add Dockerfile.fullbuild: multi-stage build that compiles martial-tool - Rename Dockerfile to Dockerfile.quick for quick builds (pre-built jar) - Update docker-compose.yml to use parent directory context - Update README with new deployment instructions --- Dockerfile.fullbuild | 50 ++++++++++++++++++++++++++++++++++ Dockerfile => Dockerfile.quick | 0 README.md | 41 +++++++++++++++++++--------- docker-compose.yml | 8 ++---- 4 files changed, 81 insertions(+), 18 deletions(-) create mode 100644 Dockerfile.fullbuild rename Dockerfile => Dockerfile.quick (100%) diff --git a/Dockerfile.fullbuild b/Dockerfile.fullbuild new file mode 100644 index 0000000..36e16b8 --- /dev/null +++ b/Dockerfile.fullbuild @@ -0,0 +1,50 @@ +# ============================================ +# 武术赛事管理系统 - 完整构建 Dockerfile +# 包含 martial-tool 编译 + martial-master 编译 +# ============================================ + +# 构建阶段:使用 Maven + JDK 镜像 +FROM maven:3.9-eclipse-temurin-17 AS builder + +WORKDIR /build + +# 复制 martial-tool(BladeX 框架) +COPY martial-tool /build/martial-tool + +# 编译 martial-tool 并安装到本地仓库 +RUN cd /build/martial-tool && \ + mvn clean install -DskipTests -q + +# 复制 martial-master(后端项目) +COPY martial-master /build/martial-master + +# 编译 martial-master +RUN cd /build/martial-master && \ + mvn clean package -DskipTests -q + +# ============================================ +# 运行阶段:使用轻量级 JRE 镜像 +# ============================================ +FROM eclipse-temurin:17-jre-jammy + +LABEL maintainer="JohnSion" +LABEL description="武术比赛管理系统后端服务" + +WORKDIR /app + +# 从构建阶段复制 JAR 文件 +COPY --from=builder /build/martial-master/target/blade-api.jar /app/blade-api.jar + +# 暴露端口 +EXPOSE 8123 + +# 健康检查 +HEALTHCHECK --interval=30s --timeout=3s --start-period=60s --retries=3 \ + CMD curl -f http://localhost:8123/actuator/health || exit 1 + +# JVM 参数配置 +ENV JAVA_OPTS="-Xms512m -Xmx1024m -XX:+UseG1GC" +ENV SPRING_PROFILE="dev" + +# 启动命令 +CMD ["sh", "-c", "java ${JAVA_OPTS} -jar /app/blade-api.jar --spring.profiles.active=${SPRING_PROFILE}"] diff --git a/Dockerfile b/Dockerfile.quick similarity index 100% rename from Dockerfile rename to Dockerfile.quick diff --git a/README.md b/README.md index 20c9a4f..45ae28d 100644 --- a/README.md +++ b/README.md @@ -28,20 +28,29 @@ ### 环境要求 -- JDK 17+ -- Maven 3.8+ - Docker & Docker Compose -### Docker Compose 部署(推荐) +### 一键部署(推荐) + +确保目录结构如下: +``` +martial/ +├── martial-tool/ # BladeX 框架(必需) +├── martial-master/ # 后端项目 +├── martial-web/ # 管理后台前端 +├── martial-mini/ # 用户端小程序 +└── martial-admin-mini/ # 裁判端小程序 +``` ```bash -# 克隆项目 -git clone https://git.waypeak.work/martial/martial-master.git -cd martial-master +cd martial/martial-master -# 启动所有服务 +# 首次部署(完整构建,约5-6分钟) docker compose up -d +# 查看构建日志 +docker compose logs -f martial-api + # 查看服务状态 docker compose ps ``` @@ -50,14 +59,19 @@ docker compose ps - API 服务: http://localhost:8123 - API 文档: http://localhost:8123/doc.html -### 本地开发 +### 快速构建(开发迭代) + +如果已经手动编译过 JAR,可以使用快速构建: ```bash -# 编译项目 -mvn clean package -DskipTests +# 先编译 martial-tool(首次) +cd ../martial-tool && mvn clean install -DskipTests -# 运行(需要先启动 MySQL 和 Redis) -mvn spring-boot:run -Dspring-boot.run.profiles=dev +# 编译 martial-master +cd ../martial-master && mvn clean package -DskipTests + +# 使用快速构建 Dockerfile +docker compose build martial-api --build-arg DOCKERFILE=Dockerfile.quick ``` ## 项目结构 @@ -79,7 +93,8 @@ martial-master/ ├── database/ # 数据库初始化脚本 ├── docs/ # 项目文档 ├── docker-compose.yml # Docker 编排配置 -└── Dockerfile # 镜像构建文件 +├── Dockerfile.fullbuild # 完整构建(含 martial-tool) +└── Dockerfile.quick # 快速构建(需预编译 JAR) ``` ## Docker Compose 服务 diff --git a/docker-compose.yml b/docker-compose.yml index bb41339..7eb69d9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,5 +1,3 @@ -version: '3.8' - services: # MySQL 数据库 mysql: @@ -84,11 +82,11 @@ services: networks: - martial-network - # 后端应用 + # 后端应用(完整构建模式) martial-api: build: - context: . - dockerfile: Dockerfile + context: .. + dockerfile: martial-master/Dockerfile.fullbuild container_name: martial-api restart: always environment: