Как залить бота на heroku
Перейти к содержимому

Как залить бота на heroku

  • автор:

Деплой бота на сервере Heroku

Может кто—нибудь дать инструкцию, как развернуть бота на сервере heroku (написанном на python )? Спасибо заранее.

Отслеживать

5,728 3 3 золотых знака 21 21 серебряный знак 44 44 бронзовых знака

задан 22 окт 2018 в 8:00

518 1 1 золотой знак 6 6 серебряных знаков 18 18 бронзовых знаков

Официальную документацию читали? devcenter.heroku.com/articles/getting-started-with-python

22 окт 2018 в 8:17

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

  • Первым делом создайте Git репозиторий в папке с ботом: git init
  • Войдите в аккаунт Heroku : heroku login
  • Создайте приложение: heroku create appname —region eu
  • Создайте файл Procfile с содержимым: bot: python main.py
    • Если бот на веб-хуках, замените bot на web . Но на бесплатном тарифе, бот будет засыпать каждые 30 минут если не будет подключений, по этому на Heroku free лучше держать ботов на лонг-поллинге. Но проблема с засыпанием веб приложения решается с помощью http://kaffeine.herokuapp.com/.
    • Теперь наша папка выглядит приблизительно так: Procfile main.py requirements.txt

    Отслеживать

    ответ дан 22 окт 2018 в 8:14

    Pavel Durmanov Pavel Durmanov

    5,728 3 3 золотых знака 21 21 серебряный знак 44 44 бронзовых знака

    22 окт 2018 в 8:50

    @Midnight Вы в Procfile точно bot указали?

    22 окт 2018 в 8:54

    Нет, у меня там web написано

    22 окт 2018 в 8:55

    @Midnight А нужно bot

    22 окт 2018 в 8:56

    Не подскажете почему на серваке вываливается ошибка? 2018-10-23T15:06:30.166700+00:00 app[bot.1]: File «/app/.heroku/python/lib/pytho n3.6/site-packages/aiogram/utils/exceptions.py», line 116, in detect 2018-10-23T15:06:30.166702+00:00 app[bot.1]: raise err(cls.text or description) 2018-10-23T15:06:30.166712+00:00 app[bot.1]: aiogram.utils.exceptions.Terminated ByOtherGetUpdates: Conflict: terminated by other getupdates request; make sure t hat only one bot instance is running

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

    Рано или поздно в разработке ботов вы столкнетесь с проблемой хостинга бота. Скорее всего, у вас нет своего собственного сервера, а платить за виртуальный не каждый хочет, да и настройка виртуального сервера может казаться чем-то непосильным для начинающих разработчиков. К счастью, есть много сервисов, предоставляющих хостинг приложений бесплатно. Одним из таких есть 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 платформах вам понадобится ввести данную комманду:

    $ curl https : / / cli — assets . heroku . com / install — ubuntu . sh | sh

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

    code

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

    $ heroku login

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

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

    Пишем бота для Telegram и хостим его на heroku

    Всем привет. Наверняка, если вы умеете программировать, и пользуетесь телеграмом, вам приходила в голову мысль написать своего бота, к тому же мессенджер предоставляет свой API для ботов, с хорошей документацией, а туториалов по всему интернету накидано немало. Но даже если вы и написали бота, то возникает следующая проблема: хостинг. Для «легких» проектов отлично подходит heroku, но у новичков нередко случаются проблемы с заливкой своих проектов туда. Об этом и пойдет речь в этой статье.

    Для нашего бота я решил взять tgbots-module от @aNNiMON. Т.к. бесплатный аккаунт heroku позволяет создать лишь 5 приложений, то использовать одно приложение для запуска нескольких ботов — отличная идея. Но в данной статье мы рассмотрим лишь одно приложение. Создадим в Intellij IDEA новый gradle-проект. Создадим, согласно гайду на гитхабе (ссылка выше) классы ExampleBot и ExampleBotHandler. Заполним build.gradle:

    id ‘com.github.johnrengelman.shadow’ version ‘2.0.4’
    id ‘application’
    group ‘com.senderman’
    version ‘1.0’
    mainClassName = ‘com.annimon.tgbotsmodule.Runner’
    sourceCompatibility = 10
    repositories {
    mavenCentral ( )
    dependencies {
    implementation ‘com.annimon:tgbots-module:0.1’
    mergeServiceFiles ( )
    exclude ‘META-INF/*.DSA’
    exclude ‘META-INF/*.RSA’

    И напишем простого эхобота. Комментировать не буду, код слишком простой и понятный, да и гайд есть.
    package com.senderman.examplebot ;
    import com.annimon.tgbotsmodule.BotHandler ;
    import com.annimon.tgbotsmodule.BotModule ;
    import com.annimon.tgbotsmodule.Runner ;
    import com.annimon.tgbotsmodule.beans.Config ;
    import java.util.List ;
    public class ExampleBot implements BotModule {
    public static void main ( String [ ] args ) {
    final var profile = ( args. length >= 1 && ! args [ 0 ] . isEmpty ( ) ) ? args [ 0 ] : «» ;
    Runner. run ( profile, List. of ( new ExampleBot ( ) ) ) ;
    public BotHandler botHandler ( Config config ) {
    return new ExampleBotHandler ( ) ;
    package com.senderman.examplebot ;
    import com.annimon.tgbotsmodule.BotHandler ;
    import org.telegram.telegrambots.meta.api.methods.BotApiMethod ;
    import org.telegram.telegrambots.meta.api.methods.send.SendMessage ;
    import org.telegram.telegrambots.meta.api.objects.Message ;
    import org.telegram.telegrambots.meta.api.objects.Update ;
    import org.telegram.telegrambots.meta.exceptions.TelegramApiException ;
    import org.telegram.telegrambots.meta.logging.BotLogger ;
    public class ExampleBotHandler extends BotHandler {
    public String getBotUsername ( ) {
    return System. getenv ( «username» ) ;
    public String getBotToken ( ) {
    return System. getenv ( «token» ) ;
    public BotApiMethod onUpdate ( Update update ) {
    if ( ! update. hasMessage ( ) ) {
    return null ;
    Message message = update. getMessage ( ) ;
    if ( ! message. hasText ( ) ) {
    return null ;
    String text = message. getText ( ) ;
    long chatId = message. getChatId ( ) ;
    SendMessage sm = new SendMessage ( chatId, text ) ;
    execute ( sm ) ;
    } catch ( TelegramApiException e ) {
    BotLogger. error ( «SEND» , e. toString ( ) ) ;
    return null ;

    Обратите внимание на методы getBotUsername() и getBotToken. В них мы берем токен и ник бота из переменных окружения. Heroku позволяет хранить в закрытом доступе необходимые вам переменные. Но об этом позже.
    Далее необходимо создать 2 файла: Procfile (без расширения) и system.properties. Первый нужен, чтобы дать heroku понять, что запускать, а второй — чем запускать. В моем случае это будет выглядеть так:
    Procfile:

    bot : java — jar build / libs / example_telegram_bot — 1.0 — all . jar
    system.properties:
    java . runtime . version = 10 . 0 . 2
    И т.к. мы используем tgbots-module, создаем файл config.yaml с таким содержанием:
    log — level : ERROR
    — com . senderman . examplebot . ExampleBot

    Проект к деплою на heroku готов, теперь — заливаем его на гитхаб (Я тоже залил, чтобы при возникновении сложностей вы смогли посмотреть, как надо было сделать), регистрируем в телеграме бота, а в хероку — регистрируемся и регистрируем новое приложение. Идем на вкладку Settings, жмем «reveal config vars» и заполняем переменные окружения:
    token — токен бота из телеграма
    username — ник бота без @
    GRADLE_TASK — в значение вписываем shadowJar . Это необходимо, чтобы heroku знало, как нужно собирать проект.
    Переходим на вкладку deploy и жмем connect to github. В поле repo name вводим имя нашего репо с ботом и жмем Search, далее выбираем нужное и жмем Connect. Обновляем страницу . В самом низу страницы появится кнопка Deploy Branch. Так же, вы можете включить автодеплой при каждом коммите (бесплатно). Ждем пока задеплоится, и переходим на вкладку Resources и обновляем страницу . Напротив команды запуска жмем карандашик, переключаем ползунок и жмем Confirm, а затем быстренько жмем More — view logs. И если все хорошо, идем в телеграм и пишем боту!

    Как разместить телеграм бота на heroku?

    есть где-нибудь в сети пошаговая(на сколько это вообще возможно) инструкция по деплою telegram бота на python на heroku? если кто-то разъяснит лично было бы совсем прекрасно. допустим у меня папка с файлом bot.py, что дальше-то?

    • Вопрос задан более трёх лет назад
    • 23621 просмотр

    Комментировать
    Решения вопроса 0
    Ответы на вопрос 2

    ptrvch

    вебдев-энтузиаст. Django, AngularJS

    Создайте в корневом каталоге файл Procfile, в нем введите следующее:
    worker: python bot.py
    Потом в командной строке в рабочем каталоге включите worker:
    heroku ps:scale worker=1

    в остальном деплой мало отличается от привычного деплоя веб-приложения на heroku, который описан в справке.

    Ответ написан более трёх лет назад
    Комментировать
    Нравится 5 Комментировать

    Вот есть неплохая инструкция: Развертывание Python бота для ВКонтакте на Heroku
    Для телеграма принцип такой же.

    Ответ написан более трёх лет назад
    Нравится 3 1 комментарий
    MajorTom69 @MajorTom69 Автор вопроса
    спасибо большое, я искал что-то типа такого, сегодня же опробую
    Ваш ответ на вопрос

    Войдите, чтобы написать ответ

    python

    • Python

    Как правильно оформить код?

    • 2 подписчика
    • 13 часов назад
    • 98 просмотров

    python

    • Python
    • +1 ещё

    Как формировать сырые SQL запросы максимально эффективно?

    • 2 подписчика
    • 16 часов назад
    • 78 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *