Деплой Java приложения на VPS: пошаговое руководство от А до Я
Разработка Java-приложения — это только половина дела. Вторая, не менее важная часть — это его развертывание (деплой) на production-сервере. В этом руководстве мы пройдем полный цикл деплоя Java (Spring Boot) приложения на виртуальный выделенный сервер (VPS) с операционной системой Ubuntu 22.04. Вы узнаете, как настроить сервер, собрать проект, запустить его как системный сервис и обеспечить безопасный доступ через веб-сервер.
1. Подготовка VPS и установка необходимого ПО
Первый шаг — подключение к вашему VPS через SSH и установка Java Runtime Environment (JRE) и Git.
Подключение к серверу
ssh root@ваш-ip-сервера
Обновление пакетов и установка Java (OpenJDK 17)
Для Spring Boot 3.x рекомендуется Java 17. Установим OpenJDK.
apt update && apt upgrade -y
apt install openjdk-17-jdk git -y
java -version
Вы должны увидеть информацию о версии Java 17.
Установка Nginx (для reverse proxy)
apt install nginx -y
systemctl start nginx
systemctl enable nginx
2. Сборка Java-приложения (Maven/Gradle)
На вашей локальной машине (или непосредственно на сервере, если вы клонируете репозиторий) необходимо собрать JAR-файл. Рассмотрим оба варианта.
Вариант A: Локальная сборка и копирование на сервер
Предположим, у вас есть Spring Boot проект с Maven.
# На локальной машине
mvn clean package -DskipTests
# Файл появится в target/my-app-0.0.1-SNAPSHOT.jar
Затем копируем его на сервер через SCP:
scp target/my-app-0.0.1-SNAPSHOT.jar root@ваш-ip:/opt/myapp/
Вариант B: Сборка прямо на сервере
Клонируем репозиторий и собираем проект:
cd /opt
git clone https://github.com/ваш-username/ваш-репозиторий.git myapp
cd myapp
./mvnw clean package -DskipTests
# Или, если Maven установлен глобально:
mvn clean package -DskipTests
3. Настройка продакшн-конфигурации и создание systemd-сервиса
Чтобы приложение автоматически запускалось при старте системы и перезапускалось в случае сбоя, создадим systemd unit-файл.
Создание скрипта запуска
Создайте директорию для приложения (если еще не создали):
mkdir -p /opt/myapp
# Переместите JAR-файл в эту директорию, если он еще не там
Создание systemd сервиса
Создайте файл /etc/systemd/system/myapp.service:
nano /etc/systemd/system/myapp.service
Вставьте следующее содержимое (замените пути и параметры под ваш проект):
[Unit]
Description=My Java Spring Boot Application
After=syslog.target network.target
[Service]
User=root
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms256m -Xmx512m -jar /opt/myapp/my-app-0.0.1-SNAPSHOT.jar --server.port=8080
SuccessExitStatus=143
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Пояснение параметров:
-Xms256m -Xmx512m— начальный и максимальный размер кучи Java.--server.port=8080— порт, на котором будет работать приложение.Restart=always— автоматический перезапуск при падении.
Запуск и проверка сервиса
systemctl daemon-reload
systemctl start myapp
systemctl status myapp
systemctl enable myapp # Автозапуск при загрузке
Проверьте, что приложение отвечает локально:
curl http://localhost:8080/actuator/health
Вы должны получить JSON-ответ со статусом UP.
4. Настройка Reverse Proxy через Nginx
Прямой доступ к приложению через порт 8080 небезопасен. Настроим Nginx как прокси-сервер, который будет принимать запросы на 80 порту (HTTP) и перенаправлять их на наше Java-приложение.
Создание конфигурации Nginx
Удалите дефолтный конфиг и создайте новый:
rm /etc/nginx/sites-enabled/default
nano /etc/nginx/sites-available/myapp
Вставьте следующий код:
server {
listen 80;
server_name ваш-домен-или-IP;
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;
}
}
Активация конфигурации
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
nginx -t # Проверка синтаксиса
systemctl restart nginx
Теперь ваше приложение должно быть доступно по адресу http://ваш-ip без указания порта.
5. Настройка HTTPS (SSL-сертификат) через Let's Encrypt
Обязательный шаг для продакшна — шифрование трафика. Используем Certbot.
apt install certbot python3-certbot-nginx -y
certbot --nginx -d ваш-домен.ru
Следуйте инструкциям на экране. Certbot автоматически обновит конфигурацию Nginx и настроит автоматическое продление сертификата.
6. Мониторинг и управление логами
Для отслеживания работы приложения используйте стандартные инструменты Linux.