Ответ
В проекте использовался Docker для контейнеризации приложения и его зависимостей с последующим развертыванием в облаке.
Стек и процесс:
-
Сборка образа:
# Dockerfile FROM eclipse-temurin:17-jdk-alpine AS builder WORKDIR /app COPY . . RUN ./mvnw clean package -DskipTests FROM eclipse-temurin:17-jre-alpine WORKDIR /app COPY --from=builder /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"] -
Локальная разработка: Использовался
docker-compose.ymlдля поднятия всего стека (приложение + БД + кэш).version: '3.8' services: app: build: . ports: - "8080:8080" depends_on: - postgres postgres: image: postgres:15 environment: POSTGRES_DB: mydb -
Развертывание (Deployment): Образы хранились в Amazon ECR (Container Registry). Для оркестрации использовался AWS ECS (Elastic Container Service) в режиме Fargate (бессерверные контейнеры), что избавило от управления серверами.
-
Инфраструктура как код (IaC): Конфигурация ECS (кластер, сервисы, задачи) описывалась с помощью Terraform.
-
CI/CD: Сборка, тестирование и деплой автоматизированы через GitHub Actions.
Преимущества такого подхода: воспроизводимость, изоляция зависимостей, масштабируемость и согласованность сред (dev/prod).