Реализация асинхронного сервиса с микросевисной архитектурой.
Алексей Наумов ( algena75@yandex.ru )
- FastAPI
- PostgreSQL
- MinIO
- Asyncio
- SQLAlchemy
- Pytest
- Docker
- Nginx
Клонировать репозиторий и перейти в него в командной строке:
git clone git@github.com:algena75/memes.git
cd memes
Создание виртуального окружения:
poetry env use python3.10
Установка зависимостей:
poetry install --with test,web,images
Запуск оболочки и активация виртуального окружения (из папки проекта):
poetry shell
Проверка активации виртуального окружения:
poetry env list
Создать в корне проекта файл .env
(см .env.example
) для подключения БД и контейнера MinIO.
-
docker compose -f docker-compose.yml up -d
Oткрыть в браузере http://127.0.0.1/docs
.
Будет создано 5 контейнеров. Публичный web принимает через API файл и его описание, если файл графический,
информация передаётся в контейнер images для обработки. Если имя файла уже существует, формируется новое имя файла.
После получения ответа от images, файл записывается в хранилище. Контейнер images работает с базой данных.
При удалении файла информация о файле удаляется из базы данных, а файл удаляется из хранилища.
Эндпоинт /downloads/{filename}
формирует ссылку на скачивание файла из хранилища.
Написаны тесты для тестирования основной функциональности сервиса. Эндпоинты публичного сервиса проверяют
взаимодействие с приватным сервисом. Эндпоинты приватного сервиса - взаимодействие с БД.
Для запуска тестов выполнить в терминале pytest
.