nakama/moderation/backend-py/README.md

209 lines
6.3 KiB
Markdown
Raw Normal View History

2025-12-14 23:45:41 +00:00
# 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` для инструкций по развертыванию.