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

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

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

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

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

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

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

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

ОБНОВЛЕНИЕ : А как насчет Lighty и Nginx - каковы случаи использования, когда они являются идеальным выбором?

25.08.2008 13:28:41
13 ОТВЕТОВ

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

5
12.07.2013 21:51:43
Тем не менее, сообщество поддержки Django на #django freenode соглашается с тем, что документы просто устарели, официально рекомендованным способом является mod_wsgi.
temoto 16.06.2009 07:03:01
Я не мог заставить его работать на Apache, и я пробовал много раз, я не нашел поддержку великолепной, учебники показывают только часть головоломки. Кажется, вы должны стать экспертом Apache. Я предлагаю nginx / gunicorn с eventlet или nginx / uwsgi с использованием сокетов. Оба прекрасно работают и просты в настройке!
radtek 25.02.2014 17:03:50

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

Краткий обзор ваших требований:

  • Простота установки Я нашел apache 2.2 довольно простым в сборке и установке.
  • Быстрые и простые ресурсы Я бы сказал, что это зависит от вашего использования и трафика. * Возможно, вы не захотите сервер все файлы, используя Apache и использовать LightTPD ( легкий ) для сервера статических файлов.
  • Могут ли служить медиафайлы, я имею в виду изображения, флэш-файлы? Apache может сделать это.
  • Несколько сайтов на одном сервере Виртуальный сервер хостинг на Apache.
  • Скорее не устанавливайте другие расширения. Закомментируйте то, что вы не хотите в конфигурации Apache.
6
28.05.2014 05:45:21
У меня есть такая установка - я использую mod_wsgi для обслуживания большей части сайта, но у меня есть директивы Alias, чтобы заставить Apache обрабатывать обработку статических файлов из / media и / admin_media. Учитывая, что мы говорим о «среднестатистическом сайте», вероятно, нет нужды возиться с «более простыми» альтернативами.
Sean McSomething 15.06.2009 21:49:03

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

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

1
25.08.2008 15:06:06
nginx - однопоточный сервер; но бэкэнды (HTTP, FastCGI и т. д.) являются отдельными процессами.
Javier 6.04.2009 19:14:45
РЕШЕНИЕ

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

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

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

Тогда для Джанго вы можете пойти разными путями. Вы также можете:

  • Подайте Джанго через 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 ваш сервер должен работать в разветвленном режиме, а не в многопоточном.

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

26
12.08.2014 15:33:44
Модуль mod_python не должен потреблять намного больше памяти. Представление о том, что это так, превратилось в городской миф, когда реальность такова, что проблемы с памятью у людей были вызваны тем, как был установлен mod_python / Python и как был настроен Apache. Первая проблема заключалась в том, что в прошлом Python часто не устанавливался с общей библиотекой. Это среднее значение mod_python должно было связывать его статически, вызывая использование локальной памяти из-за перемещения адресов. Другая проблема - люди, использующие prefork, который лучше для PHP, но отстой для Python.
Graham Dumpleton 25.06.2009 02:36:39

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

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

1
4.09.2008 13:53:33
Однажды у меня была проблема с nginx, которая не была полностью объяснена в английской документации. Я пробежал одну русскую строку через переводчик (гугл) и проблема была решена. Так что российская сторона документации более полная.
stesch 5.12.2008 11:14:24
@stesch: интересно. хотите уточнить?
Javier 6.04.2009 19:15:37

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

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

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

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

2
20.09.2008 18:06:27

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

2
24.09.2008 11:58:12

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

Несколько сайтов с небольшим трафиком на небольшом VPS делают основной проблемой потребление ОЗУ, и mod_python кажется плохим вариантом. Используя lighttpd и FastCGI, мне удалось добиться минимального использования памяти простого сайта Django до 58 МБ виртуального и 6,5 МБ резидентного (после перезапуска и обслуживания одного запроса без использования ОЗУ).

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

2
6.10.2008 07:56:56

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

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

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

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

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

9
9.12.2008 17:08:28

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

2
16.06.2009 02:18:13
+1. Apache + mod_wsgi рекомендуется. Не хватает ссылок о претензиях, хотя.
muhuk 15.06.2009 16:28:54
Настройка apache не проще, чем nginx / lighttpd.
temoto 16.06.2009 06:35:24

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

С уважением

1
28.10.2010 04:05:17

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

2
9.05.2011 21:01:42

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

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

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

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

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

sudo /etc/init.d/apache2 restart

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

1
12.02.2013 23:55:47