Pull to refresh

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

Level of difficultyEasy
Reading time4 min
Views19K

Расскажу самый простой и бесплатный способ развернуть на хостинге телеграмм бота, написанного на aiogram и перевести на webhook. Посмотреть видео версию, которую я выложил, можно на YouTube.

Бот будет работать 24/7 пожизненно.

Без использования VPS, веб-фреймворка django, flask, fastapi,.., pythonanywhere и heroku.

Краткое содержание действий:

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

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

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

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

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

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

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

_________________________________________________________

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

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

https://docs.aiogram.dev/en/v2.25.1/examples/webhook_example.html

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

рис.. 1
рис.. 1

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

рис. 2
рис. 2

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

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

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

рис. 3
рис. 3

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

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

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

рис. 4
рис. 4

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

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

рис. 5
рис. 5

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

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

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

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

рис. 6
рис. 6

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

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

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

рис. 7
рис. 7

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

рис. 8
рис. 8

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

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

рис. 9
рис. 9

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

рис. 10
рис. 10

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

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

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

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

рис. 11
рис. 11

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

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

рис. 12
рис. 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
рис. 13

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

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

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

рис. 14
рис. 14

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

рис. 16
рис. 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
рис. 15

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

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

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

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

рис. 17
рис. 17

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

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

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

рис. 18
рис. 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
рис. 19

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

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

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

рис. 20
рис. 20

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

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

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

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

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

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

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

рис. 21
рис. 21

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

Tags:
Hubs:
Total votes 6: ↑5 and ↓1+7
Comments10

Articles