В этой статье мы рассмотрим, как развернуть телеграм бота на python в облаке. В качестве облака будем использовать облачный провайдер Amvera. Для хостинга вашего проекта вы можете выбрать любого другого провайдера с возможностью деплоя через push в GIT. Данная статья написана скорее как инструкция для пользователей Amvera.

Пишем телеграм бота

На хабре и других ресурсах можно найти много туториалов, как писать телеграм ботов, начиная от простых и заканчивая сложными, поэтому не будем сильно углубляться в этот вопрос. Возьмем готовый пример эхо бота от создателя библиотеки для работы с телеграмом python-telegram-bot.

Перед запуском необходимо

  1. В телеграме через поиск найти бот "BotFather" и запросить у него создание нового телеграм бота. Он попросит ввести название и username для бота, после чего выдаст токен.

  2. Скопировать выданный токен и вставить его в файл примера эхо бота на место слова TOKEN в функции main()

  3. Создать файл requirements.txt в котором прописать строчку:

python-telegram-bot
  1. Вызвать pip install -r requirements.txt чтобы установить этот пакет. Сейчас многие подумали, почему бы просто не установить пакет через pip install python-telegram-bot? Так тоже можно, но файл requirements.txt все равно понадобится для разворачивания в облаке, поэтому лучше сразу его создать.

  2. Проверить, что все работает, можно запустив бот локально через python3 echobot.pyи потыкав созданный бот в телеграм (ссылочку на бот можно найти у BotFather).

Запускаем в облака. Как развернуть бота на хостинге

Перейдем теперь к самой интересной части данной статьи, а именно - как захостить бота.

Регистрация в сервисе

  1. На сайте Amvera нажимаем на кнопку "Регистрация" или пользуемся прямой ссылкой cloud.amvera.ru

  2. Нажимаем на кнопку "Регистрация" в нижней части окна и заполняем последовательно все поля. После заполнения поля "Номер телефона" нажимаем на кнопку "Отправить код" и вводим код из СМС.

  3. Подтверждаем, что мы не робот, и тыкаем на большую синюю кнопку "Регистрация"

  4. Остается только подтвердить указанную почту, перейдя по ссылке в письме.

Создание проекта и размещение бота

  1. На появившейся после входа странице нажимаем на кнопку "Создать" или "Создать первый!".

    Страница проектов
    Страница проектов
  1. На данном шаге нам предлагают присвоить нашему проекту название и выбрать для него тариф. Лучше указывать название на английском языке, но русский также поддерживается. Может показаться, что тарифные планы предоставляют слишком мало ресурса по сравнению с VPS. Однако в VPS часть ресурсов используется операционной системой, а тут весь выделенный ресурс уходит только на развертываемое приложение. Для развертывания бота нам хватит самого простого тарифа. Стартового баланса в 1000 руб. вам хватит примерно на 3 месяца беспрерывной, бесплатной работы вашего бота 24/7.

    Окно создания нового проекта
    Окно создания нового проекта
  2. Сервис Amvera реализует удобный способ доставки кода в свое облако с помощью системы контроля версий git. Чтобы облако знало, что именно и как нужно запускать, требуется создать yml файл. Подробно о том, как самому составить этот файл описано в документации, однако я рекомендую воспользоваться автоматическим графическим инструментом генерации.

    Графический инструмент генерации .yaml файлов
    Графический инструмент генерации .yaml файлов
    1. Выбираем окружение Python и версию.

    2. Указываем версию и путь до файла requirements.txt. Очень важно указать все используемые в проекте пакеты в этом файле, чтобы облако смогло их скачать через pip.

    3. Указываем путь до файла, содержащего точку входа в программу (тот файл, который вы указываете интерпретатору питона, когда запускаете приложение). В нашем случае это файл echobot.py (если ваш файл находится не в корневой папке проекта, то нужно указывать путь относительно корня проекта. Если бы мой файл был в папке src, я бы указал в этом поле src/echobot.py)

    4. Если в процессе работы ваш бот собирает какие-то данные от пользователя, которые следует сохранять на диск, то их следует класть в папку data. В противном случае при перезапуске проекта все данные будут потеряны!

    5. Порт можно указать любой, так как в нашем случае он не играет никакой роли.

    6. Нажимаем на кнопку Generate YAML, после чего начинается загрузка файла amvera.yml.

  3. Скачанный файл кладем в корень нашего проекта

  4. Осталось инициализировать гит репозиторий и запушить наш проект. Как установить гит, если он ещё не установлен, описано тут.

    1. В корне нашего проекта даем команду: git init (если гит уже инициализирован в вашем проекте, то этого делать не нужно)

    2. Привязываем наш локальный гит репозиторий к удаленному репозиторию через команду, которая указана на странице проекта в amvera (имеет формат git remote add amvera https://git.amvera.ru/ваш_юзернейм/ваш_проект)

    3. Делаем git add . и git commit -m "Initial commit"

    4. И наконец-то пушим наш проект, выполняя команду git push amvera master вводя учетные данные, которые использовались при регистрации в сервисе.

  1. После того, как проект запушится в систему, на странице проекта статус поменяется на "Выполняется сборка".

    Проект в статусе сборки
    Проект в статусе сборки
  2. Как только проект соберется, он перейдет в стадию: "Выполняется развертывание", а после в статус "Успешно развернуто".

    Успешно развернутый проект
    Успешно развернутый проект
  3. Если по какой-то причине проект не развернулся, можно обратиться к логам сборки и логам приложения для отладки. Если Проект завис в статусе "Сборка" на долгое время, а логи сборки не отображаются, то стоит ещё раз проверить корректность amvera.yml файла.

Вывод

Вот таким нехитрым способом, буквально за пять минут можно развернуть уже написанного бота в облаке. Стартовый баланс позволит работать боту, которого вы захостили, 24/7 примерно 3 месяца, а доставка обновлений через push в GIT - обновлять проект одной командой без даунтайма.

Комментарии (6)


  1. Data4
    17.06.2023 08:36

    Попробовал сделать по инструкции. Выдает ошибку, что бот работает на двух устройствах. Такое может быть?


    1. maxcoolmakarov Автор
      17.06.2023 08:36

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


      1. Data4
        17.06.2023 08:36

        Благодарю! Помогло, теперь бот работает)


  1. kirillkosolapov
    17.06.2023 08:36
    +2

    Как вариант, можно вместо yaml, Dockerfile использовать. Чуть сложнее чем генератором yaml делать, но можно любое окружение использовать. Это комментарий на случай, если у кого-то не Python, Java или Node JS. Можно дополнить инструкцию еще случаем с Dockerfile - многим будет полезно.


  1. Z55
    17.06.2023 08:36

    27/7?


  1. hronorog
    17.06.2023 08:36
    +2

     "Стартового баланса в 1000 руб. вам хватит примерно на 3 месяца беспрерывной, бесплатной работы вашего бота 24/7."

    ммм...