An open API service indexing awesome lists of open source software.

https://github.com/fersus85/auth_service

Сервис обеспечивает регистрацию и аутентификацию пользователей, управление учетными записями и безопасность данных
https://github.com/fersus85/auth_service

docker fastapi jwt-authentication nginx postgresql redis sqlalchemy typer-cli uvicorn

Last synced: 11 months ago
JSON representation

Сервис обеспечивает регистрацию и аутентификацию пользователей, управление учетными записями и безопасность данных

Awesome Lists containing this project

README

          

# Интеграция Auth Service с Admin_panel и Movie_API
Ссылка на репозитории с командной работой:
- https://github.com/fersus85/Async_API_sprint_2 - сервис Movies_API
- https://github.com/fersus85/Admin_panel - сервис админ панели

## Мой вклад в проект
В рамках разработки Auth Service я выступал в роли тимлида и разработчика. Моя работа включала в себя:
1. Лидерство и управление.
- Декомпозировал задание, выделил ключевые задачи и распределил их среди разработчиков.
- Управлял прогрессом и контролировал выполнение задач, следил за соблюдением дедлайнов.
- Обеспечивал качество кода, проводил код-ревью и контролировал соответствие стандартам разработки.
- Настроил работу через submodules GitHub
- Вёл Changelog.

2. Разработка.
- Описал структуру проекта.
- Настроил создание superuser с помощью Typer.
- Описал OpenAPI документацию.
- Настроил oauth 2.0 через Yandex.
- Настроил трассировку запросов к API с помощью Jaeger
- Настроил миграции (Alembic), написал скрипт записи default ролей при поднятии сервиса.
- Настроил соединение с PostgreSQL и Redis.
- Описал централизованную обработку ошибок в сервисе.
- Настроил GitHub Actions для линтинга кода перед мерджем, улучшив процесс CI/CD.
- Описал все команды для Makefile, упростив запуск и управление проектом.
- Настроил интеграцию с Admin Panel.
- Написал README, документировав работу сервиса для разработчиков и пользователей.

## Содержание
- [Описание сервиса](#описание-сервиса)
- [Основные функции](#основные-функции)
- [Системные требования](#системные-требования)
- [Стек](#стек)
- [Настройки](#настройки)
- Запуск
- [Makefile](#запуск-makefile)
- [Docker](#запуск-docker)
- [Использование](#использование)
- [Контакты и поддержка](#контакты-и-поддержка)
- [Changelog](#changelog)

## Описание сервиса
Онлайн-кинотеатр, состоит из 3 сервисов, которые взаимодействуют друг с другом посредством API:
- **Сервис Аутентификации**: Обеспечивает регистрацию и аутентификацию пользователей, управление учетными записями и безопасность данных.
- **Сервис Выдачи контента**: Отвечает за предоставление и управление контентом, включая фильмы и сериалы, а также их метаданные. [документация](https://github.com/fersus85/Async_API_sprint_2/blob/main/README.md)
- **Сервис Админ панели**: Предоставляет интерфейс для администраторов, позволяя управлять контентом. [документация](https://github.com/fersus85/Admin_panel/blob/main/README.md)

## Основные функции
- Регистрация пользователя.
- Вход/выход пользователя в/из аккаунт(а).
- Аутентификация пользователей с использованием безопасных методов хеширования паролей.
- Функция изменения пароля.
- Получение пользователем своей истории входов в аккаунт.
- Управление ролями и правами доступа для различных уровней пользователей.
- Создание суперпользователей с неограниченными правами.
- Поддержка JWT (JSON Web Tokens) для безопасной передачи данных.

## Системные требования
- Python 3.10
- Docker
- Docker Compose
- утилита make (опционально)

## Стек
- Язык программирования: Python 3.10
- Веб-фреймворк: FastAPI
Используется для создания RESTful API.
- Сервер: Uvicorn
Приложение запускается под управлением ASGI.
- База данных: PostgreSQL
Используется для хранения информации о пользователях и ролях.
- ORM: SQLAlchemy
Для работы с базой данных.
- Миграции: Alembic
Для управления миграциями базы данных.
- Кеширование: Redis Cluster
Используется для кеширования данных и хранения токенов.
- Аутентификация: FastAPI JWT
Для работы с JSON Web Tokens.
- Инструменты:
- Typer: Для создания командной строки.
- Werkzeug: Для хеширования паролей.
- Веб-сервер: Nginx
Используется как обратный прокси-сервер.
- Контейнеризация: Docker
Для упрощения развертывания и управления зависимостями.

## Настройки
1. Клонируйте репозиторий:
```bash
git clone --recurse-submodules https://github.com/fersus85/Auth_sprint_2.git
```
2. Перейдите в директорию проекта:
```bash
cd Auth_sprint_2
```
3. Инициалируйте и обновите подмодули
```bash
git submodule init
git submodule update
```
4. Создайте сеть в докере:
```bash
docker network create auth_network
```
5. Настройте .env файлы в сервисах Admin_panel и Movie_API (см. документацию к ним)
6. Разместите в корне проекта файл .env, копируйте в него переменные из .env.example
```bash
REDIS_HOST=redis
POSTGRES_USER=app
POSTGRES_PASSWORD=ваш пароль
POSTGRES_DB=auth
POSTGRES_HOST=postgres
POSTGRES_PORT=5432
```

## Запуск Makefile
### Auth
1. Запустите сервис Аутентификации:
```bash
make up-auth
```
2. Выполните миграции сервис Аутентификации:
```bash
make db/migrate-auth
```
3. Подключитесь к контейнеру для создания superuser Аутентификации:
```bash
make su-create
```
4. Создайте superuser Аутентификации:
```bash
python3 cli/superuser.py
```
### Admin
2. Запустите сервис Админ панели:
```bash
make up-admin
```
### Movies_API
```bash
make up-movie
```
## Запуск Docker
### Auth
1. Запустите сервис Аутентификации:
```bash
docker compose up -d --build
```
2. Выполните миграции сервис Аутентификации:
```bash
docker compose exec fastapi-auth alembic upgrade head
```
3. Подключитесь к контейнеру для создания superuser Аутентификации:
```bash
docker exec -it auth-service-fastapi-auth-1 bash
```
4. Создайте superuser Аутентификации:
```bash
python3 cli/superuser.py
```
### Admin
2. Запустите сервис Админ панели:
```bash
docker compose -f <корень проекта>/Admin_panel/docker-compose.yml up -d --build
```
### Movies_API
```bash
docker compose -f <корень проекта>/Movies_API/docker-compose.yml up -d --build
```
## Makefile
все команды makefile можно увидеть, вызвав
```bash
make help
```

## Использование
После запуска всех сервисов:
- сервис Аутентификации работает на http://127.0.0.1:80 и https://127.0.0.1:443
- сервис Админ панели работает на http://127.0.0.1:90
- сервис Выдачи контента работает на http://127.0.0.1:8080

- Для работы в админ панели пройдите по указанному адресу и введите логин и пароль сsuperuser.

## Контакты и поддержка
Для получения поддержки или вопросов обращайтесь по электронной почте:
- **Тимлид**: deriabin_85@mail.ru
- **Разработчик**: dmitcvetcov@yandex.ru
- **Разработчик**: maximsonis@gmail.com

# Changelog

## [Версия 1.0.0] - 2024-12-04
### Добавлено
- Инициализирована структура папок
- Настроены конфигурации Docker, Nginx

## [Версия 1.0.1] - 2024-12-07
### Добавлено
- Настроены подключения к хранилищам PostgreSQL и Redis
- Настроены миграции в бд PostgreSQL
- Добавлен makefile
- Описаны прототипы API

## [Версия 1.0.2] - 2024-12-09
### Добавлено
- Добавлены модели SQLAlchemy для сервиса
- Добавлен скрипт для миграций при старте сервиса
### Исправлено
- Изменена user schema

## [Версия 1.0.3] - 2024-12-11
### Добавлено
- Добавлен сервис аутентификации
- Добавлен сервис user
### Исправлено
- Дополнен скрипт миграций: записываются дефолтные роли

## [Версия 1.0.4] - 2024-12-13
### Добавлено
- Добавлен основной функционал сервиса ролей
- Добавлена консольная команда создания суперпользователя
- Добавлены тесты для сервиса auth
### Исправлено
- Исправлены ошибки в импортах

## [Версия 1.0.5] - 2024-12-14
### Добавлено
- Добавлена openapi документация
- Добавлен централизованный обработчик ошибок
- Добавлена команда для поднятия инфраструктуры для тестов
- Добавлен эндпоинт для проверки наличия прав у пользователя
- Добавлен Permission Cheker для защиты ручек admin
### Исправлено
- Исправлены ошибки в тестах

## [Версия 1.0.6] - 2024-12-18
### Добавлено
- Инициализирована структура папок
- Настроены конфигурации Docker, Nginx
- Партицирована таблица с историей входов

## [Версия 1.0.7] - 2024-12-22
### Добавлено
- Добавлен механизм ограничения количества запросов к серверу
- Создана интеграцию Auth-сервиса с административной панелью
- Обновлён makefile

## [Версия 1.0.8] - 2024-12-24
### Добавлено
- Создана интеграцию Auth-сервиса с Movies сервисом
- Обновлён makefile

## [Версия 1.0.9] - 2024-12-25
### Добавлено
- Добавлена аутентификация с помощью Auth 2.0 Yandex
- Добавлена поддержка ssl

## [Версия 1.1.0] - 2024-12-27
### Добавлено
- Добавлена аутентификация с помощью Auth 2.0 VK
- Добавлена трассировка сервиса Auth

## [Версия 1.1.1] - 2024-12-28
### Добавлено
- Добавлена аутентификация с помощью Auth 2.0 Google