server/README.md
SantaSpeen f7686213c9 [+] archive
[!] Change mods
2025-03-27 19:10:22 +03:00

82 lines
6.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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