# server ### Стек технологий: 1. **Язык программирования**: Python 2. **База данных**: PostgreSQL - Для хранения метаданных о модпаках (версии, хеши файлов, данные пользователей и т.д.) 3. **Хранилище файлов**: minio (S3) - Для хранения самих файлов (модов, конфигураций и других данных). 4. **Контейнеризация и оркестрация**: Docker Compose - Для запуска микросервисов в контейнерах. 5. **Балансировка нагрузки**: NGINX - Для распределения запросов между микросервисами. 6. **Аутентификация и авторизация**: JWT (JSON Web Token) - Для безопасной аутентификации пользователей и межсервисной авторизации. --- ### Микросервисы: 1. **Сервис учётных записей ([Account Service](src/auth))**: - **Роль**: Хранит информацию о пользователях, таких как логин, пароль, роли и прочее. За генерацию и проверку токенов (JWT). - **База данных**: PostgreSQL. - **API**: - Генерация JWT для пользователей при успешной аутентификации. - Проверка токенов при запросах от других микросервисов. - Регистрация пользователей. - Аутентификация с использованием JWT. - Управление ролями пользователей. 2. **Сервис сборок ([Modpack Service](src/modpacks))**: - **Роль**: Управляет версиями модпаков, их метаданными (хеши файлов, версии). - **База данных**: PostgreSQL. - **API**: - Добавление/обновление/удаление модпаков. - Хранение информации о версиях модпаков. - Управление метаданными файлов (например, хеши). - Интеграция с S3 для загрузки/выгрузки файлов. - Получение информации о последней версии модпака (для получения данных о "latest"). 3. **Сервис хранения файлов (File Storage Service)**: - **Роль**: Отвечает за загрузку и выгрузку файлов (модов). - **Хранилище**: minio, S3 - **API**: - Загрузка файлов в S3. - Получение Pre-signed URL для скачивания файлов. - Управление метаданными файлов (например, оригинальные имена в метаданных). - Могут быть настроены **приватные файлы** для определённых пользователей или ролей. --- ### Взаимодействие микросервисов: - **Сервис учётных записей** предоставляет API для регистрации и аутентификации пользователей. Он генерирует **JWT**, который клиент использует для взаимодействия с другими сервисами. - **Сервис сборок** получает запросы от клиентов на получение списка доступных сборок, их версий, хешей файлов. Он может запросить **Auth Service** для проверки токенов. - **Сервис файлов** предоставляет API для загрузки и скачивания файлов через S3. Для скачивания он использует **Pre-signed URL**, и клиенты используют JWT для доступа к этим URL. - Все запросы между сервисами и с клиентами будут использовать **JWT** для аутентификации и авторизации. --- ### Архитектура и безопасность: 1. **JWT для аутентификации**: - Каждый запрос, который приходит от клиента или между микросервисами, будет включать **JWT** в запросе `token`. 2. **NGINX**: - Используется для балансировки нагрузки между микросервисами и контроля доступа. - Настроен для проксирования запросов к нужным сервисам и проверки наличия действительного токена в запросах. 3. **Docker Compose**: - Для оркестрации контейнеров и упрощения развертывания всех микросервисов в одном окружении. - Каждый сервис будет запущен в своем контейнере, и все контейнеры будут взаимодействовать между собой через сети, настроенные в Docker Compose. --- ### Резюме: - Микросервисы: **Сервис учётных записей** + **Сервис авторизации**, **Сервис сборок**, **Сервис файлов**. - Стек: **Python**, **PostgreSQL**, **S3**, **Docker Compose**, **NGINX**, **JWT**. - **Безопасность**: Все микросервисы используют **JWT** для аутентификации и авторизации. - **Архитектура**: **NGINX** для балансировки нагрузки и контроля доступа, **Docker Compose** для оркестрации контейнеров.