Написал бота на 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. Подскажите, в чем может быть проблема?