Как развернуть Java-приложение с API в облаке  - Академия Selectel

Как развернуть Java-приложение с API в облаке 

Разбираемся, как развернуть Java-приложение с API на облачном сервере и обеспечить к нему стабильный доступ по публичному IP-адресу.

REST API часто тестируют локально, однако в реальных условиях к нему нужен доступ из интернета — например, для подключения фронтенда или обращения через браузер. В этой инструкции не будем писать бэкенд приложения с нуля — возьмем готовый проект, написанный на Java с использованием Spring. В качестве базы данных используем встроенную H2 (in-memory), чтобы не отвлекаться на развертывание СУБД.

API предоставляет стандартный набор CRUD-операций для работы с пользователями: можно создавать, редактировать, удалять и получать их данные:

Скриншот функций.

Локальный запуск

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

Скриншот браузера.
Проверка через браузер. 

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

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

Создание облачного сервера

1. В панели управления в разделе Продукты переходим во вкладку Облачные серверы и нажимаем Создать сервер.

Скриншот панели управления Selectel. Вкладка «Облачные серверы».
Скриншот панели управления Selectel. Создание нового сервера.

2. Указываем имя, регион и операционную систему. В нашем случае — Ubuntu 24.04 LTS 64-bit. В разделе Конфигурация переходим во вкладку Shared. Для работы сайта подойдет минимальная конфигурация: 

  • 10% от 1 CPU,
  • 512 MБ RAM,
  • 5 ГБ SSD,  
  • публичный IP-адрес.
Скриншот конфигурации сервера.
Конфигурация сервера в панели управления.

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

Скриншот окна «Новый SSH-ключ» в панели управления Selectel.
Окно добавления SSH-ключа.

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

Стоимость конфигурации в панели управления.

Деплой

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

1. Из конфигурации сервера берем команду подключения по SSH и используем ее:

Команда подключения по SSH в панели управления Selectel.

      ssh root@<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
С помощью git clone клонируем проект на сервер.

Приступим к сборке проекта в 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-сервис. 

Публичный IP в панели управления.

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

Скриншот эмулятора.

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

Скриншот журнала логов.

Заключение

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

Автор инструкции — Евгений Афанасьев, Java-разработчик и создатель одноименного YouTube-канала.