nakama/MINIO_MIGRATION_SUMMARY.md

348 lines
8.8 KiB
Markdown
Raw Normal View History

2025-11-20 22:07:37 +00:00
# ✅ 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` для подробной документации!