diff --git a/Dockerfile b/Dockerfile index d04435d..43118ee 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,28 +1,38 @@ -# --- Этап 1: Сборка Angular --- -FROM node:20-alpine AS frontend-builder -WORKDIR /app/ui -COPY spring-angular-ui/package*.json ./ -RUN npm install --legacy-peer-deps -COPY spring-angular-ui/ ./ -ENV NODE_OPTIONS="--max-old-space-size=2048" -RUN npx ng build --configuration=production +# 1. Этап сборки (Build stage) +FROM eclipse-temurin:21-jdk-jammy AS build + +# Устанавливаем Node.js v20 +RUN apt-get update && apt-get install -y curl \ + && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \ + && apt-get install -y nodejs \ + && apt-get clean + +RUN apt-get update && apt-get install -y docker.io -# --- Этап 2: Сборка Java (Gradle) --- -FROM eclipse-temurin:21-jdk-alpine AS backend-builder WORKDIR /app -COPY gradlew . -COPY gradle gradle -COPY build.gradle settings.gradle ./ -RUN ./gradlew dependencies --no-daemon +# Копируем всё содержимое проекта COPY . . -# Копируем уже собранный фронтенд в static -COPY --from=frontend-builder /app/ui/dist/spring-angular-ui /app/src/main/resources/static + +# Даем права на запуск Gradle +RUN chmod +x gradlew + +# Устанавливаем зависимости фронтенда +RUN cd spring-angular-ui && npm install --legacy-peer-deps + +# Запускаем сборку через Gradle +RUN ./gradlew copyAngularBuild_prod --no-daemon RUN ./gradlew bootJar -x test --no-daemon -# --- Этап 3: Финальный образ --- -FROM eclipse-temurin:21-jre-alpine +# 2. Финальный образ (Runtime stage) +FROM eclipse-temurin:21-jdk-jammy + +RUN apt-get update && \ + apt-get install -y docker.io docker-compose-v2 && \ + apt-get clean + WORKDIR /app -COPY --from=backend-builder /app/build/libs/*.jar app.jar +COPY --from=build /app/build/libs/*.jar app.jar + EXPOSE 8080 -ENTRYPOINT ["java", "-jar", "app.jar"] \ No newline at end of file +ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"] \ No newline at end of file