Данный проект представляет собой систему обработки изображений, разделенную на три ключевых компонента:
- API - интерфейс для взаимодействия с пользователем.
- Служба обработки изображений - отвечает за выполнение трансформаций, включая добавление текста на изображение.
- Служба сохранения данных - обеспечивает хранение обработанных изображений в базе данных.
- База данных: PostgreSQL
- Обмен данными между службами: Redis Streams
- API и служба обработки изображений: Python (c использованием библиотек FastAPI + Pillow)
- Служба сохранения в БД: Golang
Пользователь отправляет запрос через API с изображением и текстом для добавления. API передает задачу на обработку в специальную службу. После завершения обработки, обработанное изображение сохраняется в БД через службу сохранения.
Этот проект был реализован в качестве демонстрации моих навыков в разработке и архитектуре приложений.
git clone https://github.com/3x0d2s/image-processing.git
cd image-processing/
cp example.docker-compose.yml docker-compose.yml
Для каждого сервиса в volumes предопределено расположение различных дерикторий:
- ./media - директория для хранения обработанных изображений
- ./fonts - директория для хранения доступных шрифтов
- ./image_handler_logs - директория для логов службы обработки изображений
- ./db_saver_logs - директория для хранения логов службы сохранения в БД
- ./postgresql - директория для хранения данных БД
Изменять эти директории и другие параметры docker-compose файла не рекомендуется.
cp example.env .env
Файл example.env содержит заготовленные значения для корректного запуска проекта в контейнере.
Для изменения шрифта требуется в директорию ./fonts скопировать новый шрифт, затем изменить в файле .env переменную FONT_NAME на имя нового шрифта.
Для изменения размера шрифта требуется изменить значение переменной FONT_SIZE в файле .env
cd api/
docker build -t test-task-api:latest .
cd image_handler/
docker build -t image_handler:latest .
cd db_saver/
docker build -t db_saver:latest .
docker-compose up -d
После запуска будут доступны следующие эндпоинты:
- POST http://localhost:8001/api/images
- GET http://localhost:8001/api/images
- GET http://localhost:8001/api/images/{image_id}
- GET http://localhost:8001/docs
Предполагается наличие Python 3.10 и Golang в системе, запущенных PostgreSQL и Redis с модулем redis-search, а так же установленного пакетного менеджера Poetry.
cd api
cp example.env .env
Требуется отредактировать файл .env для конфигурации строк подключения к PostgreSQL и Redis.
poetry env use python3.10
poetry install
poetry shell
alembic upgrade head
uvicorn app.main:app
cd image_handler
cp example.env .env
Требуется отредактировать файл .env для конфигурации строки подключения Redis.
poetry env use python3.10
poetry install
poetry shell
python -m src.main
cd db_saver
cp example.env .env
Требуется отредактировать файл .env для конфигурации строк подключения к PostgreSQL и Redis.
go run main.go