stepik https://stepik.org/a/237390
Проект представляет собой веб-сервис на FastAPI для обработки платежных уведомлений и интеграции с Telegram ботом. Сервис принимает webhook-уведомления о платежах и отправляет информацию в Telegram чат.
- Настройки хранятся в
.env
файле:TELEGRAM_BOT_TOKEN
TELEGRAM_CHAT_ID
- Установка зависимостей:
python -m venv venv
потомpip install -r requirements.txt
- Настройка переменных окружения в
.env
- Запуск сервера:
python fastapi_project.py
- Сервер запускается на
http://0.0.0.0:8000
- Обновляем пакеты
sudo apt update
- Устанавливаем NGINX
sudo apt install nginx
- Создаем файл конфигурации:
sudo nano /etc/nginx/sites-available/ВАШ_ДОМЕН.ru
- Наполняем файл конфигурации:
server {
listen 80;
server_name ВАШ_ДОМЕН.ru www.ВАШ_ДОМЕН.ru;
location / {
proxy_pass http://127.0.0.1:8000; # Порт, на котором работает FastAPI
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;
}
}
- символическая ссылка для активации конфигурации:
sudo ln -s /etc/nginx/sites-available/ВАШ_ДОМЕН.ru /etc/nginx/sites-enabled/
- Тестируем nginx
sudo nginx -t
- Перезапускаем Nginx
sudo systemctl restart nginx
- Устанавливаем SSL
sudo apt install certbot python3-certbot-nginx
- Настраиваем SSL
sudo certbot --nginx -d ВАШ_ДОМЕН.ru -d www.ВАШ_ДОМЕН.ru
- Создаем крон задачу
sudo crontab -e
- Конфигурируем крон
0 0 * * * certbot renew --quiet && systemctl reload nginx
- Проверяем статус крон
sudo systemctl status certbot.timer
- Создаем файл конфигов для демона
sudo nano /etc/systemd/system/НАЗВАНИЕ_СЕРВИСА_ЛЮБОЕ.service
- Наполняем файл для демона
[Unit]
Description=My Python Script Service
[Service]
Type=simple
WorkingDirectory=/root/ВАША_ПАПКА
ExecStart=/bin/bash -c 'source /root/ВАША_ПАПКА/venv/bin/activate && /root/ВАША_ПАПКА/venv/bin/python /root/ВАША_ПАПКА/название_ФАЙЛА.py'
Environment="PATH=/root/ВАША_ПАПКА/venv/bin:$PATH"
Restart=on-failure
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
- Перезапускаем службу демона
sudo systemctl daemon-reload
- Запускаем службу демона
sudo systemctl start НАЗВАНИЕ_СЕРВИСА_СМ_ПУНКТ_13.service
- Проверяем статус службы
sudo systemctl status НАЗВАНИЕ_СЕРВИСА_СМ_ПУНКТ_13.service
-
FastAPI Backend
- Основной веб-сервер
- Обработка webhook-запросов
- Валидация входящих данных
- Интеграция с Telegram API
-
Telegram Bot
- Отправка уведомлений о платежах
- Эхо-бот функциональность
- Webhook для приема сообщений
class PaymentEvent:
eventType: str # Тип события платежа
product: Product # Информация о продукте
buyer: Buyer # Информация о покупателе
contractId: str # ID контракта
amount: float # Сумма платежа
currency: str # Валюта
timestamp: str # Временная метка
status: str # Статус платежа
errorMessage: str # Сообщение об ошибке
chat_id: str # ID чата Telegram (опционально)
class Product:
id: str # ID продукта
title: str # Название продукта
class Buyer:
email: str # Email покупателя
- Назначение: Прием уведомлений о платежах
- Входные данные: PaymentEvent
- Действия:
- Валидация входящих данных
- Форматирование сообщения для Telegram
- Отправка уведомления в Telegram
- Ответ: JSON с статусом операции
- Назначение: Прием сообщений от Telegram
- Входные данные: Telegram Update объект
- Действия:
- Обработка входящих сообщений
- Отправка эхо-ответа
- Ответ: JSON с подтверждением
- Использование переменных окружения для хранения секретов
- Валидация входящих данных через Pydantic
- Обработка ошибок и исключений
- FastAPI
- Uvicorn
- HTTPX
- Python-dotenv
- Pydantic
- Асинхронная обработка запросов
- Возможность горизонтального масштабирования
- Независимость от состояния
- fastapi - для вашего FastAPI приложения
- uvicorn - ASGI сервер для запуска FastAPI
- httpx - для асинхронных HTTP запросов (используется для отправки сообщений в Telegram)
- python-dotenv - для работы с .env файлами
- pydantic - для валидации данных (используется в FastAPI)