Деплоймент бота на Heroku - Блог - Momentum-Bots
+

Деплоймент бота на Heroku

Dima Kit · Травень 24, 2018 в 2:40 am

Предисловие

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

heroku logo

Почему именно Heroku? Она была одной из первых платформ, предоставляющих услуги типа PaaS (Platform as a Service) и есть лидером в этой сфере. Используя такие облачные сервисы, разработчик должен предоставить только приложение. Обо всем остальном – серверное железо, операционная система, интерпретатор языка и база данных, позаботится сервис.

PaaS

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

Регистрация и установка клиента Heroku

Прежде всего, для использования Heroku, нужно авторизироваться. Если у вас нет аккаунта, создайте его, перейдя по этой ссылке. Затем нужно установить Heroku Toolbelt. Эта утилита на данный момент поддерживает основные ОС: Windows, macOS и Linux.

Скачать и установить Heroku CLI на Windows или macOS можно прямо отсюда. На Ubuntu/Debian платформах вам понадобится ввести данную комманду:

После установки, чтобы убедиться, что все установилось, откройте консоль и введите heroku:

code

Если все работает, логинимся, используя данные, введенные при регистрации:

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

Сегодня мы будем деплоить бота, написанного во второй части. Для начала создадим наше приложение под названием momentumbots:

code

Вывод команды показывает, что приложение было успешно создано и доступно на https://momentumbots.herokuapp.com.

code

Имя momentumbots уже занято мной, так что придумайте свое 🙂

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

code

Ставим Вебхуки

В прошлых частях мы писали ботов, использующих Long Polling. Суть его в том, что на сервера Телеграмма периодически приходят запросы на получение обновлений. Это ненадежно, т.к. сервера Telegram могут возвращать ошибку 504, вырубая бота. Используя же вебхуки, мы устанаваливаем URL, на который будут приходить обновления автоматически, таким образом избавляясь от этой проблемы. Вебхуки в тг работают только по HTTPS. Благо, Heroku предоставляет доступ к приложению через HTTPS и SSL-сертификат, освободжая нас от заботы о создании сертификатов.

В качестве веб-сервера будем использовать Flask, однако вам не составит труда разобраться с другими фреймворками. На Github-странице pyTelegramBotAPI, помимо Flask’а, есть примеры для aiohttp, CherryPy, CPython и Tornado.

Добавим в config.py переменную, которая хранит название нашего приложения:

Создаем файлик run_server.py:

Подготовка к деплою

Создаем Procfile

Чтобы указать Heroku, какой скрипт запускать, надо создать файл с названием Procfile (без расширений):

web: gunicorn run_server:server

Что такое Gunicorn? Это HTTP-сервер для WSGI-приложений, написанный на Python. Почему не Flask? В отличии от Gunicorn, он обрабатывает только один запрос за раз, что может значительно замедлить нашего бота.

Создание локального репозитория

Чтобы отправлять изменения на Heroku, нам понадобится git.

Инициализируем новый репозиторий:

Файл requirements.txt

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

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

Развёртывание

Вот мы и дошли до финальной стадии. Введите данные комманды

Теперь, если все прошло гладко и вы введете адрес расположения вашего приложения (в нашем случае https://momentumbots.herokuapp.com), вы должны увидеть:

code

Проверяем нашего бота:

code

Как видите, все работает. Теперь наш бот доступен в любой момент, и мы не потратили на это ни цента.

Дополнения

1) Логи

Если у вас что-то не так, стоит заглянуть в логи, которые Heroku автоматически записывает. Просто введите комманду:

$ heroku logs

Если все ок, то вы увидите вывод наподобии этого:

code

2) Heroku Add-ons

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

Список всех доступных аддонов можно найти здесь. Самые популярные из бесплатных: mLab MongoDB, Papertrail, SendGrid, New Relic APM и MemCachier.

Добавление одного из них мы рассмотрим в следующем уроке.

3) Обход засыпания бота

К сожалению, если ваше приложение не используется в течение 30 минут, Heroku приостанавливает его, и следующий ваш запрос будет значительно длительнее обычного. У пользователей вашего бота может сложиться впечатление, что он сломался, хотя он просто “просыпается” 🙂

momentum

Я долго искал, как обойти это ограничение, и остановился на отличном сервисе UptimeRobot. Он прослеживает падения вашего сайта или же сервера, делая туда запросы с определенным интервалом времени и оповещат вас, если ваш сайт лёг. В фри-версии вам будет доступно до 50 мониторов, которые можно трекать каждые 5 минут. Зная URL нашего бота (https://momentumbots.herokuapp.com/), мы легко обойдем ограничения Heroku.

После регистрации, кликаем на Dashboard, затем Add New Monitor. Появляется такое окошко.

monitor

Заполняем поля, как в примере выше, и нажимаем на правую нижнюю кнопку Create Monitor. Готово. Теперь наш бот всегда бодрствует 🙂

Код урока можно глянуть здесь. Спасибо за внимание.

Dima Kit

<- Четвертая часть

Все части обучения:

  1. Наш первый бот
  2. Структура проекта бота (создаём проект)
  3. База данных пользователей
  4. Рассылки
  5. Деплоймент бота на Heroku

Всего комментариев: 1

  • abylgazy
    Автор: abylgazy Добавлено Січень 21, 2019 в 10:43

    добрый день.

    Список всех доступных аддонов можно найти здесь. Самые популярные из бесплатных: mLab MongoDB, Papertrail, SendGrid, New Relic APM и MemCachier.

    Добавление одного из них мы рассмотрим в следующем уроке.

    это урок запишите?

    Ответить

Оставить комментарий

Ваш email не будет опубликован.

Вы можете использовать следующие HTML тэги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">