Ответ
Команда manage.py runserver
запускает легковесный сервер, предназначенный исключительно для разработки и отладки. Использовать его в продакшене небезопасно и неэффективно по нескольким причинам:
-
Низкая производительность. Сервер является однопоточным и может обрабатывать только один запрос за раз. Под реальной нагрузкой он быстро станет узким местом и не сможет обслуживать конкурентных пользователей.
-
Отсутствие аудита безопасности. Он не проходил тщательного тестирования на уязвимости, в отличие от промышленных серверов (Gunicorn, uWSGI), и не имеет встроенных механизмов защиты от многих видов атак.
-
Неэффективная обработка статики. Встроенный сервер не предназначен для раздачи статических файлов (CSS, JS, изображения). В продакшене эту задачу должен выполнять специализированный веб-сервер, например, Nginx, который делает это гораздо быстрее.
Правильный стек для продакшена:
Обычно используется связка из веб-сервера (Nginx) и WSGI/ASGI-сервера (Gunicorn, uWSGI).
- Nginx принимает входящие HTTP-запросы и отдает статику.
- Gunicorn запускает несколько рабочих процессов вашего Django-приложения и обрабатывает динамические запросы, переданные от Nginx.
Пример запуска с Gunicorn:
# Установка WSGI-сервера
pip install gunicorn
# Запуск 4 рабочих процессов для обслуживания приложения
# myproject.wsgi - это путь к WSGI-файлу вашего проекта
gunicorn --workers 4 myproject.wsgi:application