Рубрики
Без рубрики

Развертывание приложений Spring Boot в Heroku

Heroku-это широко распространенное решение для быстрого и бесплатного онлайн-хостинга. Мы рассмотрим несколько способов запуска и запуска вашего собственного приложения Spring Boot в Интернете.

Автор оригинала: Dhrubajyoti Bhattacharjee.

Вступление

При разработке веб-приложения естественным шагом является вывод его в Интернет и предоставление его конечным пользователям. Чтобы сделать эту задачу возможной и более простой, существует множество облачных платформ, доступных на выбор для размещения вашего приложения – Heroku является одной из них.

Heroku предоставляет платформу в качестве сервиса для развертывания приложений различных технологических стеков, таких как Node, Java, Python и т.д. Он заботится обо всех сложных аспектах развертывания, инфраструктуры, масштабирования, обновления, безопасности и т.д. И позволяет нам сосредоточиться на логике приложения и обеспечить большую ценность для наших конечных пользователей, а не на развертывании.

В этой статье мы создадим действительно простое приложение Spring Boot REST API, которое предоставит конечную точку, и рассмотрим различные способы развертывания приложения в Heroku.

Создание приложения для загрузки Spring

Инициализация приложения Spring Boot

Как всегда, самый простой способ начать со скелетного проекта загрузки Spring-это использовать инициализатор Spring :

Выберите нужный вам инструмент сборки, мы будем использовать Maven. Единственная зависимость, которая нам понадобится, – это зависимость Spring Web .

В качестве альтернативы мы можем создать приложение с помощью интерфейса командной строки Spring Boot :

$ spring init --dependencies=web heroku-demo

Создайте конечную точку ОТДЫХА

Когда наш скелет будет готов, давайте добавим простую конечную точку ОТДЫХА:

@RestController
@RequestMapping("/api/v1.0")
public class TimeController {

    @GetMapping("/time")
    @ResponseStatus(HttpStatus.OK)
    public String getCurrentTime() {

        return Instant.now().toString();
    }
}

В случае, если вы еще не знакомы с аннотацией @RestController , это удобная аннотация, выполненная в виде комбинации аннотаций @Controller и @ResponseBody .

Эта конечная точка просто вернет текущее серверное время по запросу. Давайте запустим приложение на вашем локальном компьютере и проверим, работает ли оно:

$ mvn spring-boot:run

Или, используя свою среду разработки, просто запустите приложение и перейдите к URL-адресу вашего браузера localhost:8080/api/v1.0/время URL-адрес:

В качестве альтернативы вы можете использовать такой инструмент, как curl , чтобы попасть в конечную точку:

$ curl -X GET 'http://localhost:8080/api/v1.0/time'
2020-01-04T13:19:30.980Z

Развертывание на Героку

Теперь, когда наше приложение готово и готово, давайте рассмотрим различные способы его развертывания в Heroku.

Использование интерфейса командной строки Heroku с Git

Heroku предлагает свой собственный интерфейс командной строки, который мы можем использовать для развертывания приложения. Для этого нам нужно установить Heroku CLI и Git .

Прежде чем мы попытаемся развернуть его, Heroku необходимо, чтобы приложение находилось в репозитории Git, поэтому давайте создадим репозиторий в каталоге нашего проекта:

$ git init

Как только репозиторий будет создан, давайте добавим и зафиксируем файлы:

$ git add src/ pom.xml
$ git commit -m "first commit with project base"

Следующий шаг-войти в Heroku с помощью интерфейса командной строки Heroku и создать приложение Heroku:

$ heroku login

Он запросит адрес электронной почты и пароль для вашей учетной записи Heroku:

Enter your Heroku credentials:
Email: ***********@gmail.com
Password: ***********
Logged in as **********@gmail.com

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

$ heroku create

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

Creating app... done, ⬢ arcane-journey-46830
https://arcane-journey-46830.herokuapp.com/ | https://git.heroku.com/arcane-journey-46830.git

Команда create | добавит удаленный Git с именем heroku в наш локальный репозиторий Git, а также добавит к нему случайное имя - в нашем случае это arcane-journey-46830 .

Наконец, мы можем развернуть наш код:

$ git push heroku master

Heroku определит, что это приложение Java/Maven, по наличию pom.xml файл в репозитории. После нажатия, если вы посмотрите на журналы, вы сможете заметить:

Enumerating objects: 26, done.
Counting objects: 100% (26/26), done.
Delta compression using up to 4 threads
Compressing objects: 100% (21/21), done.
Writing objects: 100% (26/26), 2.96 KiB | 504.00 KiB/s, done.
Total 26 (delta 5), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Java app detected
remote: -----> Installing JDK 1.8... done
remote: -----> Installing Maven 3.6.2... done
remote: -----> Executing Maven
...

И, наконец, развертывание завершено, и нам будет предложено ввести URL-адрес, ведущий к нашему приложению:

...
remote: -----> Compressing...
remote:        Done: 65.7M
remote: -----> Launching...
remote:        Released v3
remote:        **https://arcane-journey-46830.herokuapp.com/** deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/arcane-journey-46830.git
 * [new branch]      master -> master

Давайте еще раз протестируем приложение с помощью curl :

$ curl -X GET 'https://arcane-journey-46830.herokuapp.com/api/v1.0/time'
2020-01-04T13:51:31.559Z

Или перейдя в вашем браузере по его URL-адресу:

Плагин для развертывания Heroku

Если мы хотим развернуть наше приложение напрямую, не используя репозиторий Git, мы можем сделать это с помощью плагина heroku-cli-deploy . Давайте начнем с его установки:

$ heroku plugins:install heroku-cli-deploy

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Как и в предыдущем разделе, мы просим Heroku создать приложение, но на этот раз мы включаем аргумент --no-remote , чтобы избежать запроса репозитория Git:

$ heroku creare heroku-demo-stackabuse --no-remote

Обратите внимание, что на этот раз мы упомянули имя приложения – злоупотребление демонстрационным стеком heroku . Это позволит создать приложение с заданным именем, а не генерировать случайное имя, как в предыдущем разделе.

Нам также необходимо упомянуть порт, на котором Heroku свяжет приложение в файле application.properties :

server.port=${PORT:8080}

Примечание: Это необходимо, так как Heroku привязывает приложение к порту, переданному в качестве переменной среды PORT , а Spring Boot по умолчанию предоставляет 8080 портвейн. Здесь мы просим Spring использовать ПОРТ и вернуться к 8080 в случае, если переменная среды отсутствует, т. е. мы работаем локально.

Наконец, мы создаем наше приложение с помощью Maven, чтобы создать файл jar и развернуть его:

$ mvn clean package
$ heroku deploy:jar target/heroku-demo.0.0.1-SNAPSHOT.jar --app heroku-demo-stackabuse

Плагин Maven

Могут быть сценарии, в которых мы хотели бы выполнить развертывание как часть нашей сборки Maven. Это возможно с помощью плагина Heroku Maven . Давайте поместим конфигурацию плагина в ваш pom.xml :

...

        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
                com.heroku.sdk
                heroku-maven-plugin
                {version}
                
                    heroku-demo-stackabuse
                    false
                    
                        ${project.build.directory}/${project.build.finalName}.jar
                    
                    1.8
                    
                        java $JAVA_OPTS -jar
                            ${project.build.directory}/${project.build.finalName}.jar
                    
                
            
        
    
...

Всегда проверяйте последнюю версию плагина здесь .

В качестве заключительного шага нам нужно установить переменную среды – HEROKU_API_KEY . Этот шаг требуется только в том случае, если вы не вошли в систему Heroku CLI для авторизации. Ключ API можно найти в вашей панели управления Heroku учетная запись :

И теперь мы можем использовать heroku:deploy цель для развертывания приложения:

$ mvn clean heroku:deploy

Панель управления Heroku с GitHub

С учетом программных подходов/CLI, также существует действительно удобный графический интерфейс. Мы можем создать приложение на панели управления Heroku , связать его с учетной записью GitHub и развернуть оттуда.

Перейдите к опции “новое приложение” .:

Затем подключите свою учетную запись GitHub и найдите свой репозиторий для подключения:

После подключения вы можете развернуть приложение, выбрав ветвь для развертывания или напрямую выбрав главную ветвь. Кроме того, вы можете включить автоматическое развертывание на основе фиксаций в определенной ветви:

Проверка журналов развернутых приложений

Проверка журналов развернутого приложения может быть полезна для многих целей. К счастью, к ним действительно легко получить доступ.

Используя интерфейс командной строки, это всего лишь одна команда:

$ heroku logs --tail

Это позволило бы видеть запущенные журналы:

Кроме того, панель управления Heroku позволяет нам получить к ним доступ с правой стороны Подробнее > Просмотр журналов :

Файл Heroku Procfile

Профиль может использоваться для настройки или переопределения параметров и команд приложения по умолчанию. Например, при развертывании приложения с помощью плагина Heroku deploy мы добавили информацию о портах в application.properties .

Это также можно добавить в Профиль . Мы бы добавили команды для запуска приложения, такие как:

web: java $JAVA_OPTS -jar target/heroku-demo-0.0.1-SNAPSHOT.jar -Dserver.port=$PORT

Здесь мы добавили команду для запуска приложения с Java и добавили аргумент JVM, чтобы переопределить привязку порта Spring Boot по умолчанию.

Удаление приложения из Heroku

В какой-то момент вы можете захотеть удалить свое приложение из Heroku по какой-либо причине. Это делается с помощью простой команды:

$ heroku apps:destroy --confirm arcane-journey-46830

Мы можем запустить команду без флага --confirm , но в этом случае она предложит ввести имя приложения.

В качестве альтернативы мы можем удалить приложение из настроек панели управления Heroku:

Вывод

С ростом популярности облачных вычислений важно знать, как мы могли бы развернуть наше приложение и управлять им на облачной платформе.

Heroku – это платформа как сервис для развертывания, управления и масштабирования приложений. Он также предоставляет бесплатные развертывания с бесплатными динамиками. Это бесплатное развертывание может быть использовано для любых демонстрационных или ознакомительных целей, но определенно не подходит для рабочих приложений в реальном времени.

В этой статье мы рассмотрели несколько способов развертывания приложений Spring Boot в Heroku – с помощью интерфейса командной строки Heroku, плагина Heroku deploy, плагина Maven и, наконец, подхода с использованием графического интерфейса через репозиторий GitHub.

Все развертывания, выполненные здесь, развертываются в свободном динамо. Пожалуйста, обратите внимание, что эти бесплатные динамики прекратятся, если мы не будем использовать приложение в течение определенного периода времени. Они снова появятся, когда мы нажмем на приложение. Таким образом, мы можем столкнуться с некоторыми задержками, когда попытаемся связаться с нашим приложением через долгое время.