2011-02-03 4 views

ответ

4

Используйте Nginx/Apache/mod-wsgi, и вы не ошибетесь.

Если вы предпочитаете простую альтернативу, просто используйте Apache.

Существует очень хороший документ развертывания: http://lethain.com/entry/2009/feb/13/the-django-and-ubuntu-intrepid-almanac/

+0

Спасибо Лакшман. Это кажется довольно всеобъемлющим. Просто так много методов развертывания для django, что это может смутить любого нового для него. – Sushi

6

В документации Django перечислены Apache/mod_wsgi, Apache/mod_python и FastCGI и т.д.

mod_python осуждается в настоящее время, следует использовать вместо mod_wsgi.

Джанго с mod_wsgi проста в установке, но:

  • вы можете использовать только один питон версии в то время [править: Вы даже можете использовать только питон версии mod_wsgi был составлен для]
  • [править: кажется, если я ошибаюсь, на mod_wsgi не поддерживает virtualenv: он делает]

Так для нескольких сайтов (ориентированных на различные версии Джанго/питон) на сервере mod_wsgi это не бес t решение.

FastCGI может использоваться с virtualenv, а также с различными версиями Python, как вы запустите его с

 
./manage.py runfcgi … 

, а затем настроить свой веб-сервер, чтобы использовать этот FCGI интерфейс.

Новый, горячий материал о развертывании джанго, похоже, gunicorn. Это веб-сервер, который реализует wsgi и обычно используется как бэкэнд с «большим» веб-сервером в качестве прокси.

Развертывание с gunicorn чувствует себя как fcgi: вы запускаете процесс, обрабатывающий материал django с помощью manage.py и веб-сервера в качестве интерфейса к миру.

Но gunicorn развертывание имеет ряд преимуществ по сравнению с FCGI:

  • скорость - я не нашел источники, но тесты говорят FCGI не так быстро, как диафрагменное предлагает
  • конфигурационных файлов, для FCGI вы должна выполнять всю конфигурацию в командной строке при выполнении команды manage.py. Это становится неуправляемым при запуске нескольких экземпляров django через запуск системной службы init.d (unix-like OS). Это всегда то же самое CmdLine, только с различными файлами конфигурации
  • gunicorn может упасть привилегии: нет необходимости делать это в init.d сценарии, и это легко переключиться на одного пользователя на экземпляр Джанго
  • gunicorn ведет себя больше как daemon: запись pidfile и logfile, форматирование на задний план и т. д. упрощает его использование в сценарии init.d.

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

Если у вас есть только веб-сервер django, я бы предложил использовать nginx в качестве frontendproxy, так как он лучше всего работает (опять же, это основано на тестах, которые я читал на некоторых блогах) больше не имеют URL-адреса). Лично я использую apache как frontendproxy, так как мне это нужно для других сайтов, размещенных на сервере.

Простая инструкция для развертывания Джанго установки можно найти здесь: http://ericholscher.com/blog/2010/aug/16/lessons-learned-dash-easy-django-deployment/

Мой init.d скрипт для gunicorn расположен на GitHub: https://gist.github.com/753053

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

+0

Я далек от опытного администратора, но большое спасибо за подведение различных методов развертывания. – Sushi

+0

ОК, это мотивирует меня немного, чтобы зафиксировать его как можно скорее в моем блоге ... Я обновлю ответ на ссылку, как только это будет написано. – oxy

+0

Вы * можете * использовать virtualenv с mod_wsgi! –

1

Я сам столкнулся с множеством проблем при развертывании проектов Django и автоматизации процесса развертывания. Apache и mod_wsgi были похожи на проклятие для развертывания Django. Существует несколько инструментов, таких как Nginx, Gunicorn, SupervisorD и Ткань для трендов для развертывания Django. Сначала я использовал/настраивал их индивидуально без автоматизации развертывания, которая занимала много времени (мне приходилось поддерживать тестирование, а также рабочие серверы для моего клиента и приходилось их обновлять, как только была проверена и одобрена новая функция), но затем Я наткнулся на django-fagungis, который полностью автоматизирует развертывание Django от клонирования моего проекта от bitbucket до развертывания на моем удаленном сервере (он использует Nginx, Gunicorn, SupervisorD, Fabtic и virtualenv, а также устанавливает все зависимости на лету), все с всего три команды :) Об этом вы можете найти в своем блоге here. Теперь мне даже не нужно участвовать в этом процессе (который занимал много времени), и один из моих младших разработчиков запускает эти три команды django-fagungis mentioned here на своей локальной машине, и мы получаем новую свежую копию нашего проекта, развернутого в считанные минуты без каких-либо хлопот :)