261 lines
7.4 KiB
Markdown
261 lines
7.4 KiB
Markdown
# 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.
|
||
|