FROM node:22.14.0-alpine AS web-build WORKDIR /build/web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ ./ RUN npm run build -- --mode production FROM hseeberger/scala-sbt:17.0.2_1.8.2_2.13.10 AS scala-build WORKDIR /build COPY build.sbt ./ COPY project/ ./project/ COPY src/ ./src/ RUN sbt clean assembly FROM amazoncorretto:17-alpine RUN addgroup -S weather && adduser -S -G weather weather WORKDIR /app RUN mkdir -p /app/data/tmp /app/data/grids /app/web/dist && chown -R weather:weather /app COPY --from=scala-build --chown=weather:weather /build/target/scala-2.13/app.jar /app/app.jar COPY --from=web-build --chown=weather:weather /build/web/dist/ /app/web/dist/ USER weather EXPOSE 8080 HEALTHCHECK --interval=30s --timeout=5s --start-period=40s --retries=3 \ CMD wget -q -O /dev/null http://127.0.0.1:8080/ || exit 1 CMD ["java", "-Xms128m", "-Xmx512m", "-XX:+UseG1GC", "-jar", "/app/app.jar"]