2025-11-21 01:14:56 +00:00
|
|
|
|
# 🎨 Nakama
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Социальная сеть для фурри и аниме сообщества, реализованная как Telegram Mini App.
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🚀 Возможности
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
- 📝 Создание постов с текстом и изображениями (до 5 шт)
|
|
|
|
|
|
- 🔍 Поиск контента через e621 и Gelbooru API
|
|
|
|
|
|
- 💬 Комментарии и лайки
|
|
|
|
|
|
- 👥 Подписки на пользователей
|
|
|
|
|
|
- 🔔 Система уведомлений
|
|
|
|
|
|
- 🛡️ Модерация контента
|
|
|
|
|
|
- 🗂️ Фильтры и теги (Furry, Anime, Other, NSFW)
|
|
|
|
|
|
- 🌙 Темная/светлая тема
|
|
|
|
|
|
- 📱 Fullview для изображений
|
|
|
|
|
|
- 🗄️ MinIO для хранения медиа
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🛠️ Технологии
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
**Frontend:**
|
|
|
|
|
|
- React + Vite
|
|
|
|
|
|
- React Router
|
|
|
|
|
|
- Telegram Mini App SDK
|
|
|
|
|
|
- Lucide Icons
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
**Backend:**
|
|
|
|
|
|
- Node.js + Express
|
|
|
|
|
|
- MongoDB
|
|
|
|
|
|
- Socket.IO (WebSocket)
|
|
|
|
|
|
- MinIO (S3-compatible storage)
|
|
|
|
|
|
- Redis (опционально)
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 📦 Установка
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
### 1. Клонируйте репозиторий
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```bash
|
|
|
|
|
|
git clone <your-repo>
|
|
|
|
|
|
cd nakama
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
### 2. Настройте переменные окружения
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```bash
|
|
|
|
|
|
cp ENV_EXAMPLE.txt .env
|
|
|
|
|
|
nano .env
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Заполните обязательные поля:
|
|
|
|
|
|
```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
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
### 3. Запустите через Docker
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-11-21 01:14:56 +00:00
|
|
|
|
docker-compose up -d
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
### 4. Настройте MinIO (один раз)
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
|
|
|
|
|
```bash
|
2025-11-21 01:14:56 +00:00
|
|
|
|
chmod +x minio-setup-public.sh
|
|
|
|
|
|
./minio-setup-public.sh
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🔧 Разработка
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```bash
|
|
|
|
|
|
# Backend
|
|
|
|
|
|
cd backend
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
# Frontend
|
|
|
|
|
|
cd frontend
|
|
|
|
|
|
npm install
|
|
|
|
|
|
npm run dev
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 📝 Структура
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```
|
|
|
|
|
|
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
|
|
|
|
|
|
```
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🐛 Логи
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```bash
|
|
|
|
|
|
# Все логи
|
|
|
|
|
|
docker-compose logs -f
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
# Только backend
|
|
|
|
|
|
docker-compose logs -f backend
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
# Ошибки
|
|
|
|
|
|
docker-compose logs | grep ERROR
|
2025-11-03 20:35:01 +00:00
|
|
|
|
```
|
|
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Логи также сохраняются в `backend/logs/`:
|
|
|
|
|
|
- `all-YYYY-MM-DD.log` - все логи
|
|
|
|
|
|
- `error-YYYY-MM-DD.log` - только ошибки
|
|
|
|
|
|
- `security-YYYY-MM-DD.log` - события безопасности
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🔒 Безопасность
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
- JWT авторизация
|
|
|
|
|
|
- Валидация Telegram initData
|
|
|
|
|
|
- Rate limiting
|
|
|
|
|
|
- XSS/NoSQL injection защита
|
|
|
|
|
|
- Helmet security headers
|
|
|
|
|
|
- CORS настройки
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 📱 Telegram Bot
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Создайте бота через @BotFather:
|
|
|
|
|
|
1. `/newbot` - создать бота
|
|
|
|
|
|
2. `/setmenubutton` - добавить кнопку запуска Mini App
|
|
|
|
|
|
3. Скопируйте токен в `.env`
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🗄️ MinIO
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Для хранения загруженных изображений используется MinIO (S3-compatible).
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
**Важно:**
|
|
|
|
|
|
- Порт 9000 - API (для загрузки файлов)
|
|
|
|
|
|
- Порт 9001 - Console (веб-интерфейс)
|
|
|
|
|
|
- Bucket должен быть публичным для доступа к файлам
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 📊 Мониторинг
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
```bash
|
|
|
|
|
|
# Статус контейнеров
|
|
|
|
|
|
docker-compose ps
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
# Использование ресурсов
|
|
|
|
|
|
docker stats
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
# Логи MinIO
|
|
|
|
|
|
docker-compose logs minio
|
|
|
|
|
|
```
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 🚀 Production
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
1. Настройте HTTPS (обязательно для Telegram Mini App!)
|
|
|
|
|
|
2. Измените `JWT_ACCESS_SECRET` и `JWT_REFRESH_SECRET`
|
|
|
|
|
|
3. Настройте firewall
|
|
|
|
|
|
4. Настройте Nginx reverse proxy
|
|
|
|
|
|
5. Включите автоматические бекапы MongoDB
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 📄 Лицензия
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
MIT
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
## 👥 Поддержка
|
2025-11-03 20:35:01 +00:00
|
|
|
|
|
2025-11-21 01:14:56 +00:00
|
|
|
|
Telegram: @NakamaReportbot
|