Деплой Kotlin приложений: от VPS до облака без боли

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Ваш Kotlin-код работает локально. Что дальше?

Вы написали крутое приложение на Kotlin. Оно идеально работает на вашем ноутбуке, тесты проходят, эндпоинты отвечают мгновенно. Но настоящая магия начинается только тогда, когда приложение выходит в свет — на реальный сервер, где его увидят пользователи.

Деплой Kotlin-приложений — это не просто "закинуть jar-файл на сервер". Это целая наука, которая включает выбор инфраструктуры, настройку окружения, обеспечение безопасности и отказоустойчивости. В этой статье мы разберем три самых популярных подхода: классический VPS, современный Docker и гибкие облачные платформы. Вы узнаете, как деплоить Kotlin-приложения на каждом из этих вариантов, получите готовые примеры кода и поймете, какой путь лучше выбрать для вашего проекта.

Подготовка: что нужно знать перед деплоем Kotlin

Прежде чем мы погрузимся в детали, давайте убедимся, что у нас есть база. Для деплоя Kotlin-приложения вам понадобится:

  • Собранный артефакт — обычно это JAR-файл (для Spring Boot, Ktor) или WAR-файл (для старых Java EE проектов). Kotlin компилируется в байт-код JVM, поэтому все стандартные Java-инструменты работают отлично.
  • Java Runtime Environment (JRE) — минимум версия 11, а лучше 17 или 21. Kotlin активно использует фичи новых версий Java.
  • Система сборки — Gradle или Maven. Мы будем использовать Gradle, так как он де-факто стандарт для Kotlin-проектов.

Пример простейшей команды для сборки Kotlin-приложения:

./gradlew clean build

После выполнения в папке build/libs/ появится JAR-файл, готовый к запуску.

Деплой Kotlin на VPS: классика, которая работает

Виртуальный частный сервер (VPS) — это как собственная квартира. Вы получаете полный контроль над окружением, но и всю ответственность за уборку и безопасность берете на себя. Этот подход идеален для небольших проектов, стартапов или когда вам нужна максимальная гибкость.

Выбор VPS и настройка сервера

Для Kotlin-приложений подойдет любой VPS с Linux (Ubuntu 22.04 LTS — отличный выбор). Минимальные требования: 1-2 GB RAM, 20-30 GB SSD. Мы рекомендуем провайдеров с хорошей поддержкой: DigitalOcean, Vultr, Hetzner или Timeweb (для российских пользователей).

После покупки сервера первым делом обновляем пакеты и устанавливаем Java:

sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-17-jre-headless -y
java -version

Теперь создадим простого пользователя для запуска приложения (никогда не запускайте под root!):

sudo useradd -m -s /bin/bash kotlinapp
sudo passwd kotlinapp

Запуск Kotlin-приложения на VPS

Скопируем JAR-файл на сервер через SCP или SFTP:

scp build/libs/myapp-1.0.0.jar kotlinapp@ваш-сервер:/home/kotlinapp/app.jar

Теперь запустим приложение. Для простоты используем nohup, чтобы процесс не умирал при закрытии SSH:

nohup java -jar /home/kotlinapp/app.jar --server.port=8080 &

Но это лишь первый шаг. В реальной жизни вам понадобится:

  • Systemd-сервис — для автоматического перезапуска приложения после сбоев и при старте сервера.
  • Nginx — как обратный прокси для HTTPS, балансировки и статики.
  • Мониторинг — хотя бы простой логгинг и проверка uptime.

Пример systemd-сервиса для Kotlin-приложения (/etc/systemd/system/kotlinapp.service):

[Unit]
Description=Kotlin Application
After=network.target

[Service]
User=kotlinapp
WorkingDirectory=/home/kotlinapp
ExecStart=/usr/bin/java -jar /home/kotlinapp/app.jar --server.port=8080
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

После создания файла выполняем:

sudo systemctl daemon-reload
sudo systemctl enable kotlinapp
sudo systemctl start kotlinapp
sudo systemctl status kotlinapp

Плюсы VPS: полный контроль, предсказуемая цена (фикс в месяц), подходит для любых типов приложений.
Минусы VPS: ручное администрирование, сложности с масштабированием, необходимость настраивать безопасность самостоятельно.

Деплой Kotlin в Docker: контейнерная революция

Docker решает главную проблему деплоя — "на моей машине работает!". Вы упаковываете Kotlin-приложение вместе со всеми зависимостями в легковесный контейнер, который будет работать одинаково на любом сервере — будь то VPS, ноутбук коллеги или облачная платформа.

Создание Dockerfile для Kotlin

Вот минимальный Dockerfile для Kotlin-приложения на Spring Boot или Ktor:

FROM openjdk:17-jdk-slim AS build
WORKDIR /app
COPY build/libs/*.jar app.jar

FROM openjdk:17-jre-slim
WORKDIR /app
COPY --from=build /app/app.jar .
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Мы используем многостадийную сборку (multi-stage build): первый слой — для сборки, второй — минимальный для запуска. Это уменьшает размер итогового образа.

Собираем образ и запускаем:

docker build -t my-kotlin-app .
docker run -d -p 8080:8080 --name kotlin-container my-kotlin-app

Docker Compose: несколько сервисов

Если ваше приложение использует базу данных (PostgreSQL, Redis), Redis или очередь, используйте Docker Compose. Пример docker-compose.yml:

version: '3.8'

services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb
      - SPRING_DATASOURCE_USERNAME=user
      - SPRING_DATASOURCE_PASSWORD=pass
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: mydb
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

Запускаем одной командой:

docker-compose up -d

Блоги

Рекомендаций по книгам