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

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

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

Начать курс

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

Вы написали крутое приложение на Kotlin (Ktor, Spring Boot или просто консольный сервис), и теперь его нужно запустить на реальном сервере. В этой статье мы разберем полный цикл деплоя Kotlin-приложения на VPS: от покупки сервера и настройки SSH до запуска через systemd и подключения домена с HTTPS. Все примеры — рабочие, проверенные на Ubuntu 22.04.

1. Подготовка VPS и подключение

Первым делом арендуйте VPS (например, у Timeweb, Selectel или DigitalOcean). Минимальные требования: 1 vCPU, 1 GB RAM, 20 GB SSD. Операционная система — Ubuntu 22.04 LTS.

После получения IP-адреса и root-пароля подключаемся по SSH:

ssh root@your_server_ip

Сразу обновляем систему и создаём непривилегированного пользователя (работать под root — плохая практика):

apt update && apt upgrade -y
adduser kotlinuser
usermod -aG sudo kotlinuser
su - kotlinuser

Настройте SSH-ключи для удобного и безопасного входа:

ssh-keygen -t ed25519 -C "your_email@example.com"
ssh-copy-id kotlinuser@your_server_ip

Теперь отключите парольный вход в /etc/ssh/sshd_config (строка PasswordAuthentication no) и перезапустите SSH: sudo systemctl restart sshd.

2. Установка Java (JRE/JDK) и сборка приложения

Kotlin-приложения работают на JVM. Установите OpenJDK 17 или 21 (рекомендуется для современных проектов):

sudo apt install openjdk-17-jdk -y
java -version

Теперь на вашем локальном компьютере (где ведётся разработка) соберите приложение в JAR-файл. Для Gradle (Ktor или Spring Boot):

./gradlew clean build

Готовый JAR-файл будет лежать в build/libs/. Например, myapp-1.0.0.jar. Загрузите его на сервер:

scp build/libs/myapp-1.0.0.jar kotlinuser@your_server_ip:~/app/

Создайте на сервере структуру папок:

mkdir -p ~/app/logs ~/app/config

Поместите конфигурационные файлы (application.conf, application.yml) в ~/app/config/. Проверьте, что приложение стартует вручную:

cd ~/app
java -jar myapp-1.0.0.jar --spring.config.location=file:./config/

Если всё работает — переходим к автоматическому запуску.

3. Настройка systemd для автозапуска

Чтобы приложение автоматически стартовало после перезагрузки сервера и не падало при ошибках, создадим systemd-сервис.

Создайте файл /etc/systemd/system/kotlin-app.service:

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

Вставьте следующее содержимое (замените пути на свои):

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

[Service]
Type=simple
User=kotlinuser
WorkingDirectory=/home/kotlinuser/app
ExecStart=/usr/bin/java -jar /home/kotlinuser/app/myapp-1.0.0.jar --spring.config.location=file:/home/kotlinuser/app/config/
Restart=on-failure
RestartSec=10
StandardOutput=append:/home/kotlinuser/app/logs/app.log
StandardError=append:/home/kotlinuser/app/logs/error.log

[Install]
WantedBy=multi-user.target

Объяснение ключевых параметров:

  • User — от кого запускать (не root);
  • ExecStart — полная команда запуска с указанием конфига;
  • Restart=on-failure — автоматический перезапуск при падении;
  • StandardOutput/Error — логирование в файлы.

Активируем сервис:

sudo systemctl daemon-reload
sudo systemctl enable kotlin-app.service
sudo systemctl start kotlin-app.service

Проверяем статус:

sudo systemctl status kotlin-app.service

Если всё зелёное — ваше Kotlin-приложение работает как демон.

4. Настройка Nginx и SSL (HTTPS)

По умолчанию приложение слушает порт 8080 (или 8443). Чтобы открыть его по домену с HTTPS, установите Nginx и Certbot.

Установка Nginx:

sudo apt install nginx -y

Создайте конфигурацию для вашего домена (например, api.example.com):

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

Вставьте:

server {
    listen 80;
    server_name api.example.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;
    }
}

Активируйте сайт и проверьте:

sudo ln -s /etc/nginx/sites-available/kotlin-app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Теперь установите SSL-сертификат через Certbot (Let's Encrypt):

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d api.example.com

Certbot автоматически подправит конфигурацию Nginx и настроит автообновление сертификатов. После этого ваш домен будет доступен по HTTPS.

5. Мониторинг и обновление приложения

Для проверки логов в реальном времени используйте:

sudo journalctl -u kotlin-app.service -f
tail -f ~/app/logs/app.log

Когда выходит новая версия приложения, процесс обновления выглядит

Блоги

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