Сведения о вопросе

rjevskii

14:11, 27th August, 2020

Теги

python   django   apache   hosting    

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

Просмотров: 637   Ответов: 13

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

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

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

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

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

@Barry: почему-то мне кажется, что Apache-это слишком много для меня. А как насчет альтернатив?

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

UPDATE : а как насчет lighty и nginx - какие варианты использования являются идеальным выбором?



  Сведения об ответе

baggs

18:56, 18th August, 2020

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

Некоторые общие рекомендации заключаются в использовании отдельного webserver для обработки media. Под отдельным я подразумеваю webserver, который не работает Django. Этот сервер может быть например:

  • Документации (Лайти)
  • 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. Наверное, причина в том, чтобы сохранить память.)

    • Документации

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

    • nginx

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

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

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


  Сведения об ответе

ASER

05:30, 27th August, 2020

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

В соответствии с их критериями (зерно соли с ними), она отлично справляется с нагрузкой лучше, чем конфигурационный файл lighttpd и nginx... Но это не то, почему я использую его.

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

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

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


  Сведения об ответе

прога

08:50, 21st August, 2020

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

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

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


  Сведения об ответе

ASER

22:31, 2nd August, 2020

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


  Сведения об ответе

9090

21:06, 1st October, 2020

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


  Сведения об ответе

dump

02:16, 16th August, 2020

Будьте проще: Django рекомендует Apache и mod_wsgi (или mod_python). Если обслуживание media файлов является очень большой частью вашего сервиса, рассмотрите Amazon S3 или Rackspace CloudFiles.


  Сведения об ответе

lool

16:29, 10th August, 2020

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

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

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


  Сведения об ответе

SILA

09:33, 8th August, 2020

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


  Сведения об ответе

lourence

13:33, 13th August, 2020

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

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

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

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


  Сведения об ответе

PHPH

15:29, 19th August, 2020

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

С уважением


  Сведения об ответе

VCe znayu

07:47, 13th August, 2020

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

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


  Сведения об ответе

crush

00:20, 19th August, 2020

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

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


  Сведения об ответе

$DOLLAR

20:20, 24th August, 2020

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

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

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

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

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

sudo /etc/init.d/apache2 restart

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться