Skip to content

Lab 5: Развертывание Telegram-бота на Python

В этой лабораторной работе вы будете использовать репозиторий GitVerse с готовым образом Telegram-бота на языке Python. На примере развертывания Telegram-бота вы познакомитесь с созданием контейнера через интерфейс сервиса Container Apps и дополнительными настройками контейнера.

1. Подготовьте среду

Подготовьте среду, если пропустили этот шаг в начале.

2. (Опционально) Клонируйте или скачайте репозиторий кода c GitVerse

Вы можете зарегистрироваться в GitVerse, если у вас еще нет аккаунта, и познакомиться с новой системой контроля версий. Этот шаг необязательный и не влияет на дальнейшее прохождение лабораторной работы.

В данном репозитории находится готовый образ Telegram-бота на языке Python.

git clone https://gitverse.ru/cloudru/evo-containerapp-telegrambot-webhook-python-sample

3. Зарегистрируйте Telegram-бота

Зарегистрируйте бота с помощью BotFather.

В Telegram найдите BotFather.

search-botfather

Выполните команду /newbot.

Задайте имя (name) и имя пользователя (username) для бота. Имя пользователя должно оканчиваться на ...Bot или ..._bot.

В нашем случае:

  • name: new-bot
  • username: botforlabbot

В результате вы получите токен, сохраните его, он потребуется на следующих этапах.

create-bot

С помощью команды /setuserpic установите иконку для вашего бота.

set-userpick

4. Соберите образ и присвойте тег

В первой лабораторной работе вы создавали реестр в сервисе Artifact Registry для загрузки образа. Вы можете использовать текущий реестр или создать новый. Если хотите создать новый реестр, пройдите шаги 3-5 из первой лабораторной работы.

Соберите образ и присвойте ему тег, выполнив следующую команду:

docker build --tag <registry_name>.cr.cloud.ru/telegram-bot-example https://gitverse.ru/cloudru/evo-containerapp-telegrambot-webhook-python-sample.git#master --platform linux/amd64

5. Загрузите Docker-образ в реестр

Загрузите образ в реестр Artifact Registry, выполнив команду:

docker push <registry_name>.cr.cloud.ru/telegram-bot-example

где:

  • <registry_name> — название реестра, которое вы указывали при его создании в Artifact Registry.
  • telegram-bot-example — название будущего репозитория в Artifact Registry. Название репозитория соответствует имени Docker-образа.

В личном кабинете перейдите в репозиторий Artifact Registry и убедитесь, что образ загружен.

ar-image-done

6. Создайте и запустите контейнер

Перейдите в сервис Container Apps через меню в левом верхнем углу экрана.

go-ca

Нажмите Создать.

start-create

Укажите название контейнера и активируйте опцию Публичный адрес.

Нажмите Продолжить.

ca-container-name

Выберите реестр, репозиторий и тег Docker-образа, который вы загрузили в Artifact Registry.

Укажите порт контейнера — 5000.

ca-general-settings

Перейдите на вкладку Переменные и добавьте переменную окружения BOT_TOKEN. В значение переменной укажите токен, полученный при регистрации бота в BotFather.

Нажмите Продолжить.

ca-variables

Задайте количество ресурсов:

  • vCPU и RAM: 0.5 vCPU — 1024 MB
  • Минимальное количество экземпляров: 0
  • Максимальное количество экземпляров: 1

Нажмите Создать.

ca-config

Дождитесь, когда контейнер и ревизия перейдут в статус Выполняется.

ca-run

7. Добавьте webhook в Telegram

Чтобы бот получал сообщения из Telegram, добавьте webhook:

  1. Откройте любой браузер.
  2. В адресной строке введите по очереди следующие запросы:

https://api.telegram.org/bot{BOT_TOKEN}/getWebhookInfo — проверяет, существуют ли webhook:

get-webhook

https://api.telegram.org/bot{BOT_TOKEN}/deleteWebhook — удаляет существующие webhook:

set-webhook

https://api.telegram.org/bot{BOT_TOKEN}/setWebhook?url={PUBLIC_URL}/{BOT_TOKEN} — добавляет новый webhook:

set-webhook-url

где:

  • {BOT_TOKEN} — токен, который был сгенерирован при регистрации бота в BotFather.
  • {PUBLIC_URL} — публичный URL-адрес, который был сгенирован при создании контейнера в Container Apps.

8. Проверьте работу Telegram-бота

Вызовите бота в Telegram по имени пользователя (username) и проверьте его работу, выполнив команду /start.

bot-run

👍 Поздравляем, вы только что развернули Telegram-бота в контейнере!