52 lines
1.4 KiB
Docker
52 lines
1.4 KiB
Docker
# Stage 1: Build
|
|
FROM maven:3.9-eclipse-temurin-21 AS builder
|
|
WORKDIR /build
|
|
|
|
# Copy the parent pom and all module poms first for better layer caching
|
|
COPY backend/pom.xml ./pom.xml
|
|
COPY backend/projectmanagement-client/pom.xml projectmanagement-client/
|
|
COPY backend/projectmanagement-server/pom.xml projectmanagement-server/
|
|
|
|
|
|
RUN mvn dependency:go-offline -B
|
|
|
|
# Copy the entire backend source code
|
|
COPY backend/ .
|
|
|
|
# 4. Build the application
|
|
RUN mvn -pl projectmanagement-server -am clean package \
|
|
-DskipTests -Dmaven.javadoc.skip=true
|
|
|
|
|
|
# =======================
|
|
# Runtime Image
|
|
# =======================
|
|
FROM eclipse-temurin:21-jre-alpine
|
|
WORKDIR /app
|
|
|
|
# Create user and group
|
|
RUN addgroup -S spring && adduser -S spring -G spring
|
|
|
|
# Copy the built JAR from builder stage
|
|
COPY --from=builder /build/projectmanagement-server/target/*.jar app.jar
|
|
|
|
# Create directories and set permissions
|
|
RUN mkdir -p /app/logs /app/bpmn && \
|
|
chown -R spring:spring /app/logs /app
|
|
|
|
# Copy BPMN files
|
|
# NOTE: This expects a 'bpmn' folder in your project root
|
|
COPY --chown=spring:spring bpmn/ /app/bpmn/
|
|
|
|
|
|
USER spring
|
|
EXPOSE 8071
|
|
|
|
# Environment setup
|
|
ENV IKON_ACCESSMANAGEMENT_INIT_FILE=/app/bpmn/project.json
|
|
ENV IKON_PROCESSENGINE_BPMN_PATH=/app/bpmn
|
|
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0"
|
|
|
|
# Run the application
|
|
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"]
|