56 lines
No EOL
1.4 KiB
Text
56 lines
No EOL
1.4 KiB
Text
# Frontend Build Stage
|
|
FROM node:20-alpine AS frontend-build
|
|
WORKDIR /app/frontend
|
|
|
|
# Nur package files zuerst kopieren für besseres Caching
|
|
COPY src/frontend/package*.json ./
|
|
RUN npm ci --only=production
|
|
|
|
# Frontend Source Code kopieren
|
|
COPY src/frontend/ ./
|
|
|
|
# Frontend bauen
|
|
RUN npm run build
|
|
|
|
# Backend Build Stage
|
|
FROM maven:3.9-eclipse-temurin-23 AS backend-build
|
|
WORKDIR /app
|
|
|
|
# Nur pom.xml zuerst für besseres Dependency Caching
|
|
COPY pom.xml ./
|
|
RUN mvn dependency:go-offline -B
|
|
|
|
# Backend Source Code kopieren (ohne frontend)
|
|
COPY src ./src
|
|
|
|
# Frontend Build Results kopieren
|
|
COPY --from=frontend-build /app/frontend/dist ./src/main/resources/static
|
|
|
|
# Build mit optimierten Maven Settings
|
|
RUN mvn clean package -DskipTests -B -T 1C
|
|
|
|
# Runtime Stage - Optimiert
|
|
FROM eclipse-temurin:23-jre-alpine
|
|
|
|
# Sicherheit: Non-root User
|
|
RUN addgroup -g 1001 -S appgroup && \
|
|
adduser -u 1001 -S appuser -G appgroup
|
|
|
|
WORKDIR /app
|
|
|
|
# App kopieren
|
|
COPY --from=backend-build --chown=appuser:appgroup /app/target/*.jar app.jar
|
|
|
|
# Wechsel zu non-root user
|
|
USER appuser
|
|
|
|
# Health check hinzufügen (optional, passe den Pfad an)
|
|
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
|
|
CMD wget --no-verbose --tries=1 --spider http://localhost:8080/actuator/health || exit 1
|
|
|
|
EXPOSE 8080
|
|
|
|
# JVM Memory Optimierungen
|
|
ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+ExitOnOutOfMemoryError"
|
|
|
|
ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] |