Задача: создание предсказательной модели и его интерфейса по прогнозированию спроса на товары заказчика собственного производства ООО “Лента”.
- Django приложение: основной компонент системы, который обрабатывает входящие HTTP-запросы и взаимодействует с другими компонентами системы
- БД, отвечает за хранение исторических и прогнозируемых данных
- ML выполняет прогнозирование продаж.
- Redis, используется как брокер сообщений для Celery, чтобы организовать очередь задач, которые будут обрабатываться в фоновом режиме.
- Celery, система для асинхронной обработки задач в фоновом режиме.
- Flower, веб-интерфейс для мониторинга и управления задачами Celery.
- Python 3.11
- Django 4.2.5
- Django REST Framework 3.14
- PostgreSQL
- Redis
- Celery
- Celery Flower
- Celery Beat
- Docker
- Nginx
git clone [email protected]:AlexBesedin/LentaHackathon.git
cd LentaHackathon/infra
touch .env
SECRET_KEY = <Секретный ключ>
DB_ENGINE=<django.db.backends.postgresql>
DB_NAME=<имя базы данных postgres>
DB_USER=<пользователь бд>
DB_PASSWORD=<пароль>
DB_HOST=<db>
DB_PORT=<5432>
CELERY_BROKER_URL=redis://redis:6379/0
CELERY_RESULT_BACKEND=redis://redis:6379/0
cd LentaHackathon/infra/
sudo docker-compose up -d --build
sudo docker-compose exec backend python manage.py migrate
Создайте суперюзера и соберите статику::
sudo docker-compose exec backend python manage.py createsuperuser
sudo docker-compose exec backend python manage.py collectstatic --no-input
sudo docker-compose exec backend python manage.py import_stores
sudo docker-compose exec backend python manage.py import_categories
sudo docker-compose exec backend python manage.py import_sales
*Примечание: Данная команда запустит инференс прогноза, который сделает запросы в базу данных, после передаст данные в DS модель, и полученный прогноз от DS модели запишет в базу данных в модель Forecast.
sudo docker-compose exec backend celery -A lenta_main call lenta_main.tasks.main
* На продакшене, необходимо выставить время, когда будет выполняться асинхронная задача прогноза. Выполнение задачи будет происходит в фоновом режиме.
CELERY_BEAT_SCHEDULE = {
'run_main_every_10_min': {
'task': 'lenta_main.tasks.main',
'schedule': timedelta(minutes=10),
},
}
Celery Flower позволяет отслеживать состояние и прогресс выполнения задач, а также управлять задачами и рабочими процессами в вашем Celery-кластере через веб-интерфейс.
http://localhost:5555/
API документация будет доступна по адресу:
http://ваш_ip_адрес/api/docs/