Деплой Kotlin приложения на VPS: пошаговое руководство от А до Я

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

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

Начать курс

Введение: Почему деплой Kotlin приложения требует особого подхода

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

В этом руководстве мы разберем полный цикл деплоя Kotlin-приложения на VPS (Virtual Private Server). Вы узнаете, как собрать проект в исполняемый JAR-файл, настроить серверное окружение, запустить приложение как службу и обеспечить его стабильную работу. Статья рассчитана на разработчиков, которые уже имеют базовые знания Kotlin и Linux.

1. Подготовка проекта и сборка JAR-файла

Прежде чем загружать код на сервер, необходимо собрать приложение в единый артефакт. Для Kotlin-проектов, написанных с использованием Spring Boot или Ktor, стандартным форматом является JAR-файл (Java Archive).

1.1. Настройка build.gradle.kts

Убедитесь, что в вашем файле build.gradle.kts присутствует плагин для сборки исполняемого JAR. Для Spring Boot это выглядит так:

plugins {
    kotlin("jvm") version "1.9.22"
    id("org.springframework.boot") version "3.2.2"
    id("io.spring.dependency-management") version "1.1.4"
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
}

Для чистого Ktor (без Spring) используйте плагин application:

plugins {
    kotlin("jvm") version "1.9.22"
    application
}

application {
    mainClass.set("com.example.ApplicationKt")
}

1.2. Сборка проекта

Выполните команду сборки в корневой папке проекта:

./gradlew clean build

После успешной сборки в директории build/libs/ появится файл app-0.0.1-SNAPSHOT.jar (название зависит от конфигурации). Скопируйте его на ваш локальный компьютер.

Важно: Для Ktor-приложений убедитесь, что в файле src/main/resources/application.conf указан правильный порт (обычно 8080) и режим работы.

2. Настройка VPS сервера

Для деплоя нам потребуется VPS с установленной ОС Ubuntu 22.04 LTS. Предполагается, что у вас есть доступ по SSH и права суперпользователя (sudo).

2.1. Установка Java (JRE)

Kotlin компилируется в байт-код JVM, поэтому на сервере обязательно должна быть установлена Java Runtime Environment (JRE) версии 17 или выше:

sudo apt update
sudo apt install openjdk-17-jre -y
java -version

2.2. Создание пользователя для приложения

В целях безопасности не рекомендуется запускать приложение от имени root. Создадим отдельного пользователя:

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

2.3. Загрузка JAR-файла на сервер

Используйте SCP для копирования файла с локальной машины на VPS:

scp build/libs/app-0.0.1-SNAPSHOT.jar kotlinapp@your-server-ip:/home/kotlinapp/app.jar

3. Запуск приложения и настройка Systemd

Чтобы приложение автоматически запускалось при старте системы и не падало при потере SSH-соединения, мы настроим его как службу Systemd.

3.1. Ручной запуск (для проверки)

Подключитесь к серверу под пользователем kotlinapp и выполните:

cd /home/kotlinapp
java -jar app.jar

Если приложение запустилось и отвечает на порту 8080, переходим к следующему шагу. Остановите процесс (Ctrl+C).

3.2. Создание Unit-файла Systemd

Создайте файл службы:

sudo nano /etc/systemd/system/kotlin-app.service

Вставьте следующее содержимое:

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

[Service]
User=kotlinapp
WorkingDirectory=/home/kotlinapp
ExecStart=/usr/bin/java -jar /home/kotlinapp/app.jar
Restart=always
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=kotlin-app

[Install]
WantedBy=multi-user.target

Сохраните файл (Ctrl+O, затем Ctrl+X).

3.3. Включение и запуск службы

sudo systemctl daemon-reload
sudo systemctl enable kotlin-app
sudo systemctl start kotlin-app
sudo systemctl status kotlin-app

Статус должен показывать active (running). Теперь ваше приложение будет автоматически перезапускаться при сбоях или перезагрузке сервера.

4. Настройка обратного прокси (Nginx) и домена

Прямой доступ к приложению через порт 8080 неудобен и небезопасен. Настроим Nginx как обратный прокси-сервер, который будет принимать запросы на 80-й (HTTP) и 443-й (HTTPS) порты и перенаправлять их на ваше Kotlin-приложение.

4.1. Установка Nginx

sudo apt install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx

4.2. Создание конфигурации сайта

Создайте файл конфигурации:

sudo nano /etc/nginx/sites-available/kotlin-app

Содержимое:

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Активируйте конфигурацию и проверьте:

sudo ln -s /etc/nginx/sites-available/kotlin-app /                

Блоги

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