Я довольно нул, когда речь идет о развертывании проекта Django. Я хотел бы знать, какие различные методы для развертывания проекта Django и какой из них наиболее предпочтительный.Различные методы развертывания проекта Django и их плюсы и минусы?
ответ
Используйте Nginx/Apache/mod-wsgi, и вы не ошибетесь.
Если вы предпочитаете простую альтернативу, просто используйте Apache.
Существует очень хороший документ развертывания: http://lethain.com/entry/2009/feb/13/the-django-and-ubuntu-intrepid-almanac/
В документации 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
К сожалению, я еще не блог об этом, но опытный системный администратор должен иметь возможность выполнить необходимую настройку.
Я далек от опытного администратора, но большое спасибо за подведение различных методов развертывания. – Sushi
ОК, это мотивирует меня немного, чтобы зафиксировать его как можно скорее в моем блоге ... Я обновлю ответ на ссылку, как только это будет написано. – oxy
Вы * можете * использовать virtualenv с mod_wsgi! –
Я сам столкнулся с множеством проблем при развертывании проектов Django и автоматизации процесса развертывания. Apache и mod_wsgi были похожи на проклятие для развертывания Django. Существует несколько инструментов, таких как Nginx, Gunicorn, SupervisorD и Ткань для трендов для развертывания Django. Сначала я использовал/настраивал их индивидуально без автоматизации развертывания, которая занимала много времени (мне приходилось поддерживать тестирование, а также рабочие серверы для моего клиента и приходилось их обновлять, как только была проверена и одобрена новая функция), но затем Я наткнулся на django-fagungis, который полностью автоматизирует развертывание Django от клонирования моего проекта от bitbucket до развертывания на моем удаленном сервере (он использует Nginx, Gunicorn, SupervisorD, Fabtic и virtualenv, а также устанавливает все зависимости на лету), все с всего три команды :) Об этом вы можете найти в своем блоге here. Теперь мне даже не нужно участвовать в этом процессе (который занимал много времени), и один из моих младших разработчиков запускает эти три команды django-fagungis mentioned here на своей локальной машине, и мы получаем новую свежую копию нашего проекта, развернутого в считанные минуты без каких-либо хлопот :)
Спасибо Лакшман. Это кажется довольно всеобъемлющим. Просто так много методов развертывания для django, что это может смутить любого нового для него. – Sushi