nakama/README.md

193 lines
4.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.

# 🎨 Nakama
Социальная сеть для фурри и аниме сообщества, реализованная как Telegram Mini App.
## 🚀 Возможности
- 📝 Создание постов с текстом и изображениями (до 5 шт)
- 🔍 Поиск контента через e621 и Gelbooru API
- 💬 Комментарии и лайки
- 👥 Подписки на пользователей
- 🔔 Система уведомлений
- 🛡️ Модерация контента
- 🗂️ Фильтры и теги (Furry, Anime, Other, NSFW)
- 🌙 Темная/светлая тема
- 📱 Fullview для изображений
- 🗄️ MinIO для хранения медиа
## 🛠️ Технологии
**Frontend:**
- React + Vite
- React Router
- Telegram Mini App SDK
- Lucide Icons
**Backend:**
- Node.js + Express
- MongoDB
- Socket.IO (WebSocket)
- MinIO (S3-compatible storage)
- Redis (опционально)
## 📦 Установка
### 1. Клонируйте репозиторий
```bash
git clone <your-repo>
cd nakama
```
### 2. Настройте переменные окружения
```bash
cp ENV_EXAMPLE.txt .env
nano .env
```
Заполните обязательные поля:
```env
# Telegram Bot
TELEGRAM_BOT_TOKEN=ваш_токен_от_BotFather
# MongoDB (удаленный сервер)
MONGODB_URI=mongodb://103.80.87.247:27017/nakama
# JWT секреты (сгенерируйте случайные строки)
JWT_ACCESS_SECRET=ваш_секретный_ключ_32_символа
JWT_REFRESH_SECRET=другой_секретный_ключ_32_символа
# MinIO
MINIO_ENABLED=true
MINIO_ENDPOINT=103.80.87.247
MINIO_PORT=9000
MINIO_ACCESS_KEY=ваш_access_key
MINIO_SECRET_KEY=ваш_secret_key
MINIO_PUBLIC_BUCKET=true
# Frontend
FRONTEND_URL=https://ваш-домен.com
CORS_ORIGIN=https://ваш-домен.com,https://web.telegram.org
```
### 3. Запустите через Docker
```bash
docker-compose up -d
```
### 4. Настройте MinIO (один раз)
```bash
chmod +x minio-setup-public.sh
./minio-setup-public.sh
```
## 🔧 Разработка
```bash
# Backend
cd backend
npm install
npm run dev
# Frontend
cd frontend
npm install
npm run dev
```
## 📝 Структура
```
nakama/
├── backend/ # Node.js API
│ ├── models/ # MongoDB модели
│ ├── routes/ # API роуты
│ ├── middleware/ # Middleware
│ ├── utils/ # Утилиты
│ └── bot.js # Telegram бот
├── frontend/ # React приложение
│ ├── src/
│ │ ├── pages/ # Страницы
│ │ ├── components/ # Компоненты
│ │ └── utils/ # Утилиты
├── moderation/ # Система модерации
│ ├── frontend/ # React админка
│ └── backend/ # Доп. API роуты
└── docker-compose.yml
```
## 🐛 Логи
```bash
# Все логи
docker-compose logs -f
# Только backend
docker-compose logs -f backend
# Ошибки
docker-compose logs | grep ERROR
```
Логи также сохраняются в `backend/logs/`:
- `all-YYYY-MM-DD.log` - все логи
- `error-YYYY-MM-DD.log` - только ошибки
- `security-YYYY-MM-DD.log` - события безопасности
## 🔒 Безопасность
- JWT авторизация
- Валидация Telegram initData
- Rate limiting
- XSS/NoSQL injection защита
- Helmet security headers
- CORS настройки
## 📱 Telegram Bot
Создайте бота через @BotFather:
1. `/newbot` - создать бота
2. `/setmenubutton` - добавить кнопку запуска Mini App
3. Скопируйте токен в `.env`
## 🗄️ MinIO
Для хранения загруженных изображений используется MinIO (S3-compatible).
**Важно:**
- Порт 9000 - API (для загрузки файлов)
- Порт 9001 - Console (веб-интерфейс)
- Bucket должен быть публичным для доступа к файлам
## 📊 Мониторинг
```bash
# Статус контейнеров
docker-compose ps
# Использование ресурсов
docker stats
# Логи MinIO
docker-compose logs minio
```
## 🚀 Production
1. Настройте HTTPS (обязательно для Telegram Mini App!)
2. Измените `JWT_ACCESS_SECRET` и `JWT_REFRESH_SECRET`
3. Настройте firewall
4. Настройте Nginx reverse proxy
5. Включите автоматические бекапы MongoDB
## 📄 Лицензия
MIT
## 👥 Поддержка
Telegram: @NakamaReportbot