nakama/SETUP.md

261 lines
7.4 KiB
Markdown
Raw Normal View History

2025-11-03 20:35:01 +00:00
# NakamaSpace - Инструкция по установке и запуску
## 📋 Требования
- Node.js 16+ и npm
- MongoDB 5+
- Telegram Bot Token (получить у [@BotFather](https://t.me/BotFather))
## 🚀 Установка
### 1. Установить зависимости
```bash
# Установка зависимостей backend
npm install
# Установка зависимостей frontend
cd frontend
npm install
cd ..
```
### 2. Настроить переменные окружения
Создайте файл `.env` в корне проекта:
```bash
cp .env.example .env
```
Отредактируйте `.env`:
```
MONGODB_URI=mongodb://localhost:27017/nakama
PORT=3000
JWT_SECRET=your_secret_key_here
TELEGRAM_BOT_TOKEN=your_bot_token_here
NODE_ENV=development
```
Создайте файл `frontend/.env`:
```bash
cp frontend/.env.example frontend/.env
```
### 3. Запустить MongoDB
```bash
# macOS с Homebrew
brew services start mongodb-community
# Linux
sudo systemctl start mongod
# Или запустите вручную
mongod --dbpath /path/to/data/directory
```
### 4. Создать Telegram бота
1. Откройте [@BotFather](https://t.me/BotFather) в Telegram
2. Отправьте `/newbot` и следуйте инструкциям
3. Получите токен бота и добавьте в `.env`
4. Настройте Web App:
- `/mybots` → выберите бота → Bot Settings → Menu Button
- Укажите URL вашего приложения
## 🏃 Запуск приложения
### Режим разработки
```bash
# Запустить backend и frontend одновременно
npm run dev
# Или запустить по отдельности:
# Backend (http://localhost:3000)
npm run server
# Frontend (http://localhost:5173)
npm run client
```
### Production
```bash
# Собрать frontend
npm run build
# Запустить production сервер
npm start
```
## 🔧 Настройка Telegram Mini App
### Локальная разработка
Для тестирования локально:
1. Используйте ngrok или подобный туннель:
```bash
ngrok http 5173
```
2. Скопируйте HTTPS URL от ngrok
3. Настройте Menu Button в BotFather с этим URL
### Production деплой
Рекомендуемые платформы:
- **Backend**: Railway, Render, Heroku
- **Frontend**: Vercel, Netlify
- **MongoDB**: MongoDB Atlas
Пример деплоя на Railway:
```bash
# Установить Railway CLI
npm i -g @railway/cli
# Войти
railway login
# Создать проект
railway init
# Деплой
railway up
```
## 📱 Тестирование
1. Откройте бота в Telegram
2. Нажмите на кнопку меню или отправьте команду
3. Приложение откроется как Mini App
## 🛠️ Структура проекта
```
nakama/
├── backend/ # Backend сервер
│ ├── models/ # MongoDB модели
│ ├── routes/ # API endpoints
│ ├── middleware/ # Middleware (auth, etc)
│ └── server.js # Точка входа
├── frontend/ # Frontend React приложение
│ ├── src/
│ │ ├── components/ # React компоненты
│ │ ├── pages/ # Страницы-вкладки
│ │ ├── utils/ # Утилиты (API, Telegram)
│ │ └── styles/ # CSS стили
│ └── index.html
└── package.json
```
## 🎨 Дизайн-система
Проект использует минималистичный iOS-стиль с палитрой:
- **Фон**: #F2F3F5
- **Карточки**: #FFFFFF
- **Текст**: #1C1C1E
- **Furry теги**: #FF8A33
- **Anime теги**: #4A90E2
- **Other теги**: #A0A0A0
## 🔐 Модерация
Для назначения модераторов/админов:
```javascript
// Подключиться к MongoDB
mongo nakama
// Обновить роль пользователя
db.users.updateOne(
{ telegramId: "YOUR_TELEGRAM_ID" },
{ $set: { role: "admin" } }
)
```
Роли:
- `user` - обычный пользователь
- `moderator` - может модерировать контент
- `admin` - полные права
## 📚 API Документация
### Основные endpoints:
#### Авторизация
- `POST /api/auth/verify` - Верификация Telegram Init Data
#### Посты
- `GET /api/posts` - Получить ленту постов
- `POST /api/posts` - Создать пост
- `POST /api/posts/:id/like` - Лайкнуть пост
- `POST /api/posts/:id/comment` - Добавить комментарий
- `POST /api/posts/:id/repost` - Репостнуть
- `DELETE /api/posts/:id` - Удалить пост
#### Пользователи
- `GET /api/users/:id` - Получить профиль
- `GET /api/users/:id/posts` - Получить посты пользователя
- `POST /api/users/:id/follow` - Подписаться/отписаться
- `PUT /api/users/profile` - Обновить профиль
- `GET /api/users/search/:query` - Поиск пользователей
#### Уведомления
- `GET /api/notifications` - Получить уведомления
- `PUT /api/notifications/:id/read` - Отметить как прочитанное
- `PUT /api/notifications/read-all` - Прочитать все
#### Поиск
- `GET /api/search/furry?query=tags` - Поиск в e621
- `GET /api/search/anime?query=tags` - Поиск в gelbooru
- `GET /api/search/furry/tags?query=tag` - Автокомплит тегов e621
- `GET /api/search/anime/tags?query=tag` - Автокомплит тегов gelbooru
- `GET /api/search/proxy/:encodedUrl` - Проксирование изображений с e621/gelbooru (для доступа из РФ)
#### Модерация
- `POST /api/moderation/report` - Создать жалобу
- `GET /api/moderation/reports` - Получить жалобы (модераторы)
- `PUT /api/moderation/reports/:id` - Обработать жалобу
- `PUT /api/moderation/posts/:id/nsfw` - Установить NSFW флаг
- `PUT /api/moderation/users/:id/ban` - Заблокировать пользователя
## ⚠️ Troubleshooting
### MongoDB не подключается
```bash
# Проверить статус
brew services list # macOS
sudo systemctl status mongod # Linux
# Проверить порт
lsof -i :27017
```
### CORS ошибки
Убедитесь что `VITE_API_URL` в `frontend/.env` указывает на правильный адрес backend
### Telegram Init Data invalid
В dev режиме проверка отключена, но для production нужен валидный `TELEGRAM_BOT_TOKEN`
## 📞 Поддержка
Если возникли проблемы:
1. Проверьте логи: `npm run server`
2. Откройте DevTools в браузере
3. Проверьте MongoDB подключение
4. Убедитесь что все переменные окружения установлены
## 🎉 Готово!
Приложение должно работать! Откройте бота в Telegram и начните использовать NakamaSpace.