nakama/moderation/backend-py
glpshchn f5645ba27d Update files 2025-12-15 07:49:53 +03:00
..
routes Update files 2025-12-15 07:49:53 +03:00
telegram_middleware Update files 2025-12-15 03:06:31 +03:00
utils Update files 2025-12-15 04:55:04 +03:00
.dockerignore Update files 2025-12-15 02:45:41 +03:00
.gitignore Update files 2025-12-15 02:45:41 +03:00
DOCKER.md Update files 2025-12-15 02:45:41 +03:00
DOCKER_QUICK.txt Update files 2025-12-15 02:45:41 +03:00
Dockerfile Update files 2025-12-15 04:16:04 +03:00
INSTALL.md Update files 2025-12-15 02:45:41 +03:00
MIGRATION.md Update files 2025-12-15 02:45:41 +03:00
QUICKSTART.md Update files 2025-12-15 02:45:41 +03:00
README.md Update files 2025-12-15 02:45:41 +03:00
RUN_THIS.sh Update files 2025-12-15 02:45:41 +03:00
START_HERE.md Update files 2025-12-15 02:45:41 +03:00
config.py Update files 2025-12-15 03:47:02 +03:00
database.py Update files 2025-12-15 07:38:30 +03:00
docker-compose.moderation-py.yml Update files 2025-12-15 02:45:41 +03:00
docker-start.sh Update files 2025-12-15 02:51:27 +03:00
main.py Update files 2025-12-15 06:40:42 +03:00
middleware.py Update files 2025-12-15 02:45:41 +03:00
models.py Update files 2025-12-15 03:37:34 +03:00
requirements.txt Update files 2025-12-15 02:45:41 +03:00
run.py Update files 2025-12-15 02:45:41 +03:00
start.sh Update files 2025-12-15 02:45:41 +03:00
test_email.py Update files 2025-12-15 02:45:41 +03:00
websocket_server.py Update files 2025-12-15 07:38:30 +03:00

README.md

Nakama Moderation Backend - Python

Бэкенд модерации на Python с FastAPI, портированный с Node.js.

Преимущества Python версии

  • Лучшая работа с email - нативная поддержка SMTP без проблем с AWS SDK
  • Простота настройки - меньше зависимостей и конфликтов
  • Производительность - async/await с uvicorn
  • Типизация - Pydantic для валидации данных
  • Совместимость - использует ту же MongoDB и те же данные

Установка

1. Установите Python 3.11+

python3 --version  # Должно быть >= 3.11

2. Создайте виртуальное окружение

cd moderation/backend-py
python3 -m venv venv
source venv/bin/activate  # Linux/Mac
# или
venv\Scripts\activate  # Windows

3. Установите зависимости

pip install -r requirements.txt

4. Настройте .env

Используется корневой .env файл проекта (в nakama/.env).

Обязательные переменные для email:

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 режим

cd moderation/backend-py
source venv/bin/activate
python main.py

Или через uvicorn с auto-reload:

uvicorn main:app --reload --host 0.0.0.0 --port 3001

Production режим

uvicorn main:app --host 0.0.0.0 --port 3001 --workers 4

Docker

# Сборка
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 -c "from config import settings; print(f'Email: {settings.EMAIL_PROVIDER}, User: {settings.YANDEX_SMTP_USER}')"

Проверка MongoDB подключения

python -c "import asyncio; from database import connect_db; asyncio.run(connect_db())"

Логи

Все логи выводятся в stdout с префиксами:

  • [Email] - email операции
  • [ModerationAuth] - аутентификация
  • [ModApp] - модерация
  • [WebSocket] - WebSocket события

Troubleshooting

Email не отправляется

  1. Проверьте переменные в .env:

    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 для инструкций по развертыванию.