Самая чистая и быстрая настройка сервера для Django [закрыто]

StackOverflow https://stackoverflow.com/questions/26025

  •  09-06-2019
  •  | 
  •  

Вопрос

Я собираюсь развернуть сайт среднего размера на базе 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.Это описано в документация. Главным плюсом этого является то, что это наиболее документированный, наиболее поддерживаемый и наиболее распространенный способ развертывания.Минус в том, что он, вероятно, не самый быстрый.

Думаю, лучшая конфигурация не так уж и известна.Но вот:

  1. Используйте nginx для обслуживания запросов (динамических к приложению, статического контента напрямую).
  2. Используйте веб-сервер 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

и изменения видны мгновенно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top