Простой способ развернуть телеграмм бота с Aiogram + Webhook на хостинг

Простой способ развернуть телеграмм бота с Aiogram + Webhook на хостинг


_________________________________________________________

Пункт 1Сохранить пример к себе, регистрация на хостинге.

Идем на страницу официальной документации Aiogram:

https://docs.aiogram.dev/en/latest/examples/webhook_example.html

Копируем содержимое webhook_example.py к себе в файл webhook.py и сохраняем.

рис.. 1

Регистрируемся на хостинге: https://www.alwaysdata.com/ на бесплатном тарифе «Free for life».

рис. 2

После регистрации, в панели управления, жмем слева в разделе «WEB» → «Sites». Справа увидим наш сайт с доменным именем 3-его уровня.

У меня «rupyt.alwaysdata.net», где rupyt — имя которое я давал при регистрации, у Вас будет своё.

прим. Везде где будет написано «rupyt», меняем на своё имя.

рис. 3

Пункт 2Через FTP поместить наш файл бота на хостинге.

Подключаемся по FTP к хостингу любым вашим FTP-клиентом.

Строка для подключения ftp://rupyt@ftp-rupyt.alwaysdata.net для меня.

рис. 4

Еще раз напомню, вместо rupyt, ставим свое имя, которое вы указывали при регистрации.

Адрес хоста для подключения можно посмотреть, если нажать в панели управления хостингом, слева «Remote access» → «FTP»:

рис. 5

После подключения попадаем в домашнюю папку.

В ней имеется папка «www» для веб-сайтов.

Заходим в нее, создаём папку «bot»

Копируем наш пример webhook.py на хостинг в эту папку:

рис. 6

Пункт 3Через SSH установить библиотеку aiogram.

Для подключения по SSH, необходимо настроить доступ для него.

Идем в панель управления «Remote access» → «SSH», жмем на «шестеренку» справа, для редактирования:

рис. 7

Ставим галку на «Enable password login» для входа по паролю. Сохраняемся, жмем «Submit»:

рис. 8

Подключиться можно двумя способами.

Первый способ через терминал введя: «ssh rupyt@ssh-rupyt.alwaysdata.net».

рис. 9

Второй способ прямо в браузере, нажав на «(also Web accessible)».

рис. 10

Вводим логин (у меня rupyt) и пароль.

Здесь можно посмотреть домашний каталог (команда pwd), перейти в каталог «www/bot» и файл «webhook.py», который мы скопировали по FTP.

Установим «Aiogram», набрав «pip install aiogram».

Посмотреть установленные библиотеки можно командой «pip freeze».

рис. 11

Пункт 4Настроить сервис бота на хостинге.

Идем в панель управления «Advanced» → «Services», жмем на «+Add a service»:

рис. 12

Попадаем в настройки.

1. SSH user — не трогаем.

2. В «Command» пишем команду запуска файла бота нашего примера «webhook.py»:

«python /home/rupyt/www/bot/webhook.py»

3. В «Environment» запишем токен телеграм бота, без кавычек TG_TOKEN=62671….

4. В «Working directory» укажем путь где лежит наш файл «webhook.py»:

«/home/rupyt/www/bot/»

5. В «Annotation» дадим любое названия для сервиса, я дал «Aiogram Webhook service».

рис. 13

6. Сохраняемся, жмем «Submit»

Пункт 5Настроить сайт на переадресацию всех запросов на сервис бота.

Идем в панель управления «Web» → «Sites», жмем на шестеренку «Edit» для редактирования нашего сайта:

рис. 14

1. Попадаем в настройки «CONFIGURATION».

рис. 16

2. «Addresses» - не трогаем, это и есть Ваш адрес веб-сайта. У меня «rupyt.alwaysdata.net».

3. В «Configuration» «Type*» выбираем «Redirect».

4. В «Destination URL*» прописываем адрес на котором работает наш сервис бота.

У меня «http://services-rupyt.alwaysdata.net:8350».

Где «services» - означает, что это сервис, «rupyt» - мое имя, «8350» - порт который необходимо выбрать из диапазона 8300-8499, как сказано в документации.

Формат записи можно увидеть в документации https://help.alwaysdata.com/en/services/:

рис. 15

5. В «Forwarding type*» выбираем тип: «transparent(reverse proxy)».

6. Ставим галочку на «Append request path» для того, что бы пути передавались в адрес назначения, то есть в сервис бота.

7. В «Annotation» дадим любое описания, я дал «Redirect For Bot».

8. Идем во вкладку «SSL» и ставим галочку для HTTPS «Force HTTPS usage»:

рис. 17

Сохраняемся, жмем «Submit»

Пункт 6. Отредактировать файл запуска бота с учетом наших настроек.

На хостинге через FTP, откроем наш скопированный файл «webhook.py» и отредактируем.

рис. 18

1. Импортируем модуль «OS» для загрузки токена через окружения.

2. Укажем загрузку токена через окружения «API_TOKEN = os.environ['TG_TOKEN']», который мы сохраняли в настройках сервиса , смотри Рис.13.

3. Для WEBHOOK_HOST укажем наш адрес вебсайта:

« WEBHOOK_HOST = 'https://rupyt.alwaysdata.net/' »

4. Путь я указал «WEBHOOK_PATH = '/bot/'», можно оставить пустым в кавычках ''.

5. WEBAPP_HOST = '::' , указываем два двоеточия, как сказано в документации (Смотри Рис. 15.), что сервис может быть запущен, только на IP версии 6.

6. WEBAPP_PORT = 8350 , выбрали из диапазона 8300-8499, указали в настройках «Sites» смотри Рис. 16.

Сохраним наш файл.

Пункт 7Перезапуск сервиса бота, проверка бота. Просмотр логов.

Идем в панель управления «Advanced» → «Services», жмем на «Restart»:

рис. 19

Запускаем телеграмм клиента, и введем что-нибудь. Видим что бот отвечает «эхом». Ура!

Можно посмотреть логи для сайта или сервиса.

Для сервиса идем в панель управления «Advanced» → «Services», жмем на «Logs»:

рис. 20

В логах видим:

- запуск сервиса на IPv6 «::» и порту 8350

- команду запуска, которую указали для сервиса.

- имя бота и удачный запуск его.

- POST запрос по path «/bot/», c удачным status_code = 200.

Настройка закончена !!!

Для перевода своего бота с polling-ом на вебхук, достаточно скопировать хендлеры функции в наш файл webhook.py на хостинге:

рис. 21

Надеюсь кому-то поможет. Всем удачи! )


Источник: https://habr.com/ru/articles/730310/


Report Page