Назад | Перейти на главную страницу

Какой оптимальный способ настроить сервер Django для обслуживания нескольких сайтов?

В настоящее время я использую Apache 2.0 и FastCGI для обслуживания своих сайтов Django (я размещаю несколько сайтов с одного сервера / IP). У каждого сайта есть свой собственный процесс FastCGI, который не позволяет Apache создавать несколько копий, которые могут использовать много памяти, и означает, что я могу перезапустить серверную часть одного сайта Django без перезапуска Apache.

Это разумный способ делать что-то и есть ли другие / лучшие альтернативы?

Вам обязательно нужен mod-wsgi.

mod-wsgi разработан теми же разработчиками, что и mod-python много лет назад. mod-wsgi теперь рекомендуется вместо mod-python для всех современных фреймворков приложений, включая django.

По сути, mod-wsgi имеет два режима работы: встроенный (самый быстрый - вроде как mod-python, только быстрее) или демон (вроде fast-cgi).

В режиме демона предпочтительнее fast-cgi, потому что:

  1. не требует каких-либо дополнительных движущихся частей (например, флюпа)
  2. вам не нужно останавливать и запускать интерпретаторы Python, об этом позаботится mod-wsgi.

Во встроенном режиме предпочтительнее модифицировать python, потому что:

  1. Разработка mod-python остановилась в пользу mod-wsgi
  2. mod-wsgi в конечном итоге будет поддерживать python 3k.
  3. mod-wsgi быстрее, чем mod-python

Вот документация: http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

/ Ричи

Я успешно использую Apache2 и mod_python. Вы просто добавляете django-app. конкретные вещи для apache, подобные этому (пример взят из VHost, на котором запущен ReviewBoard с review-board.org):

<Location "/reviewboard">
    SetHandler mod_python
    PythonPath "['/usr/lib/python2.4/site-packages/django'] + ['/usr
/local/reviewboard'] + ['/usr/local/reviewboard/djblets', '/usr/local'] + sys.pa
th"
    SetEnv DJANGO_SETTINGS_MODULE reviewboard.settings
    PythonHandler django.core.handlers.modpython
    PythonAutoReload Off
    PythonDebug Off
    PythonInterpreter reviewboard
</Location>

Важным параметром в этом случае является уникальность PythonInterpreter для различных приложений django.

Удачи.

Раньше я использую nginx и supervisord (небольшое руководство по России http://buzzja.mine.nu/blog/2009/02/21/dzhango-za-stenoj/ )