Update readme

This commit is contained in:
Maxim Khomutov 2025-03-27 17:09:58 +03:00
parent d30bd549c9
commit 3242224241

View File

@ -1 +1,81 @@
# server
# 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** для оркестрации контейнеров.