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

Я собираюсь развернуть сайт среднего размера, работающий на Django. У меня есть выделенный сервер Ubuntu.

Я действительно смущен тем, какие serversoftware использовать. Поэтому я подумал: почему бы не спросить stackoverflow.

то, что я ищу-это:

  • простота установки
  • быстрый и легкий на ресурсы
  • может служить mediafiles
  • возможность обслуживать несколько djangosites на одном сервере
  • Я бы предпочел не устанавливать PHP или что-то еще, что сосет ресурсы, и для которых я не использую.

Я слышал о mod_wsgi и mod_python на Apache, nginx и lighty. Какие из них плюсы и минусы, и я пропустил кого-то?

@Barry: почему-то я чувствую, что Apache для меня раздут. Как насчет альтернатив?

@BrianLy: хорошо, я проверю mod_wsgi еще немного. Но зачем мне нужен Apache, если я обслуживаю статические файлы с Лайти? Мне также удалось обслуживать само приложение django с lighty. Это плохо в любом случае? Извините за то что так глупо :-)

обновление: как насчет lighty и nginx-какие случаи использования, когда это идеальный выбор?

13 ответов


Так как я искал более глубокие ответы, я решил исследовать этот вопрос сам в глубине. Пожалуйста, дайте мне знать, если я что-то неправильно понял.

некоторые общие рекомендации использовать отдельный веб-сервер для обработки информации. Отдельно, я имею в виду веб-сервер, который не работает в Django. Этот сервер может быть например:

  • Lighttpd (Lighty)
  • Nginx (EngineX)
  • или какой-то другой легкий вес сервер

затем, для Django, вы можете пойти по разным путям. Вы можете либо:

  • служить Django через Apache и:

    • модулем mod_python

      это стабильный и рекомендуемый / хорошо документированный способ. Минусы: использует много памяти.

    • mod_wsgi

      из того, что я понимаю, mod_wsgi является более новой альтернативой. Кажется быстрее и проще с ресурсами.

    • модуль mod_fastcgi веб

      при использовании FastCGI вы делегируете обслуживание Django другому процессу. Поскольку mod_python включает интерпретатор python в каждый запрос, он использует много памяти. Это способ обойти эту проблему. Также есть некоторые проблемы безопасности.

      вы запускаете свой сервер Django FastCGI в отдельном процессе, а затем настраиваете apache через перезаписи на назвать этот процесс, когда это необходимо.

или:

  • Служить Django без использования Apache но с другим сервером, который поддерживает FastCGI изначально:

    (в документации упоминается, что вы можете сделать это, если у вас нет каких-либо конкретных потребностей Apache. Думаю, причина в том, чтобы сохранить память.)

    • Lighttpd

    Это сервер, который запускает Youtube. Он кажется быстрым и простым в использовании, однако я видел отчеты о memoryleaks.

    • nginx и

    Я видел тесты, утверждающие, что этот сервер даже быстрее, чем lighttpd. В основном документально на русском языке.

другое дело, из-за ограничений в Python ваш сервер должен работать в раздвоенном режиме, а не в потоковом.

Итак, это мое текущее исследование, но я хочу больше мнений и опыты.


Я использую Чероки.

по данным их критерии (зерно соли с ними), он обрабатывает нагрузку лучше, чем Lighttpd и nginx... Но я использую его не для этого.

Я использую его, потому что если вы типа cherokee-admin, он запускает новый сервер, в который вы можете войти (с одноразовым паролем) и настроить весь сервер через красиво сделанный webmin. Это убийственная особенность. Это уже спасло меня много времени. И это экономит мой сервер много ресурсов!

Что касается django, я запускаю его как потоковый процесс SCGI. Хорошо работать. Чероки тоже может его поддерживать. Опять же, очень хорошая функция.

текущая версия РЕПО Ubuntu очень старая, поэтому я бы посоветовал вам использовать их PPA. Удача.


Как сказал @Barry, документация использует модулем mod_python. Я не использовал Ubuntu в качестве сервера, но имел хороший опыт работы с mod_wsgi на Solaris. Вы можете найти документацию для mod_wsgi и Django на mod_wsgi сайт.

быстрый обзор ваших требований:

  • простота установки я нашел apache 2.2 довольно простым в сборке и установке.
  • быстрый и легкий на ресурсы Я бы сказал, что это зависит от вашего использования и движения. * Вы можете не захотеть сервер все файлы с помощью Apache и использовать LightTPD (lighty) для статических файлов сервера.
  • может служить медиа-файлы Я полагаю, вы имеете в виду изображения, флэш-файлы? Apache может это сделать.
  • несколько сайтов на одном сервере виртуальный сервер хостинга на Apache.
  • лучше не устанавливать другие расширения закомментировать все, что вы не хотите в конфигурации Apache.

официально рекомендуемый способ развертывания проекта django-использовать mod_python с apache. Это описано в документация. основной pro с этим является то, что это лучший документированный, наиболее поддерживаемый и наиболее распространенный способ развертывания. Афера в том, что это, вероятно, не самый быстрый.


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

  1. используйте nginx для обслуживания запросов (динамическое приложение, статическое содержимое напрямую).
  2. используйте веб-сервер python для обслуживания динамического контента.

два самых быстрых решения для веб-сервера на основе python:

вам нужно заглянуть в google, чтобы найти текущий лучший конфигурация для django (все еще в разработке).


Я использую nginx и (0.6.32 взяты из Sid) С mod_wsgi. Это работает очень хорошо, хотя я не могу сказать, лучше ли это, чем альтернативы, потому что я никогда не пробовал. Nginx имеет memcached встроенная поддержка, которая, возможно, может взаимодействовать с промежуточным программным обеспечением кэширования 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 до 58mib virtual и 6.5 MiB resident (после перезапуска и обслуживания одного non-RAM-тяжелый запрос).

Я заметил, что обновление с Python 2.4 до 2.5 в Debian Etch увеличило минимальный объем памяти процессов 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. Главное, что вы можете дать каждому приложению свой собственный процесс (Что действительно полезно для хранения памяти разных приложений, а также для использования многоядерных компьютеров.

Edit: Просто чтобы добавить в отношении вашего обновления о nginix, если память снова работает правильно, nginix использует "greenlets" для обработки параллелизма. Это означает, что вам может потребоваться быть немного более осторожным, чтобы убедиться, что одно приложение не съедает все время сервера.


мы используем nginx и FastCGI для всех наших развертываний Django. Это в основном потому, что мы обычно развертываемся в Slicehost и не хотим жертвовать всю нашу память Apache. Думаю, это будет наш "прецедент".

Что касается замечаний о документации в основном на русском языке-я нашел большую часть информации о английский wiki быть очень полезным и точным. На этом сайте также есть примеры конфигураций для Django, из которых вы можете настроить собственные конфигурации nginx.


есть много способов, подход, чтобы сделать это.По этой причине я рекомендую внимательно прочитать статью, связанную с процессом развертывания DjangoAdvent.com: Эрик Флоренцано-развертывание Django с FastCGI:http://djangoadvent.com/1.2/deploying-django-site-using-fastcgi/ Тоже читал : Mike Malone-Масштабирование Django Блог Stochastictechnologies: идеальная настройка Django Mikkel Hoegh Blog: 35 % отклик-время-улучшение-переключение-uwsgi-nginx

в отношении


У меня есть предупреждение за использование Cherokee. Когда вы вносите изменения в Django Cherokee поддерживает старый процесс, вместо того, чтобы убивать его и начинать новый.

на Apache я настоятельно рекомендую эту статью.

http://www.djangofoo.com/17/django-mod_wsgi-deploy-exampl

его легко настроить, легко убить или сбросить после внесения изменений.

просто введите terminal

sudo /etc/init.d/apache2 restart

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