Введение: Почему деплой 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 (название зависит от конфигурации). Скопируйте его на ваш локальный компьютер.
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 /