Files
quoter/docs/configuration.md
Untone 7746d1f38e
Some checks failed
CI / lint (push) Successful in 2m11s
Deploy / deploy (push) Has been skipped
CI / test (push) Failing after 9m6s
[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
- **Vercel интеграция**: Добавлена поддержка Vercel Edge API с CORS и оптимизированными заголовками
- **Redis graceful fallback**: Приложение теперь работает без Redis с предупреждениями вместо паники
- **Умная логика ответов**: Автоматическое определение Vercel запросов и оптимизированные заголовки
- **Консолидация документации**: Объединены 4 Vercel документа в один comprehensive guide

### 📝 Обновлено
- Консолидирована документация в практическую структуру:
  - Основной README.md с быстрым стартом
  - docs/SETUP.md для конфигурации и развертывания
  - Упрощенный features.md с фокусом на основную функциональность
  - docs/vercel-frontend-migration.md - единый comprehensive guide для Vercel интеграции
- Добавлен акцент на Vercel по всему коду и документации
- Обновлены URL patterns в документации: quoter.discours.io → files.dscrs.site

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

💋 **Упрощение**: KISS принцип применен - убрали избыточность, оставили суть.
2025-09-02 14:39:54 +03:00

6.1 KiB
Raw Blame History

Конфигурация

Переменные окружения

Quoter использует следующие переменные окружения для настройки:

Обязательные переменные

Переменная Описание Пример
REDIS_URL URL для подключения к Redis redis://localhost:6379
STORJ_ACCESS_KEY Ключ доступа к Storj S3 your-storj-access-key
STORJ_SECRET_KEY Секретный ключ Storj S3 your-storj-secret-key
AWS_ACCESS_KEY Ключ доступа к AWS S3 (fallback) your-aws-access-key
AWS_SECRET_KEY Секретный ключ AWS S3 (fallback) your-aws-secret-key
JWT_SECRET Секрет для валидации JWT токенов your-jwt-secret-key

Опциональные переменные

Переменная Описание По умолчанию
PORT Порт для запуска сервера 8080
STORJ_END_POINT Endpoint Storj S3 https://gateway.storjshare.io
STORJ_BUCKET_NAME Имя bucket в Storj discours-io
AWS_END_POINT Endpoint AWS S3 https://s3.amazonaws.com
RUST_LOG Уровень логирования info

Пример .env файла

# Redis (обязательно)
REDIS_URL=redis://localhost:6379

# JWT Authentication (обязательно)
JWT_SECRET=your-super-secret-jwt-key

# Storj S3 - основное хранилище (обязательно)
STORJ_ACCESS_KEY=your-storj-access-key
STORJ_SECRET_KEY=your-storj-secret-key
STORJ_END_POINT=https://gateway.storjshare.io
STORJ_BUCKET_NAME=discours-io

# AWS S3 - fallback хранилище (обязательно)
AWS_ACCESS_KEY=your-aws-access-key
AWS_SECRET_KEY=your-aws-secret-key
AWS_END_POINT=https://s3.amazonaws.com

# Server настройки
PORT=8080
RUST_LOG=info

# Security (опционально)
MAX_PAYLOAD_SIZE=524288000  # 500MB
MAX_PATH_LENGTH=1000
MAX_HEADERS_COUNT=50

Настройка Redis

Минимальная конфигурация Redis

# redis.conf
maxmemory 2gb
maxmemory-policy allkeys-lru
save 900 1
save 300 10
save 60 10000

Проверка подключения

redis-cli ping

Настройка S3

Storj S3

  1. Создайте аккаунт на Storj
  2. Создайте API ключи в консоли
  3. Создайте bucket для файлов
  4. Настройте CORS для bucket:
{
  "CORSRules": [
    {
      "AllowedOrigins": ["*"],
      "AllowedMethods": ["GET", "POST", "PUT", "DELETE"],
      "AllowedHeaders": ["*"],
      "ExposeHeaders": ["ETag"]
    }
  ]
}

AWS S3

  1. Создайте IAM пользователя с правами S3
  2. Создайте bucket для файлов
  3. Настройте CORS аналогично Storj

Логирование

Уровни логирования

  • error - только ошибки
  • warn - предупреждения и ошибки
  • info - информационные сообщения, предупреждения и ошибки
  • debug - отладочная информация
  • trace - максимальная детализация

Примеры

# Только ошибки
RUST_LOG=error cargo run

# Информационные сообщения
RUST_LOG=info cargo run

# Отладка
RUST_LOG=debug cargo run

Дополнительные настройки

Настройки безопасности

# Rate limiting (requests per window)
GENERAL_RATE_LIMIT=100          # Общие запросы: 100/мин
UPLOAD_RATE_LIMIT=10            # Загрузка: 10/5мин  
AUTH_RATE_LIMIT=20              # Аутентификация: 20/15мин

# Блокировка (секунды)
GENERAL_BLOCK_DURATION=300      # 5 минут
UPLOAD_BLOCK_DURATION=600       # 10 минут
AUTH_BLOCK_DURATION=1800        # 30 минут

Настройки квот

# Пользовательские квоты
MAX_USER_QUOTA_BYTES=12884901888    # 12 ГБ на пользователя
MAX_SINGLE_FILE_BYTES=524288000     # 500 МБ на файл

Vercel интеграция

# CORS для Vercel Edge Functions
ALLOWED_ORIGINS=https://discours.io,https://new.discours.io,https://vercel.app

# Health check endpoint
HEALTH_CHECK_ENABLED=true

Проверка конфигурации

Запустите сервер и проверьте логи:

RUST_LOG=info cargo run

Успешный запуск должен показать:

[INFO] Started
[INFO] Security config: max_payload=500 MB, upload_rate_limit=10/300s
[WARN] caching AWS filelist...
[WARN] cached 1234 files

Проверка endpoints

# User info (требует токен)
curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/

# Upload test (требует токен)
curl -X POST -H "Authorization: Bearer $TOKEN" \
     -F "file=@test.jpg" http://localhost:8080/

Проверка безопасности

# Rate limiting test
for i in {1..110}; do curl http://localhost:8080/ & done

# Должно показать 429 после 100 запросов

Troubleshooting

Частые проблемы

1. Redis connection failed

# Проверьте Redis
redis-cli ping
# Должно вернуть: PONG

2. S3 credentials invalid

# Проверьте доступ к Storj
aws s3 ls --endpoint-url=https://gateway.storjshare.io \
    --profile storj

# Проверьте доступ к AWS
aws s3 ls --profile aws

3. JWT validation failed

# Проверьте JWT_SECRET
echo $JWT_SECRET
# Должен быть установлен и совпадать с core API

4. Rate limiting не работает

# Проверьте Redis keys
redis-cli KEYS "rate_limit:*"
# Должны появляться ключи при запросах