From 54496229c22edef305573b67da7496bca91ba50a Mon Sep 17 00:00:00 2001 From: LenaGmbh Date: Thu, 1 Jan 2026 20:58:53 +0100 Subject: [PATCH 1/2] URL-4 Added Dockerfiles for all Services --- services/analytics-service/Dockerfile | 53 +++++++++++++++++++++++++++ services/redirect-service/Dockerfile | 53 +++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 services/analytics-service/Dockerfile create mode 100644 services/redirect-service/Dockerfile diff --git a/services/analytics-service/Dockerfile b/services/analytics-service/Dockerfile new file mode 100644 index 0000000..db7a076 --- /dev/null +++ b/services/analytics-service/Dockerfile @@ -0,0 +1,53 @@ +# Build stage +FROM gradle:8.10.1-jdk21 AS build + +WORKDIR /app + +# Copy Gradle wrapper and build files for dependency caching +COPY gradle/ gradle/ +COPY gradlew gradlew.bat ./ +COPY build.gradle settings.gradle ./ + +# Copy source code +COPY services/analytics-service/build.gradle ./services/analytics-service/ +COPY services/analytics-service/src ./services/analytics-service/src/ + +# Build the application +RUN ./gradlew :services:analytics-service:bootJar --no-daemon + +# Runtime stage +FROM eclipse-temurin:21-jre-jammy AS runtime + +# Install curl for health checks (minimal size impact) +RUN apt-get update && \ + apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN groupadd -r spring && useradd -r -g spring spring + +# Set working directory +WORKDIR /app + +# Copy the JAR from build stage +COPY --from=build /app/services/analytics-service/build/libs/*.jar app.jar + +# Change ownership to non-root user +RUN chown spring:spring app.jar + +# Switch to non-root user +USER spring:spring + +# Expose application port (default Spring Boot port, can be overridden via env) +EXPOSE 8080 + +# Health check for Kubernetes (can be overridden by K8s probes) +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:${SERVER_PORT:-8080}/actuator/health || exit 1 + +# Optimize JVM for containers +ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC -XX:+UseStringDeduplication" + +# Run the application +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] + diff --git a/services/redirect-service/Dockerfile b/services/redirect-service/Dockerfile new file mode 100644 index 0000000..7823e64 --- /dev/null +++ b/services/redirect-service/Dockerfile @@ -0,0 +1,53 @@ +# Build stage +FROM gradle:8.10.1-jdk21 AS build + +WORKDIR /app + +# Copy Gradle wrapper and build files for dependency caching +COPY gradle/ gradle/ +COPY gradlew gradlew.bat ./ +COPY build.gradle settings.gradle ./ + +# Copy source code +COPY services/redirect-service/build.gradle ./services/redirect-service/ +COPY services/redirect-service/src ./services/redirect-service/src/ + +# Build the application +RUN ./gradlew :services:redirect-service:bootJar --no-daemon + +# Runtime stage +FROM eclipse-temurin:21-jre-jammy AS runtime + +# Install curl for health checks (minimal size impact) +RUN apt-get update && \ + apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN groupadd -r spring && useradd -r -g spring spring + +# Set working directory +WORKDIR /app + +# Copy the JAR from build stage +COPY --from=build /app/services/redirect-service/build/libs/*.jar app.jar + +# Change ownership to non-root user +RUN chown spring:spring app.jar + +# Switch to non-root user +USER spring:spring + +# Expose application port (default Spring Boot port, can be overridden via env) +EXPOSE 8080 + +# Health check for Kubernetes (can be overridden by K8s probes) +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:${SERVER_PORT:-8080}/actuator/health || exit 1 + +# Optimize JVM for containers +ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC -XX:+UseStringDeduplication" + +# Run the application +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] + From 60000bc9ab224288019b571ca59aa90fc6fe0bdd Mon Sep 17 00:00:00 2001 From: LenaGmbh Date: Thu, 1 Jan 2026 20:59:10 +0100 Subject: [PATCH 2/2] URL-4 Added Dockerfiles for all Services --- services/auth-service/Dockerfile | 53 ++++++++++++++++++++++++++ services/shortener-service/Dockerfile | 54 +++++++++++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 services/shortener-service/Dockerfile diff --git a/services/auth-service/Dockerfile b/services/auth-service/Dockerfile index e69de29..b3d7509 100644 --- a/services/auth-service/Dockerfile +++ b/services/auth-service/Dockerfile @@ -0,0 +1,53 @@ +# Build stage +FROM gradle:8.10.1-jdk21 AS build + +WORKDIR /app + +# Copy Gradle wrapper and build files for dependency caching +COPY gradle/ gradle/ +COPY gradlew gradlew.bat ./ +COPY build.gradle settings.gradle ./ + +# Copy source code +COPY services/auth-service/build.gradle ./services/auth-service/ +COPY services/auth-service/src ./services/auth-service/src/ + +# Build the application +RUN ./gradlew :services:auth-service:bootJar --no-daemon + +# Runtime stage +FROM eclipse-temurin:21-jre-jammy AS runtime + +# Install curl for health checks (minimal size impact) +RUN apt-get update && \ + apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN groupadd -r spring && useradd -r -g spring spring + +# Set working directory +WORKDIR /app + +# Copy the JAR from build stage +COPY --from=build /app/services/auth-service/build/libs/*.jar app.jar + +# Change ownership to non-root user +RUN chown spring:spring app.jar + +# Switch to non-root user +USER spring:spring + +# Expose application port (default Spring Boot port, can be overridden via env) +EXPOSE 8080 + +# Health check for Kubernetes (can be overridden by K8s probes) +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:${SERVER_PORT:-8080}/actuator/health || exit 1 + +# Optimize JVM for containers +ENV JAVA_OPTS="-XX:+UseContainerSupport -XX:MaxRAMPercentage=75.0 -XX:+UseG1GC -XX:+UseStringDeduplication" + +# Run the application +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] + diff --git a/services/shortener-service/Dockerfile b/services/shortener-service/Dockerfile new file mode 100644 index 0000000..a40583d --- /dev/null +++ b/services/shortener-service/Dockerfile @@ -0,0 +1,54 @@ +# Build stage +FROM gradle:8.10.1-jdk21 AS build + +WORKDIR /app + +# Copy Gradle wrapper and build files for dependency caching +COPY gradle/ gradle/ +COPY gradlew gradlew.bat ./ +COPY build.gradle settings.gradle ./ + +# Copy source code +COPY services/shortener-service/build.gradle ./services/shortener-service/ +COPY services/shortener-service/src ./services/shortener-service/src/ + +# Build the application +RUN chmod +x gradlew +RUN ./gradlew :services:shortener-service:bootJar --no-daemon + +# Runtime stage +FROM eclipse-temurin:21-jre-jammy AS runtime + +# Install curl for health checks (minimal size impact) +RUN apt-get update && \ + apt-get install -y --no-install-recommends curl && \ + rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN groupadd -r spring && useradd -r -g spring spring + +# Set working directory +WORKDIR /app + +# Copy the JAR from build stage +COPY --from=build /app/services/shortener-service/build/libs/*.jar app.jar + +# Change ownership to non-root user +RUN chown spring:spring app.jar + +# Switch to non-root user +USER spring:spring + +# Expose application port +EXPOSE 8080 + +# Health check for Kubernetes (can be overridden by K8s probes) +HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:8080/actuator/health || exit 1 + +# Optimize JVM for containers +ENV JAVA_OPTS="-XX:MaxRAMPercentage=75.0 -XX:+UseG1GC" + +# Run the application +ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar app.jar"] +