OLKI Backend

Лендинг для сайта краски

Описание проекта

Backend-сервис для лендинга продажи красок, реализующий полный цикл обработки заказов: от приема запросов от пользователей до асинхронной обработки и отправки уведомлений.

Проект демонстрирует использование современных технологий веб-разработки, микросервисной архитектуры, очередей сообщений и мониторинга приложений.

Технологический стек

Django 5.0 Веб-фреймворк
PostgreSQL Реляционная БД
RabbitMQ Брокер сообщений
Redis Кэш и очереди
Prometheus Сбор метрик
Grafana Визуализация метрик
Docker Контейнеризация
pytest Тестирование

Статистика проекта

91.88%
Покрытие тестами
47
Тестов
2
Django приложения
8
Docker сервисов

Архитектура системы

Компоненты:

  • Web Server - Django REST API для обработки HTTP запросов
  • Worker - Асинхронный обработчик сообщений из RabbitMQ
  • PostgreSQL - Основная база данных
  • RabbitMQ - Очередь сообщений для асинхронной обработки
  • Redis - Кэширование и сессии
  • Prometheus - Сбор метрик производительности
  • Grafana - Дашборды для визуализации метрик
  • MailHog - Тестовый SMTP сервер для проверки email
Docker Compose Services

Все сервисы запущены через Docker Compose

API Endpoints

Продукция (Products)

GET /api/products/
GET /api/products/{id}/
POST /api/products/
GET /api/products/featured/
GET /api/products/?search=query

Контакты (Contacts)

POST /api/contacts/
GET /api/contacts/

Мониторинг

GET /metrics

Рабочий процесс

Обработка запроса на контакт:

  1. Пользователь отправляет POST запрос на /api/contacts/
  2. Сервер сохраняет запрос в PostgreSQL
  3. Сервер отправляет событие в очередь RabbitMQ email_notifications
  4. Сервер сразу возвращает успешный ответ пользователю
  5. Worker получает сообщение из очереди
  6. Worker отправляет письмо с благодарностью пользователю
  7. Worker отправляет уведомление сервисным учеткам
  8. Worker помечает запрос как обработанный в БД
MailHog Main Page

Главная страница MailHog с отправленными письмами

MailHog Email Example

Пример отправленного письма с благодарностью пользователю

Мониторинг и метрики

Система собирает метрики через Prometheus и визуализирует их в Grafana. Доступны следующие метрики:

  • HTTP Requests Rate - скорость HTTP запросов
  • HTTP Request Duration - время ответа (50th и 95th percentile)
  • Total Requests - общее количество запросов
  • Error Rate (5xx) - частота ошибок сервера
  • HTTP Status Codes - распределение по статус-кодам
  • Database Queries Rate - скорость запросов к БД
Prometheus Metrics

Метрики в Prometheus

Prometheus Request Example

Пример запроса метрик

Тестирование

Покрытие тестами: 91.88%

Coverage отчет доступен в GitHub Actions CI: 📊 Посмотреть coverage в CI

  • Тесты моделей (Product, ContactRequest)
  • Тесты API endpoints (CRUD операции)
  • Тесты сериализаторов
  • Тесты воркера (обработка RabbitMQ сообщений)
  • Тесты отправки email
  • Интеграционные тесты
$ make test ======================== 47 passed in 2.06s ========================= Required test coverage of 90% reached. Total coverage: 91.88%

Админ-панель Django

Реализована полнофункциональная админ-панель для управления данными:

Django Admin Products

Управление продукцией в админ-панели

Django Admin Contacts

Управление запросами на контакт

Docker и развертывание

Весь проект контейнеризован и может быть запущен одной командой:

docker compose up

Это запускает все необходимые сервисы:

  • Django веб-сервер
  • Worker для обработки очередей
  • PostgreSQL база данных
  • RabbitMQ брокер сообщений
  • Redis кэш
  • Prometheus для метрик
  • Grafana для визуализации
  • MailHog для тестирования email

Структура проекта

olki-backend/ ├── olki_backend/ # Основной проект Django │ ├── settings.py # Настройки │ ├── urls.py # URL маршруты │ ├── views.py # Views │ ├── wsgi.py # WSGI конфигурация │ └── asgi.py # ASGI конфигурация │ ├── products/ # Приложение для продукции │ ├── models.py # Модель Product │ ├── views.py # API endpoints │ ├── serializers.py # Сериализаторы │ ├── urls.py # URL маршруты │ ├── admin.py # Админ-панель │ ├── migrations/ # Миграции БД │ └── tests.py # Тесты │ ├── contacts/ # Приложение для контактов │ ├── models.py # Модель ContactRequest │ ├── views.py # API endpoints │ ├── serializers.py # Сериализаторы │ ├── urls.py # URL маршруты │ ├── admin.py # Админ-панель │ ├── migrations/ # Миграции БД │ ├── management/ │ │ └── commands/ │ │ └── runworker.py # RabbitMQ консьюмер │ └── tests.py # Тесты │ ├── templates/ # HTML шаблоны │ └── report.html # Отчет для преподавателя │ ├── figures/ # Изображения для отчета │ └── *.png # Скриншоты │ ├── grafana/ # Конфигурация Grafana │ └── provisioning/ # Дашборды и datasources │ ├── prometheus/ # Конфигурация Prometheus │ └── prometheus.yml # Настройки сбора метрик │ ├── docker-compose.yml # Docker Compose конфигурация ├── Dockerfile # Dockerfile для веб-сервера ├── Dockerfile.worker # Dockerfile для воркера ├── pyproject.toml # Зависимости проекта ├── pytest.ini # Конфигурация pytest ├── Makefile # Команды для разработки ├── manage.py # Django management script └── README.md # Документация

Полезные ссылки