Самая чистая и быстрая настройка сервера для Django [закрыто]
Вопрос
Я собираюсь развернуть сайт среднего размера на базе Django.У меня есть выделенный сервер Ubuntu.
Я действительно не понимаю, какое серверное программное обеспечение использовать.Поэтому я подумал про себя:почему бы не спросить stackoverflow.
Я ищу:
- Легко настроить
- Быстро и легко с ресурсами
- Может обслуживать медиафайлы
- Возможность обслуживать несколько сайтов Django на одном сервере.
- Я бы предпочел не устанавливать PHP или что-то еще, что отнимает ресурсы и которые мне не нужны.
Я слышал о mod_wsgi и mod_python на Apache, nginx и Lighty.Каковы их плюсы и минусы, и я кого-то пропустил?
@Барри:Почему-то мне кажется, что Apache слишком раздут для меня.А как насчет альтернатив?
@BrianLy:Хорошо, я еще проверю mod_wsgi.Но зачем мне Apache, если я обслуживаю статические файлы с помощью Lighty?Мне также удалось обслужить само приложение Django с помощью Lighty.Это вообще плохо?Извините за такую глупость :-)
ОБНОВЛЯТЬ:А как насчет Lighty и Nginx — в каких случаях они являются идеальным выбором?
Решение
Поскольку я искал более глубокие ответы, я решил самостоятельно изучить этот вопрос.Пожалуйста, дайте мне знать, если я что-то неправильно понял.
Некоторые общие рекомендации — использовать отдельный веб-сервер для обработки мультимедиа.Под отдельным я подразумеваю веб-сервер, на котором не работает Django.Этот сервер может быть, например:
- Лайттпд (Лайти)
- Нгинкс (EngineX)
- Или какой-нибудь другой легкий сервер
Тогда для Django вы можете пойти разными путями.Вы также можете:
Подавать Джанго через Апач и:
mod_python
Это стабильный и рекомендуемый/хорошо документированный способ.Минусы:использует много памяти.
mod_wsgi
Насколько я понимаю, mod_wsgi — более новая альтернатива.Кажется, что это быстрее и проще с точки зрения ресурсов.
mod_fastcgi
При использовании FastCGI вы делегируете обслуживание Django другому процессу.Поскольку mod_python включает интерпретатор Python в каждый запрос, он использует много памяти.Это способ обойти эту проблему.Также есть некоторые проблемы с безопасностью.
Что вы делаете, так это запускаете сервер Django FastCGI в отдельном процессе, а затем настраиваете Apache посредством перезаписи для вызова этого процесса при необходимости.
Или вы можете:
Служить Джанго без использования Apache но с другим сервером, который изначально поддерживает FastCGI:
(В документации упоминается, что вы можете сделать это, если у вас нет особых потребностей Apache.Думаю, причина в экономии памяти.)
- Лайттпд
Это сервер, на котором работает Youtube.Кажется, он быстрый и простой в использовании, однако я видел сообщения об утечках памяти.
- nginx
Я видел тесты, в которых утверждалось, что этот сервер даже быстрее, чем Lighttpd.Хотя в основном это документировано на русском языке.
Еще одна вещь: из-за ограничений Python ваш сервер должен работать в разветвленном режиме, а не в многопоточном.
Это мое текущее исследование, но мне нужно больше мнений и опыта.
Другие советы
я использую Чероки.
В соответствии с их ориентиры (с ними недоверчиво), он справляется с нагрузкой лучше, чем Lighttpd и nginx...Но я использую его не поэтому.
Я использую его, потому что если вы наберете cherokee-admin
, он запускает новый сервер, на который вы можете войти (с одноразовым паролем) и настроить весь сервер через красиво сделанный вебмин.Это убийственная особенность.Это уже спасло меня много времени.И это экономит моему серверу много ресурсов!
Что касается django, я запускаю его как многопоточный процесс SCGI.Работает хорошо.Cherokee тоже может поддерживать его в рабочем состоянии.Опять же, очень приятная функция.
Текущая версия репозитория Ubuntu очень старая, поэтому я бы посоветовал вам использовать их PPA.Удачи.
Как сказал @Barry, в документации используется mod_python.Я не использовал Ubuntu в качестве сервера, но имел хороший опыт работы с mod_wsgi в Solaris.Вы можете найти документацию для mod_wsgi и Джанго на mod_wsgi сайт.
Краткий обзор ваших требований:
- Легко настроить Я обнаружил, что Apache 2.2 довольно легко собрать и установить.
- Быстро и легко с ресурсами Я бы сказал, что это зависит от вашего использования и трафика.* Возможно, вы не захотите хранить все файлы с помощью Apache и использовать ЛайтТПД (светлый) для статических файлов сервера.
- Может обслуживать медиафайлы Я полагаю, вы имеете в виду изображения, флеш-файлы?Апач может это сделать.
- Несколько сайтов на одном сервере Хостинг виртуальных серверов на Apache.
- Лучше не устанавливать другие расширения Закомментируйте все, что вам не нужно в конфигурации Apache.
Официально рекомендуемый способ развертывания проекта django — использовать mod_python с apache.Это описано в документация. Главным плюсом этого является то, что это наиболее документированный, наиболее поддерживаемый и наиболее распространенный способ развертывания.Минус в том, что он, вероятно, не самый быстрый.
Думаю, лучшая конфигурация не так уж и известна.Но вот:
- Используйте nginx для обслуживания запросов (динамических к приложению, статического контента напрямую).
- Используйте веб-сервер Python для обслуживания динамического контента.
Два наиболее быстрых решения для веб-сервера на базе Python:
Вам нужно заглянуть в Google, чтобы найти лучшую текущую конфигурацию для django (все еще в разработке).
Я использую nginx (0.6.32 взято у Сида) с mod_wsgi.Он работает очень хорошо, хотя я не могу сказать, лучше ли он альтернатив, потому что я никогда их не пробовал.У Nginx есть кэширование памяти встроенная поддержка, которая, возможно, может взаимодействовать с промежуточным программным обеспечением кэширования Django (на самом деле я его не использую, вместо этого я заполняю кеш вручную с помощью python-memcache и аннулирую его при внесении изменений), поэтому попадания в кеш полностью обходят Django (моя разработка машина может обслуживать около 3000 запросов в секунду).
Предостережение:nginx’ mod_wsgi
крайне не любит именованные локации (пытается передать их в SCRIPT_NAME
), поэтому очевидное:error_page 404 = @django
’ вызовет множество неясных ошибок.Чтобы это исправить, мне пришлось исправить исходный код mod_wsgi.
Я тоже пытаюсь понять все варианты.В этот пост в блоге Я обнаружил некоторые преимущества mod_wsgi по сравнению с объясненным mod_python.
Несколько сайтов с низким трафиком на небольшом VPS делают потребление оперативной памяти основной проблемой, и mod_python кажется здесь плохим вариантом.Используя Lighttpd и FastCGI, мне удалось снизить минимальное использование памяти простого сайта Django до 58 МБ виртуального и 6,5 МБ резидентного (после перезапуска и обслуживания одного запроса, не требующего большого объема оперативной памяти).
Я заметил, что обновление Debian Etch с Python 2.4 до 2.5 увеличило минимальный объем памяти, занимаемый процессами Python, на несколько процентов.С другой стороны, лучшее управление памятью в версии 2.5 может иметь более сильный противоположный эффект на длительные процессы.
Будь проще: Django рекомендует Apache и mod_wsgi (или mod_python)..Если обслуживание медиафайлов является важной частью вашего сервиса, рассмотрите возможность использования Amazon S3 или Rackspace CloudFiles.
На мой взгляд, лучший/самый быстрый стек — это лак-nginx-uwsgi-django.И я успешно этим пользуюсь.
Если вы используете Lighthttpd, вы также можете использовать FastCGI для обслуживания Django.Я не уверен, насколько скорость сравнима с mod_wsgi, но если память работает правильно, вы получите пару преимуществ, которые вы получите с mod_wsgi, но не получите с mod_python.Главный из них заключается в том, что вы можете предоставить каждому приложению собственный процесс (что действительно полезно для разделения памяти разных приложений, а также для использования преимуществ многоядерных компьютеров.
Редактировать:Просто добавлю к вашему обновлению о nginix: если память снова работает правильно, nginix использует «гринлеты» для управления параллелизмом.Это означает, что вам, возможно, придется быть немного осторожнее, чтобы одно приложение не съедало все время сервера.
Мы используем nginx и FastCGI для всех наших развертываний Django.В основном это связано с тем, что мы обычно развертываемся на Slicehost и не хотим жертвовать всю нашу память Apache.Я думаю, это будет наш «сценарий использования».
Что касается замечаний о том, что документация в основном на русском языке, то большую часть информации я нашел на Английская вики быть очень полезным и точным.На этом сайте также есть примеры конфигураций для Django, из которых вы можете настроить свою собственную конфигурацию nginx.
Есть много способов сделать это. По этой причине я рекомендую внимательно прочитать статью, посвященную процессу развертывания на DjangoAdvent.com:Эрик Флорензано - Развертывание Django с помощью FastCGI: http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ Читайте также:Майк Мэлоун - Блог Django StochasticteChnologies:Идеальная установка Django Mikkel Hoegh Blog:35 % Улучшение времени отклика при переключении-uwsgi-nginx
С уважением
У меня есть предупреждение за использование Cherokee.Когда вы вносите изменения в Django Cherokee, он поддерживает СТАРЫЙ процесс, вместо того, чтобы убивать его и запускать новый.
Об Apache я настоятельно рекомендую эту статью.
http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl
Его легко настроить, легко закрыть или сбросить после внесения изменений.
Просто введите терминал
sudo /etc/init.d/apache2 restart
и изменения видны мгновенно.