FROM node:20-alpine AS frontend-build WORKDIR /build/frontend ARG VITE_API_URL=/api ENV VITE_API_URL=${VITE_API_URL} COPY backend/pom.xml /build/backend/pom.xml COPY frontend/package*.json ./ RUN npm ci COPY frontend/ ./ RUN npm run build FROM maven:3.9.11-eclipse-temurin-21 AS backend-build WORKDIR /build/backend COPY backend/pom.xml ./ RUN mvn -B -q -DskipTests dependency:go-offline COPY backend/ ./ COPY --from=frontend-build /build/frontend/dist ./src/main/resources/static RUN mvn -B -q -DskipTests package \ && cp "$(find target -maxdepth 1 -type f -name '*.jar' ! -name '*.original' | head -n 1)" /build/backend/app.jar FROM eclipse-temurin:21-jre-alpine AS runtime WORKDIR /app RUN addgroup -S spring && adduser -S spring -G spring COPY --from=backend-build /build/backend/app.jar /app/app.jar USER spring:spring EXPOSE 8090 ENTRYPOINT ["java", "-jar", "/app/app.jar"]