diff --git a/Makefile b/Makefile index 0644b8f3..61e94697 100644 --- a/Makefile +++ b/Makefile @@ -178,8 +178,9 @@ validate-release-config: ## 校验发布环境变量文件(默认 .env.release ./scripts/validate-release-config.sh .env.release staging: ## 构建并启动 staging 环境,运行 smoke test(混合模式:后端镜像 + 前端静态文件) - @echo "=== [1/5] Building backend Docker image ===" - docker build -t $(STAGING_SERVER_IMAGE) -f server/Dockerfile server + @echo "=== [1/5] Building backend JAR and Docker image ===" + cd server && ./mvnw package -DskipTests -B -q + docker build -t $(STAGING_SERVER_IMAGE) -f server/Dockerfile.dev server @echo "=== [2/5] Building frontend static files ===" cd web && pnpm run build @echo "=== [3/5] Starting dependency services ===" diff --git a/server/.dockerignore b/server/.dockerignore index b7da8964..f993bd6a 100644 --- a/server/.dockerignore +++ b/server/.dockerignore @@ -1,4 +1,7 @@ -**/target/ +# Exclude target for multi-stage build (Dockerfile) +# But allow it for runtime build (Dockerfile.runtime) which needs pre-built JAR +# **/target/ + **/.idea/ **/*.iml .git/ diff --git a/server/Dockerfile.dev b/server/Dockerfile.dev new file mode 100644 index 00000000..77f96fcc --- /dev/null +++ b/server/Dockerfile.dev @@ -0,0 +1,19 @@ +# Development Dockerfile +# Expects pre-built JAR at skillhub-app/target/*.jar +# Used by: make staging (local development workflow) +FROM eclipse-temurin:21-jre-alpine + +RUN addgroup -S app && adduser -S app -G app +WORKDIR /app + +# Copy pre-built JAR from local build (relative to server/ directory) +COPY ./skillhub-app/target/*.jar app.jar + +RUN chown -R app:app /app +USER app + +EXPOSE 8080 +HEALTHCHECK --interval=10s --timeout=3s \ + CMD wget -qO- http://localhost:8080/actuator/health || exit 1 + +ENTRYPOINT ["java", "-XX:MaxRAMPercentage=75.0", "-jar", "app.jar"]