
Представьте, что у вас есть бэкенд-приложение с REST API и вы хотите обращаться к нему не только с локальной машины, но и из интернета — через браузер, Postman, фронтенд или мобильное приложение. Для этого можно настраивать маршрутизацию, туннелирование, искать белый IP — или просто задеплоить приложение в облако. Под катом — пошаговая инструкция, в которой развернем Java-приложение на облачном сервере и пошагово пройдем весь процесс — от сборки до запуска и обращения к API извне.

Облачный сервер с криперами и порталом в Незер. Добывайте ресурсы, стройте объекты, исследуйте мир Selectel в Minecraft и получайте призы.
Используйте навигацию, если не хотите читать текст целиком:
О проекте
В этой инструкции не будем писать бэкенд приложения с нуля — возьмем готовый проект, написанный на Java с использованием Spring. В качестве базы данных используем встроенную H2 (in-memory), чтобы не отвлекаться на развертывание СУБД.
Весь код проекта доступен на GitHub.
API предоставляет стандартный набор CRUD-операций для работы с пользователями: можно создавать, редактировать, удалять и получать их данные:

Локальный запуск
Приложение запускается на локальной машине с помощью встроенного веб-сервера Apache Tomcat (порт 8080). На localhost мы можем проверить работу с API, убедиться, что приложение запускается и эндпоинты доступны:

Однако такой запуск работает только на локальном компьютере. Обратиться к API «извне» не получится — для этого потребуются, например, дополнительные настройки маршрутизации, «белый» IP-адрес или динамический DNS. К тому же придется постоянно держать компьютер с запущенным приложением включенным, что не очень удобно. Помимо прочего, перебои у интернет-провайдера сделают сервис недоступным. Все эти проблемы можно решить с помощью деплоя приложения в облако.
Создание облачного сервера
1. В панели управления в разделе Продукты переходим во вкладку Облачные серверы и нажимаем Создать сервер.


2. Указываем имя, регион и операционную систему. В нашем случае — Ubuntu 24.04 LTS 64-bit. В разделе Конфигурация переходим во вкладку Shared. Для работы сайта подойдет минимальная конфигурация:
10% от 1 CPU,
512 MБ RAM,
5 ГБ SSD,
публичный IP-адрес.

3. Добавляем SSH-ключ. Указываем имя и копируем команду для терминала, после чего получаем публичный ключ и добавляем его в соответствующее поле. Подробнее о создании и размещении SSH-ключа — в документации.

4. Знакомимся со стоимостью конфигурации и нажимаем Создать сервер.

Деплой
Подключиться к серверу можно напрямую через консоль в панели управления. Однако для примера используем подключение через Git Bash (можете использовать любой другой SSH-клиент).
1. Из конфигурации сервера берем команду подключения по SSH и используем ее:

sshroot@<IP-адрессервера>

2. Обновляем систему:
sudo apt update
sudo apt upgrade
Далее установим все необходимые зависимости.
3. Приложение написано на Java, поэтому устанавливаем JDK и JRE:
sudo apt install openjdk-17-jre
sudo apt install openjdk-17-jdk
4. Для клонирования кода проекта с GitHub, устанавливаем Git:
sudo apt install git
5. Проект будет запускаться не из среды разработки, например IntelliJ IDEA, а как скомпилированный .jar-файл. Для сборки в проекте используем Maven — его тоже нужно установить:
sudo apt install maven
Окружение готово! Помним, что базу данных устанавливать не нужно — в проекте используем in-memory H2, которая запускается вместе с приложением. Этого достаточно для демонстрации. Однако для реального проекта рекомендуем использовать PostgreSQL или другую полноценную СУБД.
В бесплатном курсе рассказываем про установку и настройку базы данных PostgreSQL, делимся, как ими управлять, организовать резервное копирование и репликацию. А главное — что делать, если администрировать самим БД не хочется.
Сборка и запуск проекта
Клонируем наш проект на сервер и сразу перейдем в каталог с проектом:
git clone https://github.com/EVG-A/demo.git
cd demo

Приступим к сборке проекта в jar-архив, чтобы мы могли его запустить. Поскольку сервер использует минимальную конфигурацию, сборку лучше запускать без выполнения тестов. Это поможет облегчить и ускорить процесс:
mvn clean
mvn package -DskipTests=true
После успешной сборки видим, что появилась директория target с собранным .jar
-файлом, в нашем случае — упакованным сервисом demo-1.jar
:

Запускаем сервис с помощью установленной Java:
java -jar demo-1.jar
Теперь в консоли видно, как запускается наше приложение:


Если все прошло успешно, в консоли появится сообщение:
Tomcat started on port 8080(http) with context path ‘/’
Это означает, что приложение развернуто и доступно по внешнему IP-адресу, указанному в конфигурации сервера.
Проверка работы API
Теперь мы можем отправлять запросы к API. IP-адрес можно найти в панели управления (поле Публичный IP). Именно на нем теперь работает наш RESTful-сервис.

Попробуем отправить запросы через браузер компьютера или телефон. Переходим по адресу http://<IP-адрес>:8080
:

Если все настроено верно, API ответит на запрос. Все логи приложения (включая ошибки) будут отображаться прямо в консоли, где развернут сервис.

Заключение
Мы развернули RESTful-сервис с CRUD-операциями — созданием, обновлением, удалением и получением сущностей. Приложение размещено на облачном сервере и доступно по публичному IP-адресу.
Дальнейшее развитие функций ограничивается лишь вашей фантазией и потребностями! Код проекта доступен на GitHub, а для более детально ознакомиться со всеми можно в видеоверсии инструкции.
Автор инструкции — Евгений Афанасьев, Java-разработчик и создатель одноименного YouTube-канала.