Современное приложение для обмена сообщениями в реальном времени с поддержкой WebSocket соединений.
- Real-time messaging - мгновенный обмен сообщениями через WebSocket
- Аутентификация - JWT токены с refresh механизмом
- Групповые чаты - создание и участие в групповых беседах
- Уведомления о прочтении - статус доставки и прочтения сообщений
- Высокая производительность - оптимизированная архитектура
- Мониторинг - встроенная система мониторинга и алертов
- ✅ Connection Pooling - пул соединений для PostgreSQL
- ✅ Redis кэширование - кэширование часто запрашиваемых данных
- ✅ Rate Limiting - ограничение частоты запросов
- ✅ Async/await - полностью асинхронная архитектура
- ✅ Optimized WebSocket - оптимизированные WebSocket соединения
- ✅ Connection cleanup - автоматическая очистка мертвых соединений
- ✅ Retry Logic - повторные попытки для критических операций
- ✅ Health Checks - проверка состояния сервисов
- ✅ Error Handling - улучшенная обработка ошибок
- ✅ Graceful Shutdown - корректное завершение работы
- ✅ Database Transactions - транзакционная целостность
- ✅ Connection Validation - валидация соединений
- ✅ Password Validation - валидация сложности паролей
- ✅ Input Sanitization - санитизация пользовательского ввода
- ✅ Token Blacklisting - черный список токенов
- ✅ CORS Configuration - настройка CORS для продакшена
- ✅ Rate Limiting - защита от DDoS атак
- ✅ Secure Headers - безопасные HTTP заголовки
- ✅ Circuit Breaker - защита от каскадных сбоев
- ✅ Load Balancing Ready - готовность к балансировке нагрузки
- ✅ Monitoring & Alerts - мониторинг и алерты
- ✅ Graceful Degradation - постепенная деградация при сбоях
- ✅ Backup Strategies - стратегии резервного копирования
- Python 3.11+
- PostgreSQL 13+
- Redis 6+
- Docker (опционально)
git clone <repository-url>
cd messengercd src
poetry installcp example_env .env
# Отредактируйте .env файл с вашими настройками# Создайте базу данных PostgreSQL
createdb messenger
# Примените миграции
alembic upgrade head# Локально
redis-server
# Или через Docker
docker run -d -p 6379:6379 redis:7-alpine# Разработка
uvicorn main:app --reload --host 0.0.0.0 --port 8000
# Продакшен
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4# Основные настройки
ENVIRONMENT=local # local, test, production, showroom
SECRET=your-super-secret-key-here
SESSION_MIDDLEWARE_SECRET=your-session-secret
# База данных
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=postgres
POSTGRES_PASSWORD=password
POSTGRES_DB=messenger
# Redis
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=
REDIS_DB=0
# CORS
CORS_ALLOW_ORIGIN_LIST=http://localhost:3000,https://yourdomain.com
# Производительность
DB_POOL_SIZE=20
DB_MAX_OVERFLOW=30
REDIS_POOL_SIZE=10
WORKERS_COUNT=4
# Безопасность
PASSWORD_MIN_LENGTH=8
PASSWORD_MAX_LENGTH=128
RATE_LIMIT_ENABLED=true
RATE_LIMIT_REQUESTS_PER_MINUTE=60После запуска приложения документация доступна по адресам:
- Swagger UI: http://localhost:8000/api/swagger
- ReDoc: http://localhost:8000/api/redoc
- OpenAPI JSON: http://localhost:8000/api/openapi.json
ws://localhost:8000/ws/{chat_id}?token=Bearer {jwt_token}
{
"type": "new_message",
"data": "Текст сообщения"
}{
"type": "mark_as_read",
"message_id": 123
}Текущее покрытие тестами: 64%
# Запуск всех тестов
pytest
# Запуск с покрытием
pytest --cov=src --cov-report=term-missing
# Запуск с HTML отчетом
pytest --cov=src --cov-report=html
# Запуск только unit тестов
pytest -m unit
# Запуск только integration тестов
pytest -m integration
# Запуск тестов с детальным отчетом
pytest --cov=src --cov-report=term-missing --cov-report=html --cov-report=xmltests/
├── auth/ # Тесты аутентификации
│ └── test_integration/ # Интеграционные тесты
├── chat/ # Тесты чатов
│ └── test_integration/ # Интеграционные тесты
├── unit/ # Unit тесты
├── integration/ # Общие интеграционные тесты
├── websocket/ # WebSocket тесты
└── factories/ # Фабрики для тестовых данных
- Unit тесты - тестирование отдельных функций и классов
- Integration тесты - тестирование взаимодействия компонентов
- WebSocket тесты - тестирование real-time функциональности
- API тесты - тестирование HTTP эндпоинтов
# Установка зависимостей
poetry install
# Запуск тестов с покрытием
poetry run pytest --cov=src --cov-report=xml --cov-report=term-missing
# Проверка минимального покрытия (опционально)
poetry run pytest --cov=src --cov-fail-under=60Бейдж покрытия автоматически обновляется при каждом push в main ветку. Для ручного обновления:
-
Через shields.io (рекомендуется):
- Перейдите на https://shields.io/
- Выберите "Coverage" бейдж
- Укажите URL вашего репозитория
- Скопируйте URL бейджа и обновите в README
-
Через GitHub Actions (если настроен CI/CD):
- name: Generate coverage badge uses: schneegans/dynamic-badges-action@v1.6.0 with: auth: ${{ secrets.GIST_SECRET }} gistID: your-gist-id filename: coverage.json label: coverage message: ${{ steps.coverage.outputs.coverage }}% namedLogo: pytest color: brightgreen
curl http://localhost:8000/healthcurl http://localhost:8000/metricsdocker-compose up -dkubectl apply -f k8s/Приложение использует Loguru для логирования. Логи включают:
- HTTP запросы и ответы
- WebSocket соединения
- Ошибки и исключения
- Метрики производительности
# Профилирование памяти
python -m memory_profiler main.py
# Профилирование CPU
py-spy top -- python main.py- HTTP API: ~5000 RPS на одном ядре
- WebSocket: ~10000 одновременных соединений
- Latency: <50ms для 95% запросов
- Memory: ~100MB на 1000 активных соединений
- Connection pooling для БД
- Redis кэширование
- Асинхронная обработка
- Оптимизированные SQL запросы
- Сжатие WebSocket сообщений
- Используйте сильные секретные ключи
- Настройте HTTPS
- Ограничьте CORS origins
- Включите rate limiting
- Настройте мониторинг безопасности
- Регулярно обновляйте зависимости
- Fork репозитория
- Создайте feature branch
- Внесите изменения
- Добавьте тесты
- Создайте Pull Request
MIT License
- Issues: GitHub Issues
- Документация:
/api/swagger - Email: cooperative.entr@gmail.com
Версия: 1.0.0
Последнее обновление: 2024