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

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

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

Начать курс

Деплой 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 приложение надёжно работает на сервере и готово к приёму пользователей!

Блоги

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