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

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

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

Начать курс

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

Разработка Java-приложения — это только половина дела. Вторая, не менее важная часть — его развертывание на сервере. Многие разработчики сталкиваются с трудностями при переносе кода с локальной машины на удаленный VPS. В этой статье мы разберем полный процесс деплоя Java-приложения (на примере Spring Boot) на виртуальный частный сервер (VPS) с операционной системой Ubuntu 22.04. Вы узнаете, как настроить окружение, собрать проект, запустить его как сервис и обеспечить безопасный доступ через Nginx и SSL.

1. Подготовка VPS и установка необходимого ПО

Прежде чем загружать код, необходимо подготовить сервер. Мы будем использовать Ubuntu 22.04 LTS. Подключитесь к серверу по SSH:

ssh root@ваш-ip-адрес

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

apt update && apt upgrade -y
apt install curl git -y

Теперь установим OpenJDK 17 (рекомендуемая версия для большинства современных проектов):

apt install openjdk-17-jdk -y

Проверьте установку:

java -version

Вы должны увидеть что-то вроде:

openjdk version "17.0.9" 2023-10-17

Далее установим Maven для сборки проекта (если вы используете Gradle, замените команды соответствующим образом):

apt install maven -y
mvn -version

На этом подготовка базового окружения завершена.

2. Сборка и загрузка Java-приложения на сервер

Соберем ваше Java-приложение локально. Перейдите в корневую папку проекта и выполните:

mvn clean package -DskipTests

После успешной сборки в папке target появится JAR-файл (например, myapp-0.0.1-SNAPSHOT.jar). Теперь необходимо загрузить его на сервер. Используйте scp (выполняется с вашей локальной машины):

scp target/myapp-0.0.1-SNAPSHOT.jar root@ваш-ip-адрес:/opt/myapp/

На сервере создайте директорию для приложения и переместите файл:

mkdir -p /opt/myapp
mv myapp-0.0.1-SNAPSHOT.jar /opt/myapp/myapp.jar

Проверьте, что JAR-файл на месте и запустите его вручную для теста:

cd /opt/myapp
java -jar myapp.jar

Если приложение запустилось без ошибок — переходим к следующему шагу.

3. Настройка systemd для автоматического запуска

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

Создайте файл сервиса:

nano /etc/systemd/system/myapp.service

Вставьте следующее содержимое (замените youruser на имя пользователя, под которым будет работать приложение, или оставьте root):

[Unit]
Description=My Java Spring Boot Application
After=network.target

[Service]
User=root
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -jar /opt/myapp/myapp.jar
SuccessExitStatus=143
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Объяснение параметров:

  • After=network.target — сервис запускается после поднятия сети.
  • Restart=always — автоматический перезапуск при падении.
  • RestartSec=10 — пауза в 10 секунд перед перезапуском.
  • SuccessExitStatus=143 — корректная обработка сигнала остановки.

Теперь активируем и запустим сервис:

systemctl daemon-reload
systemctl enable myapp
systemctl start myapp

Проверьте статус:

systemctl status myapp

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

4. Настройка Nginx как обратного прокси и SSL-сертификата

Прямой доступ к приложению через порт (например, 8080) небезопасен и неудобен. Используем Nginx для проксирования запросов и Let's Encrypt для бесплатного SSL.

Установите Nginx:

apt install nginx -y

Создайте конфигурационный файл для вашего домена:

nano /etc/nginx/sites-available/myapp

Вставьте базовую конфигурацию (замените your-domain.com на ваш домен):

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

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

ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

Теперь установим SSL-сертификат с помощью Certbot:

apt install certbot python3-certbot-nginx -y
certbot --nginx -d your-domain.com

Следуйте инструкциям на экране. После успешной установки ваш файл конфигурации Nginx автоматически обновится, и вы получите HTTPS-доступ.

Финальная проверка: откройте в браузере https://your-domain.com. Если все настроено правильно, вы увидите ваше Java-приложение с защищенным соединением.

Заключение

Мы прошли полный цикл деплоя Java-приложения на VPS: от установки JDK и сборки проекта до

Блоги

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