An App Platform for Startups | Heroku

An App Platform for Startups | Heroku Хостинг

Heroku — что это за облачная платформа, хостинг

Heroku — облачная мультиязычная платформа как услуга (PaaS), основанная на управляемой контейнерной системе, с интегрированными службами передачи данных и развитой экосистемой для развертывания и запуска приложений.

Обычно приложения работают на выделенном сервере, а для сайтов используют хостинги. Но возможности хостингов ограничены. А выделенные серверы, такие как VPS, нужно настраивать: самостоятельно определять архитектуру, собирать приложение, заботиться о безопасности. Тратить на это ресурсы не всегда возможно.

В таких случаях используется Heroku. Платформа позволяет загружать любое приложение и не заниматься настройкой серверной части.

Heroku — Platform as a Service. Это означает, что платформа работает как сервис: предоставляет пользователю определенные функции и возможности, доступ к системам и ПО. При этом ее инфраструктура полностью скрыта.

За пользователя все делают сотрудники сервиса — эта работа остается «под капотом», а многие процессы автоматизированы. За безопасность, архитектуру и настройку сервера отвечают специалисты платформы.

Поэтому Heroku нужна:

Есть нюанс. На цену влияет количество ресурсов, которые использует клиент. Поэтому Heroku не всегда подходит для хайлоад-проектов: обеспечивать работу сервера может быть дешевле, чем использовать платформу. 

Начните свой путь в IT 

Освойте разработку, аналитику данных, Data Science или другие востребованные профессии — получите все курсы для входа в IT по цене одного.

Узнать подробности

Диносы. Работающие в Heroku приложения выполняются изолированно от других — они заключены в специальные контейнеры, которые называются диносами или дино (dyno, dynos). Диносы позволяют создать легковесную независимую среду и развернуть в ней приложение так, чтобы настройки его среды не конфликтовали с другими. Одно приложение может использоваться несколькими диносами, и проект легко масштабируется под задачи разработчика.

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

  1. Зарегистрироваться на официальном сайте Heroku и выбрать тариф. Для начинающих подойдет стартовый Free: дорогостоящие тарифы нужны для высоконагруженных приложений и коммерческого использования.
  2. Скачать официальную консольную утилиту The Heroku Command Line Interface (CLI, также известна как Herokuapp) на сайте сервиса. Для ее работы необходим установленный Git.
  3. Открыть приложение в командной строке, написать команду heroku login -i, а затем ввести данные от своего аккаунта. Запуск команды без -i откроет браузер. Войти в аккаунт можно и через него.
  4. Перейти в папку, где хранится приложение, и ввести команду heroku create. Heroku автоматически обработает приложение.

Мультиязычность. Heroku поддерживает Ruby, Python, PHP, Node.js, Java, Go, Scala и Clojure. Изначально платформа создавалась для работы с Ruby on Rails, поэтому в старой документации часто встречается упоминание этой связки. Сама платформа Heroku работает на Debian и Ubuntu, дистрибутивах Linux.

Быстрое развертывание и легкое масштабирование. Для добавления, развертывания и запуска приложения достаточно ввести несколько команд в консоли. Длительная подготовка и предварительная настройка не требуются. Работать с сервисом может начинающий специалист. Также использование Heroku экономит время разработчика при запуске и масштабировании нового проекта. Увеличить количество диносов можно с помощью одной команды в консоли.

Дополнительные возможности. Среди проектов Heroku — собственная СУБД SQL database as a service, программное обеспечение для связи команды разработчиков между собой, сервисы автоматизации для программ на разных языках и многое другое. Платформа работает и с noSQL-решениями. Инструментами можно пользоваться вместе с основным облачным сервисом.

Интеграция с сервисами. Heroku «из коробки» поддерживает Docker и Git. Они доступны даже в базовых тарифах. Если программисту не хватает встроенных возможностей и собственных проектов Heroku, он может воспользоваться надстройками — дополнительными модулями, которые открывают доступ к стороннему ПО.

Бесплатный доступ для небольших проектов. В Heroku есть начальный тариф Free. Он бесплатно дает пользователю 550–1000 часов работы диносов в месяц. В тарифе доступны два типа процессов и возможность добавлять пользовательские домены. Через 30 минут без активности сервис «засыпает»: этого можно избежать при выборе другого базового тарифа.

Подробная документация. На сайте Heroku Dev Center доступны пошаговые руководства и туториалы. В них подробно описаны особенности работы с Heroku для приложений на всех поддерживаемых языках. Официальная документация доступна на английском и японском. 

Найдите свой путь в IT 

Освойте разработку, аналитику данных, Data Science или другие востребованные профессии — получите все курсы для входа в IT по цене одного.

Узнать больше

An app platform for startups | heroku

Heroku is a cloud-based, platform-as-a-service (PaaS) that gives startup developers a powerful solution for building, deploying, and operating applications. The platform is fully managed, meaning that we take care of servers, hardware, and infrastructure, so you can keep your team lean and focused on building a great product. As business grows, Heroku is there for you over the long-term, with seamless scalability and advanced features to support your app success.

Heroku enterprise | heroku

Ведение журнала в stdout

Heroku ожидает, что приложения будут совершать ввод/вывод непосредственно в stdout. Все, что приложение печатает в стандартном выводе сохраняется и возвращается при использовании команды heroku logs. Поэтому я собираюсь добавить переменную конфигурации, которая указывает, нужно ли мне вести записи в stdout или в файл, как я это делал ранее. Вот изменение в конфигурации:

config.py: Опция ведения журнала в stdout.

class Config(object):
    # ...
    LOG_TO_STDOUT = os.environ.get('LOG_TO_STDOUT')

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

app/__init__.py: Журнал в stdout или в файл.

Настройка git

Инструмент git является основой для развертывания приложений в Heroku, поэтому вы должны установить его в своей системе, если у вас его еще нет. Если у вас нет пакета, доступного для вашей операционной системы, вы можете посетить сайт git для загрузки установщика.

Есть множество причин использовать git для ваших проектов. Если вы планируете развертывание в Heroku, то у вас появилась еще одна, потому что для развертывания в Heroku ваше приложение должно быть в репозитории git. Если вы собираетесь выполнить тестовое развертывание для Микроблога, вы можете клонировать приложение из GitHub:

Обновление requirements

Heroku ожидает, что зависимости будут в файле requirements.txt, точно так же, как я определил в главе 15. Но для запуска приложения на Heroku мне нужно добавить две новые зависимости к этому файлу.

Heroku не предоставляет собственный веб-сервер. Вместо этого он ожидает, что приложение запустит свой собственный веб-сервер по номеру порта, указанному в переменной среды $PORT. Поскольку Веб-сервер разработки flask недостаточно надежен для использования в работе, я собираюсь снова использовать gunicorn, сервер, рекомендованный Heroku для приложений Python.

Приложение также будет подключаться к базе данных Postgres, и для этого SQLAlchemy требует установки пакета psycopg2.

И gunicorn и psycopg2 нужно быть добавленным в файл requirements.txt.

Профайл

Heroku должен знать, как выполнить приложение, и для этого он использует файл с именем Procfile в корневом каталоге приложения. Формат этого файла прост, каждая строка содержит имя процесса, двоеточие, а затем команду, которая запускает процесс.

Procfile: Heroku Procfile.

web: flask db upgrade; flask translate compile; gunicorn microblog:app

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

Поскольку первые две подкоманды основаны на команде flask, мне нужно добавить переменную среды FLASK_APP:

$ heroku config:set FLASK_APP=microblog.py
Setting FLASK_APP and restarting flask-microblog... done, v4
FLASK_APP: microblog.py

Команда gunicorn проще, чем то, что я использовал для развертывания Ubuntu, потому что этот сервер имеет очень хорошую интеграцию со средой Heroku. Например, переменная среды $PORT учитывается по умолчанию, и вместо того, чтобы использовать параметр -w для задания числа процессов, heroku рекомендует добавить переменную WEB_CONCURRENCY, которую gunicorn использует, когда -w не предоставляется, что дает вам гибкость для управления числом процессов без необходимости изменять Procfile.

Работа с базой данных heroku postgres

Чтобы решить первую проблему, я перейду на другой механизм базы данных. В главе 17 вы видели, как я использую базу данных MySQL, чтобы повысить надежность развертывания Ubuntu. У Heroku есть собственное предложение базы данных, основанное на Postgres, поэтому я собираюсь переключиться на него, чтобы избежать проблемы хранения SQLite на основе файлов.

Базы данных для приложений Heroku снабжаются одним и тем же CLI Heroku. В этом случае я собираюсь создать базу данных на бесплатном(free) уровне:

$ heroku addons:add heroku-postgresql:hobby-dev
Creating heroku-postgresql:hobby-dev on flask-microblog... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-parallel-56076 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation

URL-адрес вновь созданной базы данных хранится в переменной среды DATABASE_URL, которая будет доступна при запуске приложения. Это очень удобно, так как приложение уже ищет URL базы данных в этой переменной.

Развертывание обновлений приложений

Чтобы развернуть новую версию приложения, вам просто нужно выполнить команду git push с новым кодом. Это повторит процесс развертывания, отключит старое развертывание и заменит его новым кодом. Команды в Procfile будут запускаться снова как часть нового развертывания, поэтому любые новые миграции или переводы базы данных будут обновляться во время процесса.

An App Platform for Startups | HerokuТудаСюда An App Platform for Startups | Heroku

Развертывание приложения

Все подготовительные шаги завершены, поэтому пришло время запуска развертывания. Для загрузки приложения на серверы Heroku для развертывания используется команда git push. Это похоже на отправку изменений в локальном репозитории git на GitHub или другой удаленный сервер git.

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

Существует несколько вариантов того, как это сделать, в зависимости от того, как вы создали свой репозиторий git. Если вы используете мой код v0.18, то вам нужно создать ветвь на основе этого тега, и отправить её к удаленной ветви master, следующим образом:

$ git checkout -b deploy
$ git push heroku deploy:master

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

$ git commit -a -m "heroku deployment changes"

После чего можно запустить развертывание следующим образом:

$ git push heroku master

Независимо от того, как вы отправляете ветку, вы должны увидеть следующий вывод из Heroku:

Скомпилированные переводы

Третьим аспектом микроблога, основанного на локальных файлах, является скомпилированный языковой перевод файлов. Самый простой вариант, чтобы гарантировать, что эти файлы никогда не исчезнут из эфемерной файловой системы, — это добавить скомпилированные языковые файлы в репозиторий Git, чтобы они стали частью начального состояния приложения после его развертывания в Heroku.

Более элегантный вариант, на мой взгляд, заключается в том, чтобы включить команду flask translate compile в команду start up, предоставленную Heroku, так что каждый раз, когда сервер перезапустится эти файлы скомпилируются снова. Я собираюсь пойти этим путём, так как я знаю, что моя процедура запуска будет требовать более одной команды в любом случае, так как мне ещё нужно запустить миграцию базы данных. Поэтому сейчас я отложу эту проблему в сторону и вернусь к ней позже, когда напишу Procfile.

Создание приложения heroku

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

Установка heroku cli

Heroku предоставляет командную строку для взаимодействия с службой под названием Heroku CLI, доступной для Windows, Mac OS X и Linux. Документация содержит инструкции по установке для всех поддерживаемых платформ. Установите его в своей системе, если вы планируете развертывать приложение для тестирования службы.

Первое, что вы должны сделать после установки CLI, это войти в ваш Heroku аккаунт:

$ heroku login

Heroku CLI попросит вас ввести свой адрес электронной почты и пароль учетной записи. Ваш аутентифицированный статус будет сохранен в последующих командах.

Хостинг elasticsearch

Elasticsearch является одним из многих сервисов, которые могут быть добавлены к проекту Heroku, но в отличие от Postgres, это не услуга, предоставляемая Heroku, а третья сторона, которая сотрудничают с Heroku, чтобы обеспечить дополнения. На сегодняшний день(когда я пишу эти строки) есть три разных провайдеров комплексной службы elasticsearch.

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

Из вариантов Elasticsearch, которые доступны в качестве дополнений, я решил попробовать SearchBox, который поставляется с бесплатным стартовым планом. Чтобы добавить SearchBox в свою учетную запись, вы должны выполнить следующую команду во время входа в Heroku:

$ heroku addons:create searchbox:starter

Эта команда развернет службу Elasticsearch и разместит URL-адрес подключения для службы в переменной среды SEARCHBOX_URL, связанной с приложением. Еще раз напомню, что эта команда не будет выполнена, если Вы не добавите свою кредитную карту в свой аккаунт Heroku.

Если вы вспомните из главы 16, мое приложение ищет URL-адрес подключения Elasticsearch в переменной ELASTICSEARCH_URL, поэтому мне нужно добавить эту переменную и установить ее в URL-адрес подключения, назначенный SearchBox:

$ heroku config:get SEARCHBOX_URL
<your-elasticsearch-url>
$ heroku config:set ELASTICSEARCH_URL=<your-elasticsearch-url>

Здесь я сначала попросил Heroku напечатать значение SEARCHBOX_URL, а затем я добавил новую переменную среды с именем ELASTICSEARCH_URL, установленным в то же значение.

Хостинг на heroku

Heroku, одна из первых облачных платформ, которая появилась в июне 2007 года и изначально поддерживала только язык программирования Ruby, но на данный момент список поддерживаемых языков также включает в себя Java, Node.js, Scala, Clojure, Go, PHP и конечно Python.

Развертывание веб-приложения в Heroku выполняется с помощью средства управления версиями git, поэтому приложение должно находиться в репозитории git. Heroku ищет файл под названием Procfile в корневом каталоге приложения для получения инструкций о том, как запустить приложение.

Для проектов Python, Heroku потребуется файл requirements.txtфайл со списком всех зависимостей модулей, которые необходимо установить. После того, как приложение будет загружено на серверы Heroku через git, вы, по сути всё сделали, и нужно просто подождать несколько секунд, пока приложение появится в сети. Это действительно так просто.

Heroku предлагает вам выбрать уровень обслуживания исходя из необходимой вычислительной мощности и времени требуемой вашему приложению, так как ваша база пользователей растет вам нужно будет купить больше единиц вычислительных, которые Heroku называет «dynos».

Готовы попробовать Heroku? Давайте начнем!

Эфемерная файловая система

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

Работа в этих условиях создает некоторые проблемы для моего приложения, которое использует несколько файлов:

В следующих разделах будут рассмотрены эти три направления.

Оцените статью
Хостинги