Подтвердить что ты не робот

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

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

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

Я ищу:

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

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

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

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

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

4b9b3361

Ответ 1

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

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

    • Nginx

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

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

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

Ответ 2

Я использую Cherokee.

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

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

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

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

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

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

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

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

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

Ответ 6

Im использует 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, чтобы исправить это.

Ответ 7

Я тоже пытаюсь понять все варианты. В это сообщение в блоге Я нашел некоторые преимущества mod_wsgi по сравнению с mod_python.

Несколько сайтов с низким трафиком на небольшом VPS заставляют RAM потреблять основную проблему, а mod_python кажется неплохим вариантом. Используя lighttpd и FastCGI, мне удалось получить минимальное использование памяти на простом сайте Django до 58MiB виртуального и 6.5MiB-резидентного (после перезапуска и обслуживания одного запроса, не требующего RAM).

Я заметил, что обновление с Python 2.4 до 2.5 на Debian Etch увеличило минимальный объем памяти процессов Python на несколько процентов. С другой стороны, улучшенное управление памятью может иметь большее противоположное влияние на длительные процессы.

Ответ 9

На мой взгляд, лучший/самый быстрый стек - это лак-nginx-uwsgi-django. И я успешно использую его.

Ответ 10

Если вы используете lighthttpd, вы также можете использовать FastCGI для обслуживания Django. Я не уверен, как скорость сравнивается с mod_wsgi, но если память работает правильно, вы получаете пару преимуществ, которые вы получите с помощью mod_wsgi, которые вы не получите с mod_python. Главное, что вы можете предоставить каждому приложению свой собственный процесс (который действительно помогает хранить память разных приложений, а также использовать многоядерные компьютеры.

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

Ответ 11

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

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

Ответ 12

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

Привет

Ответ 13

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

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

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

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

Просто введите терминал

sudo /etc/init.d/apache2 restart

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