diff --git a/Dockerfile.prod b/Dockerfile.prod new file mode 100644 index 0000000..e0f53b9 --- /dev/null +++ b/Dockerfile.prod @@ -0,0 +1,50 @@ +# Build +FROM maven:3.9.6-eclipse-temurin-21 AS builder +WORKDIR /workspace +COPY pom.xml . +RUN mvn dependency:go-offline -B +COPY src ./src +RUN mvn clean package -DskipTests + +# Create optimized runtime +FROM eclipse-temurin:21 AS app-build +ENV RELEASE=21 + +WORKDIR /opt/build +COPY --from=builder /workspace/target/*.jar ./application.jar + +RUN java -Djarmode=layertools -jar application.jar extract +RUN $JAVA_HOME/bin/jlink \ + --add-modules $(jdeps --ignore-missing-deps -q -recursive --multi-release ${RELEASE} --print-module-deps -cp 'dependencies/BOOT-INF/lib/*' application.jar),jdk.crypto.ec,jdk.security.auth,jdk.crypto.cryptoki \ + --strip-debug \ + --no-man-pages \ + --no-header-files \ + --compress=2 \ + --output jdk + +# Run +FROM debian:bookworm-slim + +ARG BUILD_PATH=/opt/build +ENV JAVA_HOME=/opt/jdk +ENV PATH="${JAVA_HOME}/bin:${PATH}" + +RUN groupadd --gid 1000 spring-app \ + && useradd --uid 1000 --gid spring-app --shell /bin/bash --create-home spring-app + +RUN apt-get update && \ + apt-get install -y --no-install-recommends ca-certificates && \ + rm -rf /var/lib/apt/lists/* + +USER spring-app:spring-app +WORKDIR /opt/workspace + +COPY --from=app-build $BUILD_PATH/jdk $JAVA_HOME +COPY --from=app-build $BUILD_PATH/spring-boot-loader/ ./ +COPY --from=app-build $BUILD_PATH/dependencies/ ./ +COPY --from=app-build $BUILD_PATH/snapshot-dependencies/ ./ +COPY --from=app-build $BUILD_PATH/application/ ./ + +EXPOSE 8080/tcp +ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"] + diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000..4050c19 --- /dev/null +++ b/compose.yml @@ -0,0 +1,11 @@ +services: + vue-bff: + image: anyame-vue-bff:latest + ports: + - 8090:8080 + env_file: .env + networks: + - anyame +networks: + anyame: + driver: bridge