|
|
||
|---|---|---|
| .. | ||
| middleware | ||
| routes | ||
| utils | ||
| .dockerignore | ||
| .gitignore | ||
| DOCKER.md | ||
| DOCKER_QUICK.txt | ||
| Dockerfile | ||
| INSTALL.md | ||
| MIGRATION.md | ||
| QUICKSTART.md | ||
| README.md | ||
| RUN_THIS.sh | ||
| START_HERE.md | ||
| config.py | ||
| database.py | ||
| docker-compose.moderation-py.yml | ||
| docker-start.sh | ||
| main.py | ||
| middleware.py | ||
| models.py | ||
| requirements.txt | ||
| run.py | ||
| start.sh | ||
| test_email.py | ||
| websocket_server.py | ||
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- Отправить код на emailPOST /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:
- Остановите Node.js бэкенд модерации
- Запустите Python версию на том же порту (3001)
- Фронтенд будет работать без изменений (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 не отправляется
-
Проверьте переменные в
.env:grep YANDEX_SMTP ../../.env -
Убедитесь, что используете пароль приложения Yandex
-
Проверьте логи при запуске - должно быть:
[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 для инструкций по развертыванию.