@Danil-Lv

Как написать бота на webhook aiogram?

Написал бота на aiogram, который должен работать на webhook. Бот запускается, но никак не реагирует. Ниже описаны все мои действия.

Арендовал VDS сервер на Ubuntu 20.04, купил домен для этого сервера, установил nginx, с помощью Let's encrypt получил SSL сертификат

Открыл порты 80, 443 для Nginx и порт 3001:

sudo ufw allow 'Nginx Full'
sudo ufw allow 3001
sudo ufw allow 3001/tcp


В nginx.conf, который находится в /etc/nginx добавил следующее:

server {
                listen 80;
                listen 443 ssl;
                server_name test.site www.test.site;

                ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
                ssl_certificate /etc/letsencrypt/live/test.site/fullchain.pem;
                ssl_certificate_key /etc/letsencrypt/live/test.site/privkey.pem;
                location / {
                        proxy_pass http://127.0.0.1:3001;
                        proxy_redirect     off;
                        proxy_set_header   Host $host;
                        proxy_set_header   X-Real-IP $remote_addr;
                        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header   X-Forwarded-Host $server_name;
                }
        }


В качестве бота обычный эхо-бот:

import logging

from aiogram import Bot, types
from aiogram.contrib.middlewares.logging import LoggingMiddleware
from aiogram.dispatcher import Dispatcher
from aiogram.dispatcher.webhook import SendMessage
from aiogram.utils.executor import start_webhook


API_TOKEN = 'TOKEN'

# webhook settings
WEBHOOK_HOST = 'https://test.site/'
WEBHOOK_PATH = ''
WEBHOOK_URL = f"{WEBHOOK_HOST}{WEBHOOK_PATH}"

# webserver settings
WEBAPP_HOST = '127.0.0.1'
WEBAPP_PORT = 3001

logging.basicConfig(level=logging.INFO)

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
dp.middleware.setup(LoggingMiddleware())


@dp.message_handler()
async def echo(message: types.Message):
    # Regular request
    # await bot.send_message(message.chat.id, message.text)

    # or reply INTO webhook
    return SendMessage(message.chat.id, message.text)


async def on_startup(dp):
    await bot.set_webhook(WEBHOOK_URL)
    # insert code here to run it after start


async def on_shutdown(dp):
    logging.warning('Shutting down..')

    # insert code here to run it before shutdown

    # Remove webhook (not acceptable in some cases)
    await bot.delete_webhook()

    # Close DB connection (if used)
    await dp.storage.close()
    await dp.storage.wait_closed()

    logging.warning('Bye!')


if __name__ == '__main__':
    start_webhook(
        dispatcher=dp,
        webhook_path=WEBHOOK_PATH,
        on_startup=on_startup,
        on_shutdown=on_shutdown,
        skip_updates=True,
        host=WEBAPP_HOST,
        port=WEBAPP_PORT,
    )


Тестировал бота с помощью ngrok и все работало, но при деплое на сервер ноль реакции, поэтому подозреваю, что проблема в настройке nginx. Подскажите, в чем может быть проблема?
  • Вопрос задан
  • 295 просмотров
Пригласить эксперта
Ответы на вопрос 1
@q2digger
никого не трогаю, починяю примус
Что а логах nginx?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы