Облака – популярная штука, ворвавшаяся и в сферу
хостинга. Скажем НЕТ DevOps-ам! Будем сами себе DevOps-ами и поработаем с Heroku
на языке Java.
Heroku – очень крутая штука! Тебе не нужно заморачиваться с настройкой железа, балансирования, маршрутизации и прочими радостями воздвижения нового сервиса, т. к. все за тебя сделали (и будут делать) разработчики. Тебе дается уже готовый сервак – бери и ваяй свое приложение.
Чтобы создать локальную копию приложения, которую
можно развернуть в Heroku, выполни следующие команды в терминале:
Теперь у тебя есть рабочий репозиторий. Приложение включает в себя файл pom.xml,
используемый менеджером Maven.
Развертывание приложения
На этом шаге ты развернешь приложение в Heroku.
Первым делом подготовим Heroku к получению исходного кода:
На этом шаге создается удаленный репозиторий (с именем heroku) и связывается с локальным.
По дефолту Heroku генерирует случайное имя для приложения, но можно
указать и свое.
Теперь давай развернем код:
Готово. Убедись, что хотя бы один экземпляр приложения запущен:
Теперь перейди в приложение по ссылке, созданной из его имени, или
поступи следующим образом:
Логи
Heroku собирает события со всех выходных потоков
приложения и компонентов платформы в единый журнал, упорядоченный по времени.
Чтобы посмотреть логи запущенного приложения, воспользуйся командой heroku logs --tail:
Объявление Procfile
Heroku использует специальный текстовый файл Procfile (мини-конфиг) для
явного указания директив запуска приложения.
Procfile в развернутом приложении выглядит примерно
так:
Здесь объявляется тип процесса web и команда, необходимая
для его запуска. Web указывает на то, что этот тип процесса будет
прикреплен к стеку маршрутизации Heroku для получения трафика.
Масштабирование приложения
Сейчас приложение работает на одном dyno-процессе. Dyno – это
легковесный контейнер Linux, запускаемый по команде из Procfile.
Проверить, сколько dyno сейчас запущено, можно
так:
По умолчанию приложение деплоится в свободном dyno. Свободными они
становятся (засыпают) после тридцати минут бездействия (т. е. если они не
получают никакого трафика). Это поведение вызывает задержку в несколько секунд
при первом запросе “пробуждения”. Последующие запросы будут выполняться
нормально.
Чтобы избежать спящего режима dyno, можно обновить тип dyno на хобби или
профи. Например, если ты мигрируешь свое приложение на профи уровень, можно
легко масштабировать его, попросив Heroku подготовить определенное количество dyno.
Масштабирование приложения в Heroku эквивалентно изменению количества запущенных
dyno.
Установить ненулевое количество веб dyno можно так:
Объявление зависимостей
Heroku автоматически определяет Java-приложение, если оно содержит файлик
pom.xml в корневом каталоге. Ты
можешь создать pom.xml для других приложений с помощью команды mvn archetype: create.
В развернутой демке приложения уже имеется pom.xml с такой начинкой:
В этом файлике указаны зависимости, требуемые для работы приложения. При
развертывании Heroku прочитает файл и все установит, запустив mvn clean install.
В папке есть еще один файл, system.properties,
указывающий на версию Java. Содержимое этого необязательного файла ниже:
Запусти mvn
clean install в локальном каталоге, чтобы установить зависимости и
подготовить систему к локальному запуску приложения. Обрати внимание, что
приложению требуется Java 8, но ты можешь запушить другие приложения с
поддержкой другой версии Java.
Если Maven не
установлен
или
появляется
ошибка, например, mvn is not recognized as an internal or external command, используй команду-обертку: запустив mvnw clean install на
Windows или ./ mvnw clean install на
Mac и Linux. Это одновременно
устанавливает и запускает Maven.
Процесс Maven скомпилит и создаст JAR с зависимостями, помещая его в корневой каталог приложения. Этим
процессом рулит spring-boot-maven-plugin из pom.xml.
Если ты не юзаешь Spring в pom.xml, можно указать иной плагин:
Локальный запуск приложения
Запусти приложение с помощью команды heroku:
Открой в браузере http://localhost:5000 – ты должен увидеть свое
приложение.
Для остановки приложения вернись в окно терминала и нажми CTRL+C.
Внесение локальных изменений
На этом шаге ты узнаешь, как внести локальные изменения и развернуть их
в Heroku. В качестве примера мы добавим зависимость и некоторый код.
Измени pom.xml, добавив зависимости для jscience в блок dependencies:
В 28 строке добавь:
Теперь добавь следующие
объекты
в 19 строку файла src/main/java/com/example/Main.java:
Добавь метод hello в 59 строку src/main/java/com/example/Main.java:
Создай src/main/resources/templates/hello.html с таким содержимым:
Проверь изменения:
По адресу http://localhost:5000/hello ты должен увидеть следующее:
Можно деплоить:
Использование БД
Heroku предоставляет поддержку Postgres, Redis, MongoDB и MySQL.
На этом шаге ты узнаешь о дополнении Heroku Postgres, поставляемом
при развертывании всех приложений Java.
Heroku Postgres сама по себе является надстройкой,
поэтому для обзора БД можно использовать команду heroku addons:
Чтобы узнать DATABASE_URL, используется команда:
Команда heroku pg предоставляет более подробную информацию о БД:
Дальнейшие действия
Вот инфа для изучения, чтобы продолжить свое путешествие с Heroku:
как работает Heroku – дополнительные
материалы по настройке, развертыванию и запуску;
категория Java предоставляет более подробную информацию о развертывании Java- приложений;
категория развертывание предоставляет множество фич для упрощения развертывания.