209 lines
6.3 KiB
Markdown
209 lines
6.3 KiB
Markdown
# Nakama Moderation Backend - Python
|
||
|
||
Бэкенд модерации на Python с FastAPI, портированный с Node.js.
|
||
|
||
## Преимущества Python версии
|
||
|
||
- ✅ **Лучшая работа с email** - нативная поддержка SMTP без проблем с AWS SDK
|
||
- ✅ **Простота настройки** - меньше зависимостей и конфликтов
|
||
- ✅ **Производительность** - async/await с uvicorn
|
||
- ✅ **Типизация** - Pydantic для валидации данных
|
||
- ✅ **Совместимость** - использует ту же MongoDB и те же данные
|
||
|
||
## Установка
|
||
|
||
### 1. Установите Python 3.11+
|
||
|
||
```bash
|
||
python3 --version # Должно быть >= 3.11
|
||
```
|
||
|
||
### 2. Создайте виртуальное окружение
|
||
|
||
```bash
|
||
cd moderation/backend-py
|
||
python3 -m venv venv
|
||
source venv/bin/activate # Linux/Mac
|
||
# или
|
||
venv\Scripts\activate # Windows
|
||
```
|
||
|
||
### 3. Установите зависимости
|
||
|
||
```bash
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 4. Настройте .env
|
||
|
||
Используется корневой `.env` файл проекта (в `nakama/.env`).
|
||
|
||
Обязательные переменные для email:
|
||
|
||
```env
|
||
EMAIL_PROVIDER=yandex
|
||
|
||
YANDEX_SMTP_HOST=smtp.yandex.ru
|
||
YANDEX_SMTP_PORT=465
|
||
YANDEX_SMTP_SECURE=true
|
||
YANDEX_SMTP_USER=ваш_email@yandex.ru
|
||
YANDEX_SMTP_PASSWORD=ваш_пароль_приложения
|
||
|
||
EMAIL_FROM=noreply@nakama.guru
|
||
OWNER_EMAIL=admin@example.com
|
||
```
|
||
|
||
**Важно:** Для Yandex используйте пароль приложения (https://id.yandex.ru/security), не основной пароль!
|
||
|
||
## Запуск
|
||
|
||
### Development режим
|
||
|
||
```bash
|
||
cd moderation/backend-py
|
||
source venv/bin/activate
|
||
python main.py
|
||
```
|
||
|
||
Или через uvicorn с auto-reload:
|
||
|
||
```bash
|
||
uvicorn main:app --reload --host 0.0.0.0 --port 3001
|
||
```
|
||
|
||
### Production режим
|
||
|
||
```bash
|
||
uvicorn main:app --host 0.0.0.0 --port 3001 --workers 4
|
||
```
|
||
|
||
### Docker
|
||
|
||
```bash
|
||
# Сборка
|
||
docker build -t nakama-moderation-py -f moderation/backend-py/Dockerfile moderation/backend-py
|
||
|
||
# Запуск
|
||
docker run -d \
|
||
--name nakama-moderation-py \
|
||
-p 3001:3001 \
|
||
--env-file ../../.env \
|
||
nakama-moderation-py
|
||
```
|
||
|
||
## API Endpoints
|
||
|
||
### Authentication (`/api/moderation-auth`)
|
||
|
||
- `POST /send-code` - Отправить код на email
|
||
- `POST /register` - Регистрация с кодом
|
||
- `POST /login` - Вход по email/паролю
|
||
- `POST /telegram-widget` - Вход через Telegram виджет
|
||
- `POST /logout` - Выход
|
||
- `GET /config` - Получить конфигурацию
|
||
- `GET /me` - Текущий пользователь
|
||
|
||
### Moderation (`/api/mod-app`)
|
||
|
||
- `GET /users` - Список пользователей
|
||
- `PUT /users/{id}/ban` - Забанить пользователя
|
||
- `GET /posts` - Список постов
|
||
- `GET /posts/{id}` - Получить пост
|
||
- `PUT /posts/{id}` - Обновить пост
|
||
- `DELETE /posts/{id}` - Удалить пост
|
||
- `GET /reports` - Список репортов
|
||
- `PUT /reports/{id}` - Обновить статус репорта
|
||
- `GET /admins` - Список админов
|
||
- `POST /auth/verify` - Верификация авторизации
|
||
|
||
### WebSocket (`/socket.io`)
|
||
|
||
- `join_moderation_chat` - Присоединиться к чату
|
||
- `leave_moderation_chat` - Покинуть чат
|
||
- `moderation_message` - Отправить сообщение
|
||
- `typing` - Индикатор печати
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
moderation/backend-py/
|
||
├── main.py # Главный файл приложения
|
||
├── config.py # Конфигурация
|
||
├── database.py # MongoDB подключение
|
||
├── models.py # Pydantic модели
|
||
├── middleware.py # Middleware (logging, security)
|
||
├── websocket_server.py # WebSocket сервер
|
||
├── requirements.txt # Python зависимости
|
||
├── Dockerfile # Docker образ
|
||
├── routes/
|
||
│ ├── __init__.py
|
||
│ ├── mod_app.py # Роуты модерации
|
||
│ └── moderation_auth.py # Роуты аутентификации
|
||
└── utils/
|
||
├── __init__.py
|
||
├── auth.py # JWT и авторизация
|
||
├── email_service.py # Отправка email
|
||
└── minio_client.py # MinIO клиент
|
||
```
|
||
|
||
## Миграция с Node.js
|
||
|
||
Для переключения с Node.js версии на Python:
|
||
|
||
1. Остановите Node.js бэкенд модерации
|
||
2. Запустите Python версию на том же порту (3001)
|
||
3. Фронтенд будет работать без изменений (API совместимо)
|
||
|
||
## Отладка
|
||
|
||
### Проверка email настроек
|
||
|
||
```python
|
||
python -c "from config import settings; print(f'Email: {settings.EMAIL_PROVIDER}, User: {settings.YANDEX_SMTP_USER}')"
|
||
```
|
||
|
||
### Проверка MongoDB подключения
|
||
|
||
```python
|
||
python -c "import asyncio; from database import connect_db; asyncio.run(connect_db())"
|
||
```
|
||
|
||
### Логи
|
||
|
||
Все логи выводятся в stdout с префиксами:
|
||
- `[Email]` - email операции
|
||
- `[ModerationAuth]` - аутентификация
|
||
- `[ModApp]` - модерация
|
||
- `[WebSocket]` - WebSocket события
|
||
|
||
## Troubleshooting
|
||
|
||
### Email не отправляется
|
||
|
||
1. Проверьте переменные в `.env`:
|
||
```bash
|
||
grep YANDEX_SMTP ../../.env
|
||
```
|
||
|
||
2. Убедитесь, что используете пароль приложения Yandex
|
||
|
||
3. Проверьте логи при запуске - должно быть:
|
||
```
|
||
[Email] Настройка SMTP: {provider: 'yandex', host: 'smtp.yandex.ru', ...}
|
||
```
|
||
|
||
### 401 Unauthorized
|
||
|
||
Проверьте JWT токены в cookies или Authorization header.
|
||
|
||
### WebSocket не подключается
|
||
|
||
Убедитесь, что фронтенд подключается к правильному URL:
|
||
- Development: `http://localhost:3001`
|
||
- Production: ваш домен с правильным портом
|
||
|
||
## Production Deployment
|
||
|
||
См. `moderation/DEPLOY.md` для инструкций по развертыванию.
|
||
|