193 lines
4.8 KiB
Markdown
193 lines
4.8 KiB
Markdown
# 🎨 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
|