Какие основные варианты развертывания Java-приложений?

«Какие основные варианты развертывания Java-приложений?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Выбор зависит от требований к масштабируемости, отказоустойчивости и бюджету. Основные варианты:

  1. Локальный сервер — для разработки и тестирования (например, Tomcat, Jetty, WildFly).
  2. Облачные виртуальные машины (IaaS) — AWS EC2, Google Compute Engine, Azure VMs.
  3. Контейнеризация и оркестрация — Docker + Kubernetes (стандарт для микросервисов).
  4. Управляемые платформы (PaaS) — Heroku, Cloud Foundry, AWS Elastic Beanstalk.
  5. Serverless — AWS Lambda, Google Cloud Functions (для событийно-ориентированных задач).

Пример деплоя WAR-файла в Tomcat через Maven:

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://localhost:8080/manager/text</url>
        <server>TomcatServer</server>
        <path>/myapp</path>
    </configuration>
</plugin>

Пример Dockerfile для Spring Boot приложения:

FROM eclipse-temurin:17-jre-alpine
COPY target/myapp.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

Почему Kubernetes стал стандартом? Он обеспечивает автоматическое масштабирование, самовосстановление и декларативное управление конфигурацией.