[0.6.1] - 2025-09-02
### 🚀 Изменено - Упрощение архитектуры - **Генерация миниатюр**: Полностью удалена из 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:
184
README.md
184
README.md
@@ -1,155 +1,91 @@
|
||||
# Quoter 🚀
|
||||
|
||||
[](https://www.rust-lang.org/)
|
||||
[](https://actix.rs/)
|
||||
[](https://redis.io/)
|
||||
[](https://aws.amazon.com/s3/)
|
||||
[](https://dev.discours.io/discours.io/quoter)
|
||||
[](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.
|
||||
Reference in New Issue
Block a user