Основы работы на Heroku с PHP. Heroku предоставляет инструменты для автоматического масштабирования, мониторинга и развертывания приложений. Платформа предоставляет масштабируемую, отказоустойчивую инфраструктуру и автоматизацию процессов для разработчиков. Это означает, что если приложение становится очень популярным и начинает испытывать высокую нагрузку, Героку автоматически добавит больше серверов для обработки запросов. Развертывание кода приложения на Героку выполняется через Git.
Стеки (образы операционных систем) Heroku
Героку постоянно обновляет стопку данных – Stack. Принцип стопки – кто последний пришел, тот первый уйдет. Стек (Stack) является образом операционной системы, который проверяется и поддерживается Heroku. Стеки обычно базируются на дистрибутиве Linux, имеющем открытый исходный код, как у Ubuntu.
В настоящее время версией по умолчанию является стек Heroku-20. У него базовая технология - Ubuntu 20.04. Он доступен с 2020 года и будет жить до . Сейчас, ещё до , поддерживается Heroku-18 на базе Ubuntu 18.04, который действует с 2018 г. С закончилась жизнь у версии стека Heroku-16. Но это не означает, что перестали функционировать и проекты, развернутые на этой версии. Нет. Они работают по-прежнему, просто нет обновлений безопасности.
Приложения Heroku пользуются определенным стеком. Когда программа Heroku создана, исходный код программы вместе с полученными зависимостями и результатами сборки, такими как язык и инфраструктура, собираются в пакет, известный как слак (slug). Пакет сборки отвечает за преобразование исходного кода приложения в исполняемый пакет, совместимый с этим стеком. Этот пакет обычно совместим только со стеком, на котором он был построен, поэтому приложения, которые ранее были развернуты, должны быть перестроены, чтобы быть совместимыми с новым стеком.
Каждый Stack на Героку поддерживает разные пакеты операционных систем и языковые версии среды выполнения. Эта поддержка обычно ограничивается программным обеспечением, которое все еще активно разрабатывается с момента первого выпуска стека.
Откат обновления стека приложения на хостинге Heroku
Рекомендуется всегда использовать самый последний доступный Stack. Если приложение работает не стабильно, или совсем не работает в новом обновленном стеке, можно обновление откатить для отладки и решения проблемы.
Откат удобно выполнить через панель управления Heroku на сайте. Для этого надо перейти на страницу настроек приложения, выбрать вкладку «Activity». На открывшейся странице выбрать версию развертывания (Deployed) и нажать активную ссылку «Roll back to here».
Работа с журналами логов
В журналы приложения Heroku записываются все работающие процессы, системные компоненты и службы. Все записи логов направляются в один канал, обеспечивающий комплексное ведение logs.
Журналы выполнения
Героку объединяет следующие категории журналов для развернутого приложения:
- Logs приложений. Регистрация выходных данных самого приложения, включая журналы, созданные кодом и зависимостями приложения.
- Системные Logs — события и действия, выполненные платформой Heroku от имени активного приложения, например: перезапуск аварийного процесса, переход в спящий режим или пробуждение веб-дино или отображение страницы с ошибкой.
- Logs API — сведения о действиях администраторов, разработчиков, производимыми над проектом, например: развертывание нового кода, масштабирование формирования процесса или переключение режима обслуживания.
- Журналы дополнений — сообщения от дополнительных служб.
Журналы сборки
Logs, полученные при создании и развертывании приложения, отделены от журналов среды выполнения приложения. Записи логов как успешных, так и неудачных сборок доступны на Activity вкладке вашего приложения на панели управления Heroku:
щелкните View build log любое событие сборки в ленте активности, чтобы просмотреть его логи.
Ограничения истории журнала
В течение 1 недели сохраняются последние 1500 строк сводного журнала. Но Героку предоставил, в том числе бесплатные, надстройки для работы с логами. Они увеличивают удобство работы, количество настроек, время хранения логов. В программу можно добавить одну надстройку.
Запись в журнал
Журналы фиксируют все, что ваш ресурс записывает в стандартный вывод (stdout) или стандартную ошибку (stderr). Можете войти из любого места кода вашего приложения с помощью простого оператора вывода.
Просмотр журналов
Героку предоставляет сервис для получения и просмотра логов в двух вариантах:
- получение логов через пользовательский интерфейс на сайте в своей панели управления Героку,
- с помощью простого оператора вывода через командную строку терминала CLI.
heroku logs -a <наименование проекта>
Посмотреть логи можно и в приложении Git Bash, введя ту же команду
heroku logs -a <наименование проекта>
В ответ Героку пришлет приглашение нажать любую клавишу, чтобы открыть браузер для входа в систему, или q для выхода.
После нажатия на любую клавишу откроется вкладка браузера для авторизации с вводом своего адреса электронной почты, пароля. Произойдет вход в Героку и в приложении вывод логов.
Logging in... done
Команда с умолчанием выведет 100 строк логов. Можно изменить команду, указав требуемое количество строк, параметром num (или -n). Максимальное количество – 1500.
heroku logs -n 1500
Журналы в реальный момент времени
По команде
tail -f
отображаются последние записи логов и сеанс потоковой передачи logs продолжается открытым в реальном времени. Просматривая поток логов в реальном времени действующего приложения, можно получить сведения о поведении приложения и отладить проблемы.
$ heroku logs -t
Фильтрация
Если вы хотите получать логи только из определенного источника, определенного дино или обоих, вы можете использовать аргументы фильтрации:
heroku logs --dyno router
heroku logs --source app
При фильтрации по dyno можно использовать либо базовое имя (вроде --dyno web), либо полное имя (вроде --dyno web.1).
Также можно комбинировать переключатели фильтрации с –tail для получения потока отфильтрованных выходных данных в реальном времени.
$ heroku logs --source app --tail
Просмотр журналов с помощью панели управления Heroku
Можно просмотреть свои логи в интернете, войдя в свою панель управления Heroku . Перейдите к нужному приложению, например, https://dashboard.heroku.com/apps/<app-name>. На этой странице выберите «еще», чтобы увидеть раскрывающееся меню:
Работа на Heroku с PHP
Для работы на платформе Героку с использованием языка программирования PHP потребуется установить на локальную машину:
- интерфейс командной строки Heroku (CLI),
- PHP,
- composer,
- git.
Подготовка приложения PHP к развертыванию в Heroku
-
Проверьте свой исходный код в репозитории Git
Исходный код, необходимый для сборки отдельной программы или ее компонента, должен находиться в репозитории Git готовым для развертывания.
-
Добавьте пульт Heroku Git
У каждого приложения Героку есть собственный репо системы Git, размещенный на Героку. Вы развертываете новые версии своего приложения, отправляя изменения кода в это хранилище. Для этого вашему локальному репозиторию Git необходимо знать URL-адрес репозитория, размещенного на Героку.
Героку Git удобен для развертывания и не предназначен для использования в качестве стабильного репозитория git. Используйте GitHub (рекомендуется), или другую систему контроля версий для отслеживания вашей кодовой базы.
Интеграция с GitHub (развертывание на Heroku из GitHub)
Heroku интегрируется с GitHub, чтобы упростить развертывание кода, находящегося на ГитХаб, в приложения, работающие на Героку. Когда интеграция ГитХаб настроена для приложения Heroku, Heroku может автоматически создавать и выпускать (если сборка прошла успешно) push-уведомления в указанный репозиторий GitHub.
Включение интеграции с GitHub
Вы можете настроить интеграцию с ГитХаб на Deploy вкладке приложений в панели управления Героку.
Чтобы настроить интеграцию с GitHub, вам необходимо пройти аутентификацию в ГитХаб. Потребуется это сделать только один раз для каждой учетной записи Героку.
После того, как вы свяжете свое приложение Героку с репозиторием GitHub, вы сможете выборочно развернуть его из веток или настроить автоматическое разворачивание.
Ручное развертывание
При ручном развертывании вы можете создать немедленное развертывание любой ветки из репозитория GitHub, которая подключена к вашему приложению. Используйте ручное разворачивание, если вы хотите контролировать развертывание изменений в Героку.
Можно использовать ручное развертывание для временного развертывания ветки, отличной от той, для которой настроено автоматическое развертывание.