Appearance
Storage
Назначение
Сервис файлового хранения платформы. RESTful API для загрузки, скачивания, списка и удаления файлов. Управляет физическим хранением (локальный диск или S3/MinIO) и метаданными в PostgreSQL.
Порты
| Порт | Назначение |
|---|---|
| 8096 | HTTP REST API |
| 9010 | MinIO API (dev) |
| 9011 | MinIO Console (dev) |
- БД:
storage_db
Ключевые возможности
- Два бэкенда хранения: локальный диск (
./storage/category/year/month/) или S3/MinIO - 6 категорий файлов:
avatars,spaceIcons,documents,commands,commandIcons,runnerArtifact - Публичные файлы:
avatars,spaceIcons,runnerArtifact(без аутентификации) - Приватные файлы: проверка владельца через
app-user-idheader - Service-to-service доступ через
SERVICE_TOKEN(обход проверки владельца) - Presigned URLs для S3 (срок действия 1 час)
- Санитизация имён файлов (удаление
.., пробелов,/) - Пагинация (
offset/limit, max 1000), фильтрация (ids[],category), сортировка (created_at/updated_at/size) - Swagger UI
Структура БД (таблица files)
| Колонка | Тип | Описание |
|---|---|---|
id | CHAR(36) PK | UUID |
owner_id | CHAR(36) | Владелец (indexed) |
file_name | VARCHAR(255) | Имя в хранилище |
original_name | VARCHAR(255) | Оригинальное имя |
mime_type | VARCHAR(100) | MIME-тип |
size | BIGINT | Размер в байтах |
category | VARCHAR(50) | Категория (indexed) |
storage_path | VARCHAR(512) | Путь в хранилище |
storage_type | VARCHAR(50) | local или s3 |
Конфигурация
| Переменная | По умолчанию | Описание |
|---|---|---|
PORT | 8096 | Порт сервера |
DB_* | — | PostgreSQL |
STORAGE_TYPE (env: LOCATION_TYPE) | local | Бэкенд: local или s3 |
STORAGE_PATH (env: LOCATION_PATH) | ./storage | Локальный путь |
STORAGE_BUCKET (env: LOCATION_BUCKET) | — | S3 bucket (обязателен для s3) |
STORAGE_REGION (env: LOCATION_REGION) | us-east-1 | AWS регион |
STORAGE_ENDPOINT (env: LOCATION_ENDPOINT) | — | S3 endpoint (для MinIO) |
STORAGE_ACCESS_KEY (env: LOCATION_ACCESS_KEY) | — | AWS ключ |
STORAGE_SECRET_KEY (env: LOCATION_SECRET_KEY) | — | AWS секрет |
STORAGE_MAX_SIZE (env: LOCATION_MAX_SIZE) | 1073741824 (1GB) | Макс. размер |
SERVICE_TOKEN | — | Токен межсервисного взаимодействия |
JWT_SECRET | — | Аутентификация |