В этой статье мы рассмотрим, как развернуть телеграм бота на python в облаке. В качестве облака будем использовать облачный провайдер Amvera. Для хостинга вашего проекта вы можете выбрать любого другого провайдера с возможностью деплоя через push в GIT. Данная статья написана скорее как инструкция для пользователей Amvera.
Пишем телеграм бота
На хабре и других ресурсах можно найти много туториалов, как писать телеграм ботов, начиная от простых и заканчивая сложными, поэтому не будем сильно углубляться в этот вопрос. Возьмем готовый пример эхо бота от создателя библиотеки для работы с телеграмом python-telegram-bot.
Перед запуском необходимо
В телеграме через поиск найти бот "BotFather" и запросить у него создание нового телеграм бота. Он попросит ввести название и username для бота, после чего выдаст токен.
Скопировать выданный токен и вставить его в файл примера эхо бота на место слова TOKEN в функции main()
Создать файл requirements.txt в котором прописать строчку:
python-telegram-bot
Вызвать
pip install -r requirements.txt
чтобы установить этот пакет. Сейчас многие подумали, почему бы просто не установить пакет черезpip install python-telegram-bot
? Так тоже можно, но файл requirements.txt все равно понадобится для разворачивания в облаке, поэтому лучше сразу его создать.Проверить, что все работает, можно запустив бот локально через
python3 echobot.py
и потыкав созданный бот в телеграм (ссылочку на бот можно найти у BotFather).
Запускаем в облака. Как развернуть бота на хостинге
Перейдем теперь к самой интересной части данной статьи, а именно - как захостить бота.
Регистрация в сервисе
На сайте Amvera нажимаем на кнопку "Регистрация" или пользуемся прямой ссылкой cloud.amvera.ru
Нажимаем на кнопку "Регистрация" в нижней части окна и заполняем последовательно все поля. После заполнения поля "Номер телефона" нажимаем на кнопку "Отправить код" и вводим код из СМС.
Подтверждаем, что мы не робот, и тыкаем на большую синюю кнопку "Регистрация"
Остается только подтвердить указанную почту, перейдя по ссылке в письме.
Создание проекта и размещение бота
-
На появившейся после входа странице нажимаем на кнопку "Создать" или "Создать первый!".
-
На данном шаге нам предлагают присвоить нашему проекту название и выбрать для него тариф. Лучше указывать название на английском языке, но русский также поддерживается. Может показаться, что тарифные планы предоставляют слишком мало ресурса по сравнению с VPS. Однако в VPS часть ресурсов используется операционной системой, а тут весь выделенный ресурс уходит только на развертываемое приложение. Для развертывания бота нам хватит самого простого тарифа. Стартового баланса в 1000 руб. вам хватит примерно на 3 месяца беспрерывной, бесплатной работы вашего бота 24/7.
-
Сервис Amvera реализует удобный способ доставки кода в свое облако с помощью системы контроля версий git. Чтобы облако знало, что именно и как нужно запускать, требуется создать yml файл. Подробно о том, как самому составить этот файл описано в документации, однако я рекомендую воспользоваться автоматическим графическим инструментом генерации.
Выбираем окружение Python и версию.
Указываем версию и путь до файла requirements.txt. Очень важно указать все используемые в проекте пакеты в этом файле, чтобы облако смогло их скачать через pip.
Указываем путь до файла, содержащего точку входа в программу (тот файл, который вы указываете интерпретатору питона, когда запускаете приложение). В нашем случае это файл echobot.py (если ваш файл находится не в корневой папке проекта, то нужно указывать путь относительно корня проекта. Если бы мой файл был в папке src, я бы указал в этом поле src/echobot.py)
Если в процессе работы ваш бот собирает какие-то данные от пользователя, которые следует сохранять на диск, то их следует класть в папку data. В противном случае при перезапуске проекта все данные будут потеряны!
Порт можно указать любой, так как в нашем случае он не играет никакой роли.
Нажимаем на кнопку Generate YAML, после чего начинается загрузка файла amvera.yml.
Скачанный файл кладем в корень нашего проекта
-
Осталось инициализировать гит репозиторий и запушить наш проект. Как установить гит, если он ещё не установлен, описано тут.
В корне нашего проекта даем команду:
git init
(если гит уже инициализирован в вашем проекте, то этого делать не нужно)Привязываем наш локальный гит репозиторий к удаленному репозиторию через команду, которая указана на странице проекта в amvera
git remote add amvera https://git.amvera.ru/ваш_юзернейм/ваш_проект
)Делаем
git add .
иgit commit -m "Initial commit"
И наконец-то пушим наш проект, выполняя команду
git push amvera master вводя учетные данные, которые использовались при регистрации в сервисе.
-
После того, как проект запушится в систему, на странице проекта статус поменяется на "Выполняется сборка".
-
Как только проект соберется, он перейдет в стадию: "Выполняется развертывание", а после в статус "Успешно развернуто".
Если по какой-то причине проект не развернулся, можно обратиться к логам сборки и логам приложения для отладки. Если Проект завис в статусе "Сборка" на долгое время, а логи сборки не отображаются, то стоит ещё раз проверить корректность amvera.yml файла.
Вывод
Вот таким нехитрым способом, буквально за пять минут можно развернуть уже написанного бота в облаке. Стартовый баланс позволит работать боту, которого вы захостили, 24/7 примерно 3 месяца, а доставка обновлений через push в GIT - обновлять проект одной командой без даунтайма.
Комментарии (6)
kirillkosolapov
17.06.2023 08:36+2Как вариант, можно вместо yaml, Dockerfile использовать. Чуть сложнее чем генератором yaml делать, но можно любое окружение использовать. Это комментарий на случай, если у кого-то не Python, Java или Node JS. Можно дополнить инструкцию еще случаем с Dockerfile - многим будет полезно.
hronorog
17.06.2023 08:36+2"Стартового баланса в 1000 руб. вам хватит примерно на 3 месяца беспрерывной, бесплатной работы вашего бота 24/7."
ммм...
Data4
Попробовал сделать по инструкции. Выдает ошибку, что бот работает на двух устройствах. Такое может быть?
maxcoolmakarov Автор
это, действительно, иногда случается. Самым простым и надежным решением будет поставить задержку в секунд пять перед блоком подключения к боту по токену.
Data4
Благодарю! Помогло, теперь бот работает)