Распределенная система для обработки изображений с возможностью добавления водяных знаков. Поддерживает масштабирование на множество рабочих узлов для параллельной обработки.
- Комаров Иван — gagarinkomar
- Скворцов Алексей — Rattysed
- Жуков Кирилл — llirikhh
- Шубин Владислав — VS-CDR
- Семенищев Андрей — semenishchev-ai
- Яфаров Руслан — afarovruslan
https://distributed-text-converter.vdi.mipt.ru/
- Docker Compose
- Для HTTPS: доменное имя и certbot
# Клонирование репозитория
git clone https://github.com/Rattysed/distributed-image-converter.git
cd distributed-image-converter# Создание файла конфигурации
cp .env.prod.example .env.prodНастройте переменные в файле .env.prod в соответствии с вашими требованиями.
Замените example.com на ваш домен:
# Получение SSL-сертификата
sudo certbot certonly --standalone -d example.com
# Настройка конфигурации nginx
sed -i 's/yourdomain\.com/example.com/g' nginx/nginx.conf
# Запуск контейнеров
docker compose -f docker-compose.prod.yml --env-file .env.prod up --build -d# Использование HTTP-конфигурации nginx
cp nginx/nginx.conf.http_only nginx/nginx.conf
# Запуск контейнеров
docker compose -f docker-compose.prod.yml --env-file .env.prod up --build -d# Создание файла конфигурации
cp .env.example .envНастройте переменные в файле .env в соответствии с вашими требованиями.
# Запуск контейнеров
docker compose up --build -d# Создать миграции
docker compose exec backend python manage.py makemigrations
# Просмотреть логи
docker compose logs- Пользователь заходит на сайт для добавления водяного знака на изображения
- Загружает одну или несколько картинок через форму
- Система перенаправляет на страницу ожидания с уникальным идентификатором задачи
- После обработки на странице появляется ссылка для скачивания архива с результатами
- Ссылка на результат действительна в течение 1 часа
- Через час после завершения задачи все файлы автоматически удаляются
Система поддерживает добавление новых типов обработки изображений:
- В файле
backend/file_requests/image_tasking.pyнаходится абстрактный класс - Для создания новой задачи обработки необходимо унаследоваться от этого класса и реализовать метод
edit - Пример реализации водяного знака можно найти в
backend/file_requests/custom_image_handler.py
- Django
- S3 (Minio)
- Postgres
- Celery
- Redis
- Загруженные пользователем файлы обрабатываются параллельно с помощью Celery. Несколько рабочих узлов (в примере их 2) подключаются по HTTP к Redis и получают задачи от контроллера
- Синхронизация состояний задач осуществляется через PostgreSQL
- Файлы синхронизируются через S3
- Система легко масштабируется на любое число рабочих узлов, которые могут быть запущены на разных хостах независимо от контроллера
Взаимодействие пользователя с приложением управляется через nginx:
