Деплой Kotlin приложения на VPS: пошаговое руководство
Разработка на Kotlin — это только половина дела. Чтобы ваше приложение стало доступно пользователям, его необходимо развернуть на сервере. В этом руководстве мы подробно рассмотрим процесс деплоя Kotlin (JVM) приложения на VPS (Virtual Private Server). Вы узнаете, как подготовить сервер, собрать приложение, настроить автозапуск и обеспечить безопасное HTTPS-соединение. Статья ориентирована на разработчиков, знакомых с основами Kotlin и Linux.
1. Подготовка сервера и окружения
Прежде чем загружать код, необходимо подготовить VPS. Мы будем использовать Ubuntu 22.04 LTS. Подключитесь к серверу по SSH:
ssh root@ваш-ip-сервера
Обновите пакеты и установите необходимые компоненты:
sudo apt update && sudo apt upgrade -y
sudo apt install openjdk-17-jdk git nginx certbot python3-certbot-nginx -y
Проверьте версию Java:
java -version
Теперь создадим пользователя для приложения (запускать процессы от root небезопасно):
sudo useradd -m -s /bin/bash kotlinapp
sudo usermod -aG sudo kotlinapp
su - kotlinapp
Убедитесь, что пользователь может запускать Java.
2. Сборка и загрузка Kotlin приложения
Рассмотрим два популярных фреймворка: Ktor и Spring Boot. Оба собираются в исполняемый JAR-файл. Пример для Ktor:
// build.gradle.kts (фрагмент)
plugins {
kotlin("jvm") version "1.9.22"
application
id("io.ktor.plugin") version "2.3.7"
}
application {
mainClass.set("com.example.ApplicationKt")
}
ktor {
fatJar {
archiveFileName.set("myapp.jar")
}
}
Соберите fat JAR локально:
./gradlew buildFatJar
Загрузите JAR на сервер через SCP (выполните на локальной машине):
scp build/libs/myapp.jar kotlinapp@ваш-ip:/home/kotlinapp/app/
На сервере создайте структуру:
mkdir -p /home/kotlinapp/app/logs
3. Настройка systemd для автозапуска
Чтобы приложение запускалось автоматически при старте сервера и перезапускалось при сбоях, создадим systemd-сервис. Создайте файл /etc/systemd/system/kotlinapp.service:
sudo nano /etc/systemd/system/kotlinapp.service
Вставьте следующую конфигурацию:
[Unit]
Description=Kotlin Application Service
After=network.target
[Service]
User=kotlinapp
Group=kotlinapp
WorkingDirectory=/home/kotlinapp/app
ExecStart=/usr/bin/java -jar myapp.jar
Restart=always
RestartSec=10
StandardOutput=append:/home/kotlinapp/app/logs/out.log
StandardError=append:/home/kotlinapp/app/logs/err.log
Environment="PORT=8080"
[Install]
WantedBy=multi-user.target
Включите и запустите сервис:
sudo systemctl daemon-reload
sudo systemctl enable kotlinapp
sudo systemctl start kotlinapp
Проверьте статус:
sudo systemctl status kotlinapp
Логи можно смотреть командой:
journalctl -u kotlinapp -f
4. Настройка Nginx и HTTPS (SSL)
Прокси-сервер Nginx будет перенаправлять запросы с 80/443 порта на 8080 порт вашего Kotlin приложения. Создайте конфигурацию:
sudo nano /etc/nginx/sites-available/kotlinapp
Пример конфигурации:
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
location / {
proxy_pass http://127.0.0.1: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;
}
}
Активируйте сайт и получите SSL-сертификат:
sudo ln -s /etc/nginx/sites-available/kotlinapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
# Получение SSL (Certbot)
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
После успешной проверки Nginx автоматически обновит конфигурацию для HTTPS. Ваше приложение теперь доступно по защищённому протоколу.
Заключение
Мы прошли полный цикл деплоя Kotlin приложения на VPS: от установки Java и сборки JAR до настройки systemd и HTTPS через Nginx. Этот процесс подходит для большинства JVM-приложений на Kotlin, будь то Ktor, Spring Boot или Micronaut. Помните о регулярном обновлении зависимостей и мониторинге логов. Для автоматизации деплоя в будущем рассмотрите использование CI/CD (GitHub Actions, GitLab CI) и контейнеризацию с Docker.
Теперь ваше Kotlin приложение надёжно работает на сервере и готово к приёму пользователей!