# ✅ MinIO интеграция завершена! ## 🎉 Что было сделано ### 1. Добавлен MinIO клиент - ✅ Установлен пакет `minio` в package.json - ✅ Создана утилита `/backend/utils/minio.js` с полным API - ✅ Поддержка загрузки, удаления, получения URL файлов ### 2. Создан универсальный middleware загрузки - ✅ `/backend/middleware/upload.js` - автоматически выбирает MinIO или локальное хранилище - ✅ Поддержка изображений и видео - ✅ Валидация типов файлов - ✅ Автоматическая очистка при ошибках ### 3. Обновлены роуты - ✅ `/backend/routes/posts.js` - использует новый middleware - ✅ `/backend/routes/modApp.js` - публикация в канал через MinIO - ✅ Fallback на локальное хранилище если MinIO недоступен ### 4. Обновлена конфигурация - ✅ `/backend/config/index.js` - добавлены MinIO настройки - ✅ `/backend/server.js` - автоматическая инициализация MinIO - ✅ `docker-compose.yml` - добавлен MinIO сервис ### 5. Создана документация - ✅ `MINIO_SETUP.md` - полное руководство по настройке - ✅ `ENV_EXAMPLE.txt` - пример конфигурации - ✅ Инструкции по миграции существующих файлов --- ## 🚀 Быстрый старт ### Шаг 1: Установите зависимости ```bash cd /Users/glpshchn/Desktop/nakama npm install ``` ### Шаг 2: Обновите .env файл ```bash nano .env ``` Добавьте MinIO настройки: ```env # MinIO Configuration MINIO_ENABLED=true MINIO_ENDPOINT=minio MINIO_PORT=9000 MINIO_USE_SSL=false MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=your_secure_password_here MINIO_BUCKET=nakama-media ``` ### Шаг 3: Запустите Docker ```bash docker-compose down docker-compose build docker-compose up -d ``` ### Шаг 4: Проверьте MinIO Откройте в браузере: - **MinIO Console:** http://localhost:9001 - **Логин:** minioadmin / your_secure_password_here ### Шаг 5: Создайте тестовый пост Создайте пост с изображением в приложении. Файл автоматически загрузится в MinIO! Проверьте в MinIO Console: - Object Browser → nakama-media → posts/ --- ## 📊 Варианты использования ### Вариант 1: MinIO в Docker (для начала) **Преимущества:** - ✅ Быстрая настройка - ✅ Всё в одном месте - ✅ Удобно для разработки **Настройка:** ```env MINIO_ENABLED=true MINIO_ENDPOINT=minio # Имя сервиса в Docker MINIO_PORT=9000 ``` --- ### Вариант 2: MinIO на отдельном сервере (рекомендуется) **Преимущества:** - ✅ Централизованное хранилище - ✅ Легко масштабировать - ✅ Независимость от основного сервера **Настройка:** ```bash # На сервере 103.80.87.247 установите MinIO # (см. MINIO_SETUP.md раздел "Отдельный сервер") # В .env приложения: MINIO_ENABLED=true MINIO_ENDPOINT=103.80.87.247 MINIO_PORT=9000 MINIO_USE_SSL=false MINIO_ACCESS_KEY=nakama_app MINIO_SECRET_KEY=secure_key_here MINIO_BUCKET=nakama-media ``` --- ### Вариант 3: MinIO + CDN (для продакшена) **Преимущества:** - ✅ Максимальная производительность - ✅ Глобальное кэширование - ✅ Экономия трафика **Настройка:** ```env MINIO_ENABLED=true MINIO_ENDPOINT=103.80.87.247 MINIO_PORT=9000 MINIO_USE_SSL=true MINIO_ACCESS_KEY=nakama_app MINIO_SECRET_KEY=secure_key_here MINIO_BUCKET=nakama-media MINIO_PUBLIC_URL=https://cdn.yourdomain.com ``` --- ## 🔄 Миграция существующих файлов Если у вас уже есть файлы в `backend/uploads/`: ```bash # Установите MinIO Client wget https://dl.min.io/client/mc/release/linux-amd64/mc chmod +x mc # Настройте подключение ./mc alias set myminio http://localhost:9000 minioadmin your_password # Синхронизируйте файлы ./mc mirror backend/uploads/posts myminio/nakama-media/posts/ ./mc mirror backend/uploads/avatars myminio/nakama-media/avatars/ # Проверьте ./mc ls myminio/nakama-media/ ``` --- ## 🎯 Как это работает ### До (локальное хранилище): ``` Пользователь загружает фото ↓ Multer сохраняет в backend/uploads/ ↓ URL: /uploads/posts/12345.jpg ``` ### После (с MinIO): ``` Пользователь загружает фото ↓ Multer → buffer в памяти ↓ MinIO middleware загружает в S3 ↓ URL: http://minio:9000/nakama-media/posts/12345.jpg ``` ### Fallback (если MinIO недоступен): ``` Пользователь загружает фото ↓ Multer → buffer в памяти ↓ MinIO недоступен → fallback ↓ Сохранение в backend/uploads/ ↓ URL: /uploads/posts/12345.jpg ``` --- ## 🛡️ Безопасность ### Важно изменить для продакшена: ```env # ❌ НЕ используйте в продакшене: MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin # ✅ Используйте: MINIO_ACCESS_KEY=nakama_app_$(openssl rand -hex 8) MINIO_SECRET_KEY=$(openssl rand -hex 32) ``` ### Настройка HTTPS: ```bash # На сервере MinIO: mkdir -p ~/.minio/certs cp cert.pem ~/.minio/certs/public.crt cp key.pem ~/.minio/certs/private.key systemctl restart minio ``` ```env # В .env: MINIO_USE_SSL=true ``` --- ## 📊 Мониторинг ### Проверить подключение: ```bash # В логах backend: docker-compose logs backend | grep -i minio # Должны увидеть: # ✅ MinIO подключен: minio:9000 # Bucket: nakama-media ``` ### Веб-консоль MinIO: 1. Откройте: http://localhost:9001 2. Мониторинг → Metrics 3. Просмотр файлов: Object Browser → nakama-media ### Статистика через API: ```javascript // В коде backend: const { getBucketStats } = require('./utils/minio'); const stats = await getBucketStats(); console.log(stats); // { // totalFiles: 1234, // totalSize: 52428800, // totalSizeMB: "50.00", // bucket: "nakama-media" // } ``` --- ## 🔧 Устранение проблем ### Проблема: "MinIO недоступен" ```bash # Проверьте статус контейнера docker-compose ps minio # Проверьте логи docker-compose logs minio # Перезапустите docker-compose restart minio ``` ### Проблема: "Bucket не найден" ```bash # Войдите в MinIO Console http://localhost:9001 # Object Browser → Create Bucket # Имя: nakama-media ``` ### Проблема: "Access Denied" Проверьте credentials в .env: ```bash docker-compose logs backend | grep MINIO ``` --- ## 📝 Структура файлов в MinIO ``` nakama-media/ ← Bucket ├── posts/ ← Посты пользователей │ ├── 1700000000-123.jpg │ ├── 1700000001-456.png │ └── ... ├── avatars/ ← Аватары (будущее) │ └── ... └── channel/ ← Публикации в канал ├── 1700000002-789.jpg └── ... ``` --- ## 🎉 Готово! Теперь все медиа файлы автоматически сохраняются в MinIO! **Что дальше:** 1. Прочитайте `MINIO_SETUP.md` для детальной настройки 2. Измените стандартные credentials 3. Настройте HTTPS для продакшена 4. Настройте резервное копирование 5. Рассмотрите использование CDN --- ## 📚 Полезные ссылки - **MinIO Documentation:** https://min.io/docs/minio/linux/index.html - **MinIO Client (mc):** https://min.io/docs/minio/linux/reference/minio-mc.html - **S3 API Reference:** https://docs.aws.amazon.com/s3/ --- **Вопросы?** Смотрите `MINIO_SETUP.md` для подробной документации!