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