Автор оригинала: 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.
Все развертывания, выполненные здесь, развертываются в свободном динамо. Пожалуйста, обратите внимание, что эти бесплатные динамики прекратятся, если мы не будем использовать приложение в течение определенного периода времени. Они снова появятся, когда мы нажмем на приложение. Таким образом, мы можем столкнуться с некоторыми задержками, когда попытаемся связаться с нашим приложением через долгое время.