|
|
||
|---|---|---|
| backend | ||
| frontend | ||
| moderation/frontend | ||
| .dockerignore | ||
| .gitignore | ||
| DEPLOY.md | ||
| Dockerfile.backend | ||
| Dockerfile.frontend | ||
| Dockerfile.moderation | ||
| ENV_EXAMPLE.txt | ||
| FIX_MONGODB.md | ||
| LICENSE | ||
| MINIO_403_FIX.md | ||
| MINIO_NGINX_SETUP.md | ||
| README.md | ||
| backup-cron.sh | ||
| check-post-creation.md | ||
| docker-compose.yml | ||
| fix-docker-error.sh | ||
| fix-minio-public.sh | ||
| minio-public-policy.json | ||
| minio-setup-public.sh | ||
| nginx-minio.conf | ||
| nginx-moderation.conf | ||
| nginx.conf | ||
| package.json | ||
| setup-minio-nginx.sh | ||
| setup-remote-storage.sh | ||
| start.sh | ||
| update-server.sh | ||
README.md
🎨 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. Клонируйте репозиторий
git clone <your-repo>
cd nakama
2. Настройте переменные окружения
cp ENV_EXAMPLE.txt .env
nano .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
docker-compose up -d
4. Настройте MinIO (один раз)
chmod +x minio-setup-public.sh
./minio-setup-public.sh
🔧 Разработка
# 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
🐛 Логи
# Все логи
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:
/newbot- создать бота/setmenubutton- добавить кнопку запуска Mini App- Скопируйте токен в
.env
🗄️ MinIO
Для хранения загруженных изображений используется MinIO (S3-compatible).
Важно:
- Порт 9000 - API (для загрузки файлов)
- Порт 9001 - Console (веб-интерфейс)
- Bucket должен быть публичным для доступа к файлам
📊 Мониторинг
# Статус контейнеров
docker-compose ps
# Использование ресурсов
docker stats
# Логи MinIO
docker-compose logs minio
🚀 Production
- Настройте HTTPS (обязательно для Telegram Mini App!)
- Измените
JWT_ACCESS_SECRETиJWT_REFRESH_SECRET - Настройте firewall
- Настройте Nginx reverse proxy
- Включите автоматические бекапы MongoDB
📄 Лицензия
MIT
👥 Поддержка
Telegram: @NakamaReportbot