Здравствуйте! Я впервые на Хабре и занимаюсь созданием ботов на Python с использованием aiogram 3. Я уже написал своего первого бота с несколькими кнопками, административной панелью и Redis-сервером. Теперь хочу подключить его к вебхуку. Я приобрёл VPS на Timeweb и домен, который, по словам Blackbox, необходим для этого проекта. Я искал руководства и видеоуроки, но нашёл мало информации, и она оказалась довольно разрозненной. Я столкнулся с проблемами при использовании как nginx, так и fastapi с ngrok. Я понял, что ngrok позволяет сделать локальный сервер публичным, но возникают сомнения, требуется ли мне действительно домен. Я постарался настроить nginx и сертифицировал его с помощью certbot, изменил конфигурацию по совету Blackbox и адаптировал свой main.py, однако постоянно сталкиваюсь с одной и той же ошибкой. Я даже удалил VPS и создал новый, привязал к нему домен, но по-прежнему не могу найти решение. Помогите мне, пожалуйста! Мне нужна подробная инструкция о том, как правильно настроить main.py (выполняемый файл бота) и как настроить свой домен, используя nginx. Я уже потратил по 4-6 часов в день на это, но не нашёл ответов. Заранее благодарен за любую помощь! Кратко: Мне нужна очень подробная инструкция по настройке nginx и скрипта aiogram 3.x для вебхуков на VPS.
Здравствуйте!
Я рад помочь вам с настройкой вебхуков для вашего бота на aiogram 3.x с использованием Nginx. Давайте пройдемся по шагам, которые вам нужно выполнить.
### Шаг 1: Подготовка окружения
1. **Установите необходимые пакеты на вашем VPS**:
```bash
sudo apt update
sudo apt install python3 python3-pip python3-venv nginx certbot python3-certbot-nginx
```
2. **Создайте виртуальное окружение для вашего бота**:
```bash
mkdir ~/my_bot
cd ~/my_bot
python3 -m venv venv
source venv/bin/activate
```
3. **Установите необходимые библиотеки**:
```bash
pip install aiogram[fastapi] uvicorn
```
### Шаг 2: Создание скрипта бота
Создайте файл `main.py` и добавьте следующий код:
```python
from aiogram import Bot, Dispatcher, types
from aiogram.contrib.fsm_storage.memory import MemoryStorage
from fastapi import FastAPI, Request
API_TOKEN = 'YOUR_API_TOKEN'
bot = Bot(token=API_TOKEN)
storage = MemoryStorage()
dp = Dispatcher(bot, storage=storage)
app = FastAPI()
@app.on_event("startup")
async def startup():
await bot.delete_webhook()
await bot.set_webhook('https://your-domain.com/webhook')
@app.post('/webhook')
async def webhook(request: Request):
update = types.Update(**await request.json())
await dp.process_update(update)
return {'status': 'ok'}
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
await message.reply("Привет! Я ваш бот!")
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host='0.0.0.0', port=8000)
```
Замените `YOUR_API_TOKEN` на ваш токен бота, а `https://your-domain.com` на ваш домен.
### Шаг 3: Настройка Nginx
Создайте конфигурационный файл для вашего приложения Nginx:
```bash
sudo nano /etc/nginx/sites-available/my_bot
```
Добавьте туда следующее:
```nginx
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:8000;
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-Proto $scheme;
}
location /webhook {
proxy_pass http://localhost:8000/webhook;
}
}
```
Замените `your-domain.com` на ваш настоящий домен.
Теперь активируйте новую конфигурацию:
```bash
sudo ln -s /etc/nginx/sites-available/my_bot /etc/nginx/sites-enabled/
```
Проверьте конфигурацию Nginx на наличие ошибок:
```bash
sudo nginx -t
```
Если ошибок нет, перезагрузите Nginx:
```bash
sudo systemctl restart nginx
```
### Шаг 4: Получение SSL-сертификата
Запустите Certbot для автоматической установки SSL-сертификатов:
```bash
sudo certbot --nginx -d your-domain.com
```
Следуйте инструкциям на экране.
### Шаг 5: Запуск бота
Теперь вы можете запустить бота:
```bash
uvicorn main:app --host 0.0.0.0 --port 8000
```
Чтобы бот работал постоянно в фоновом режиме, вы можете использовать такие утилиты, как `screen` или `tmux`, или настроить systemd-сервис.
### Шаг 6: Настройка systemd (по желанию)
Если вы хотите, чтобы бот автоматически запускался при загрузке системы, создайте файл сервиса:
```bash
sudo nano /etc/systemd/system/my_bot.service
```
Добавьте туда следующее:
```ini
[Unit]
Description=My Bot
After=network.target
[Service]
User=your_user
WorkingDirectory=/home/your_user/my_bot
Environment="PATH=/home/your_user/my_bot/venv/bin"
ExecStart=/home/your_user/my_bot/venv/bin/uvicorn main:app --host 0.0.0.0 --port 8000
[Install]
WantedBy=multi-user.target
```
Замените `your_user` на