Асинхронный микросервис для управления профилями пользователей с поддержкой геолокационного поиска, кэширования и JWT-аутентификации. Сервис построен на FastAPI, использует PostgreSQL с расширением PostGIS для хранения геоданных и Redis для кэширования.
- Регистрация и обновление профиля пользователя (с валидацией возраста 18+)
- Поиск профилей по радиусу и возрасту (геолокация через PostGIS)
- Кэширование результатов поиска в Redis (ускорение повторных запросов)
- JWT-аутентификация (доступ только с валидным токеном)
- Асинхронная работа с БД и кэшем
- Докеризация и миграции через Alembic
- Cбор, хранение и визуализация метрик через Prometheus, Grafana
- Python 3.12 — основной язык разработки
- FastAPI — современный асинхронный web-фреймворк
- SQLAlchemy — ORM для работы с базой данных (async)
- Alembic — миграции схемы БД
- PostgreSQL + PostGIS — реляционная база данных с поддержкой геоданных
- Redis — кэширование и хранение сессий (асинхронный доступ)
- Docker, docker-compose — контейнеризация и оркестрация сервисов
- Poetry — управление зависимостями и пакетами
- Pydantic — валидация и сериализация данных
- Ruff — быстрый и современный линтер для Python
- Prometheus — сбора и хранения метрик микросервиса
- Grafana — визуализация метрик и построения дашбордов на основе данных из Prometheus
- Контроллеры: обработка HTTP-запросов, валидация, возврат ошибок
- Сервисы: бизнес-логика, кэширование, агрегация данных
- Репозитории: работа с БД через SQLAlchemy
- Кэш: асинхронное взаимодействие с Redis
- Модели и схемы: структура данных, Pydantic и SQLAlchemy
- Исключения: централизованная обработка ошибок
- Создайте папку с проектом и склонируйте репозиторий:
mkdir user_profile_service
cd user_profile_service
git clone https://github.com/aquaracer/Fastapi-User-Profile-Microservice.git-
Настройте переменные окружения в файле .env
-
Соберите и запустите контейнеры:
docker-compose up --build- Примените миграции базы данных:
docker exec -it user_profile_service bash
poetry run alembic upgrade headПриложение будет доступно по следующим адресам:
- API:
http://localhost:8000 - Swagger UI:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
