Деплой 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 и сборки проекта до