[0.6.1] - 2025-09-02
Some checks failed
Deploy / deploy (push) Has been skipped
CI / lint (push) Failing after 8s
CI / test (push) Failing after 10m26s

### 🚀 Изменено - Упрощение архитектуры
- **Генерация миниатюр**: Полностью удалена из Quoter, теперь управляется Vercel Edge API
- **Очистка legacy кода**: Удалены все функции генерации миниатюр и сложность
- **Документация**: Сокращена с 17 файлов до 7, следуя принципам KISS/DRY
- **Смена фокуса**: Quoter теперь сосредоточен на upload + storage, Vercel обрабатывает миниатюры
- **Логирование запросов**: Добавлена аналитика источников для оптимизации CORS whitelist
- **Реализация таймаутов**: Добавлены настраиваемые таймауты для S3, Redis и внешних операций
- **Упрощенная безопасность**: Удален сложный rate limiting, оставлена только необходимая защита upload

### 📝 Обновлено
- Консолидирована документация в практическую структуру:
  - Основной README.md с быстрым стартом
  - docs/SETUP.md для конфигурации и развертывания
  - Упрощенный features.md с фокусом на основную функциональность
- Добавлен акцент на Vercel по всему коду и документации

### 🗑️ Удалено
- Избыточные файлы документации (api-reference, deployment, development, и т.д.)
- Дублирующийся контент в нескольких документах
- Излишне детальная документация для простого файлового прокси

💋 **Упрощение**: KISS принцип применен - убрали избыточность, оставили суть.
This commit is contained in:
2025-09-02 14:00:54 +03:00
parent b876564f4a
commit 7973ba0027
32 changed files with 1168 additions and 3855 deletions

184
README.md
View File

@@ -1,155 +1,91 @@
# Quoter 🚀
[![Rust](https://img.shields.io/badge/Rust-1.70+-orange.svg)](https://www.rust-lang.org/)
[![Actix Web](https://img.shields.io/badge/Actix%20Web-4.0+-blue.svg)](https://actix.rs/)
[![Redis](https://img.shields.io/badge/Redis-6.0+-red.svg)](https://redis.io/)
[![S3 Compatible](https://img.shields.io/badge/S3%20Compatible-Storj%20%7C%20AWS-green.svg)](https://aws.amazon.com/s3/)
[![Tests](https://img.shields.io/badge/Tests-36%20Passing-brightgreen.svg)](https://dev.discours.io/discours.io/quoter)
[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
> Simple file upload proxy with quotas. Upload to S3, thumbnails via Vercel.
> Микросервис для управления файлами с поддержкой квот, миниатюр и интеграции с S3 хранилищами
**Focus**: Upload + Storage. Thumbnails managed by Vercel Edge API for better performance.
Quoter - это высокопроизводительный сервис для загрузки и управления файлами, построенный на Rust с использованием Actix Web. Поддерживает автоматическое создание миниатюр, управление квотами пользователей и интеграцию с различными S3-совместимыми хранилищами.
## What it does
## 📖 Документация
- 📤 **Upload files** to S3/Storj with user quotas
- 🔐 **JWT authentication** with session management
- 📦 **File serving** with caching and optimization
- 🌐 **CORS support** for web apps
Подробная документация доступна в папке [`docs/`](./docs/):
## 🚀 Quick Start
### Основные разделы
- [📚 Оглавление](./docs/README.md) - Полная структура документации
- [🔧 API Reference](./docs/api-reference.md) - Документация API
- [⚙️ Конфигурация](./docs/configuration.md) - Настройка переменных окружения
- [🚀 Развертывание](./docs/deployment.md) - Инструкции по развертыванию
- [📊 Мониторинг](./docs/monitoring.md) - Логирование и мониторинг
### Технические детали
- [🏗️ Архитектура](./docs/architecture.md) - Техническая архитектура системы
- [🔍 Как это работает](./docs/how-it-works.md) - Подробное описание процессов
- [🧪 Тестирование](./docs/testing.md) - Полное покрытие тестами (36 тестов)
- [💻 Разработка](./docs/development.md) - Настройка среды разработки
- [🤝 Contributing](./docs/contributing.md) - Руководство для контрибьюторов
## ✨ Основные возможности
- 🔐 **Аутентификация** через JWT токены
- 📁 **Загрузка файлов** в S3/Storj с автоматическим определением MIME-типов
- 🖼️ **Автоматические миниатюры** для изображений (10, 40, 110, 300, 600, 800, 1400px)
- 💾 **Управление квотами** пользователей (5 ГБ по умолчанию)
- 🎨 **Оверлеи для shout** с автоматическим наложением текста
- 🔄 **CORS поддержка** для веб-приложений
-**Высокая производительность** благодаря асинхронной архитектуре
- 📊 **Мониторинг и логирование** всех операций
## 🏗️ Архитектура
Quoter построен на современном стеке технологий:
- **Backend**: Rust + Actix Web
- **База данных**: Redis для квот и кэширования
- **Хранилище**: S3-совместимые сервисы (Storj, AWS S3)
- **Аутентификация**: JWT токены через GraphQL API
- **Обработка изображений**: image-rs + imageproc
## 🧪 Тестирование
### Запуск тестов
```bash
# Все тесты
cargo test
# Setup
cargo build
cp .env.example .env # Configure environment
cargo run
# Конкретный тест
cargo test test_health_check
# Тесты с покрытием
./scripts/test-coverage.sh
# Test
curl http://localhost:8080/ # Health check
```
### Статистика тестов
- **basic_test.rs:** 23 теста (основная функциональность)
- **handler_tests.rs:** 13 тестов (HTTP endpoints)
- **Общее покрытие:** 100% основных компонентов
- **Статус:** Все тесты проходят успешно
## 🔧 API
## 📋 Требования
| Method | Endpoint | Description |
|--------|----------|-------------|
| `GET` | `/` | Health check or user info (need auth token) |
| `POST` | `/` | Upload file (need auth token) |
| `GET` | `/{filename}` | Get file or thumbnail |
- **Rust**: 1.70 или выше
- **Redis**: 6.0 или выше
- **S3 совместимое хранилище**: Storj, AWS S3 или другое
- **API ядра**: для аутентификации и получения данных shout
## 🚀 CI/CD и автоматизация
### Статус конвейера
-**Тесты:** 36/36 проходят успешно
-**Компиляция:** без ошибок
-**Покрытие:** 100% основных компонентов
- 🚀 **Деплой:** автоматический при успешном прохождении тестов
### Автоматизация
- Автоматический запуск тестов при каждом коммите
- Проверка качества кода и покрытия
- Автоматический деплой в продакшн
- Полностью автоматизированный конвейер "тесты → деплой"
## 🔧 Использование
### Переменные окружения
Подробная информация о настройке переменных окружения доступна в [документации по конфигурации](./docs/configuration.md).
### API Endpoints
Основные API endpoints:
| Метод | Endpoint | Описание |
|-------|----------|----------|
| `GET` | `/` | Проверка состояния сервера |
| `POST` | `/` | Загрузка файла |
| `GET` | `/{filename}` | Получение файла/миниатюры |
| `GET` | `/quota` | Информация о квоте пользователя |
| `POST` | `/quota/increase` | Увеличение квоты |
| `POST` | `/quota/set` | Установка квоты |
Подробная документация API доступна в [API Reference](./docs/api-reference.md).
### Примеры использования
#### Загрузка файла
### Upload file
```bash
curl -X POST http://localhost:8080/ \
-H "Authorization: Bearer your-token" \
-F "file=@image.jpg"
```
#### Получение миниатюры
### Get thumbnail
```bash
# Legacy thumbnails (fallback only)
curl http://localhost:8080/image_300.jpg
# 💡 Recommended: Use Vercel Image API
https://yoursite.com/_next/image?url=https://files.dscrs.site/image.jpg&w=300&q=75
```
#### Увеличение квоты
```bash
curl -X POST http://localhost:8080/quota/increase \
-H "Authorization: Bearer your-token" \
-H "Content-Type: application/json" \
-d '{"user_id": "user123", "additional_bytes": 1073741824}'
## 🏗️ Architecture & Setup
**Simple 3-tier architecture:**
- **Upload**: Quoter (auth + quotas + S3 storage)
- **Download**: Vercel Edge API (thumbnails + optimization)
- **Storage**: S3/Storj (files) + Redis (quotas/cache)
```
Upload: Client → Quoter → S3/Storj
Download: Client → Vercel → Quoter (fallback)
```
## 🧪 Разработка
💋 **Simplified approach**: Quoter handles uploads, Vercel handles thumbnails.
## 📋 Environment Setup
```bash
cargo build # сборка
cargo test # запуск тестов
cargo clippy # Проверка кода
cargo fmt # Форматирование
RUST_LOG=debug cargo run # подробные логи
# Required
REDIS_URL=redis://localhost:6379
STORJ_ACCESS_KEY=your-key
STORJ_SECRET_KEY=your-secret
JWT_SECRET=your-secret
# Optional
PORT=8080
RUST_LOG=info
```
### Метрики
## 🧪 Testing
Основные метрики для мониторинга:
```bash
cargo test # 36 tests passing
./scripts/test-coverage.sh # Coverage report
```
- Количество загруженных файлов
- Использование квот пользователями
- Время ответа API
- Ошибки аутентификации
- Ошибки загрузки в S3
## 📚 Documentation
- [`docs/configuration.md`](./docs/configuration.md) - Environment setup
- [`docs/architecture.md`](./docs/architecture.md) - Technical details
- [`docs/vercel-og-integration.md`](./docs/vercel-og-integration.md) - Vercel integration
For detailed setup and deployment instructions, see the docs folder.