nakama/MINIO_MIGRATION_SUMMARY.md

348 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ✅ 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` для подробной документации!