Развертывание django на рабочем сервере

Прежде всего, позвольте мне пояснить, что я пользователь Windows и очень новый для веб-мира. В последние месяцы я изучал как python, так и django, и для меня это был отличный опыт. Теперь я каким-то образом создал небольшой проект, который хотел бы развернуть на рабочем сервере. Поскольку у django есть встроенный сервер разработки, для меня не было проблем. Но теперь, когда я должен развернуть его на сервер производства, я искал его и нашел Nginx + uWSGI или Nginx + Gunicorn как лучший вариант для него. И поскольку uWSGI и Gunicord несовместимы с Windows, я думаю, что я должен адаптировать Ubuntu или другую систему Unix.

Итак, мои вопросы:

  • Чтобы быть понятным, так как мне придется работать с одним из вышеперечисленных, объясните мне, почему мне нужны два сервера?
  • Если мне нужно адаптировать среду Ubuntu, мне нужно изучить Ubuntu shell scripting, SSH и другие вещи? Или хостинг-провайдер поможет мне в этом?
  • Пожалуйста, позвольте мне знать, что еще мне нужно для вышеупомянутого.

Большое вам спасибо за ваше время и прошу простить, если мой вопрос был хромым вопросом. Надеемся на ответные ответы. Спасибо!

Ответы

Ответ 1

  • Типичная конфигурация включает в себя два серверных процесса (которые могут запускаться вместе на одном и том же самом аппаратном или виртуальном сервере), чтобы прокси-сервер впереди мог буферизовать медленных клиентов. Например: медленный клиент подключится к nginx с запросом. Nginx передаст запрос на Gunicorn, и Гуникорн ответит. Nginx затем немедленно уничтожит ответ Gunicorn, сразу же освободив ресурсы Gunicorn. В этот момент медленный клиент может занять столько времени, сколько хочет, чтобы потреблять ответ от Nginx, не зациклив на ресурсах сервера. Альтернативой модели с двумя серверами является использование асинхронных рабочих с Gunicorn и установка самого Gunicorn спереди или использование комбинации async-sync, например Waitress. Тем не менее, Nginx впереди обладает дополнительным преимуществом удвоения как готового к использованию сервера статики.

    Обратите внимание, что "медленные клиенты" могут описывать: мобильные телефоны, которые теряют свое соединение и оставляют сокет TCP висящим до таймаута в середине запроса; мобильные телефоны, которые просто медленны; ненадежные связи всех типов; враждебные клиенты отказа в обслуживании, которые намеренно пытаются использовать серверные ресурсы; иногда любое старое соединение, которое по какой-либо причине имеет икоту или неисправность. Таким образом, это проблема, которая затронет почти любой сайт.

  • Вам не понадобятся сценарии оболочки, но привыкание к Ubuntu займет некоторое время. Существует много возможностей для изучения даже вне сценариев, например, как использовать диспетчер пакетов, как настраивать пакеты после их установки способами, которые не будут смешивать будущие обновления и т.д. И вам определенно нужно научиться использовать SSH; это один из самых фундаментальных инструментов администрирования сервера в мире * nix.

    Альтернативой обучению использованию Ubuntu или другой серверной платформы является использование опции "Платформа как услуга", например Heroku, поскольку провайдеры хостинга PaaS действительно позаботятся обо всем этом. Я рекомендую этот подход. Это было сказано, хотя я думаю, что PaaS - хороший вариант для людей, которые хотят сосредоточиться на разработке, а не на сервере, независимо от их уровня мастерства, также верно, что немного опыта работы с серверными платформами Linux идет долгий путь помогая вам понять окружающую среду, в которой работает ваш код. Поэтому, даже если вы пойдете с PaaS, вы по-прежнему сможете немного поработать с Ubuntu (или много).

    Еще одно преимущество PaaS состоит в том, что обычно их инфраструктура обрабатывает часть Nginx сделки (буферизация медленных запросов через прокси). Так обстоит дело с Heroku, например. Поэтому вам не придется беспокоиться об этой части инфраструктуры вообще.

  • Эта часть вопроса слишком широка для ответа, но дайте мне знать в комментариях, если вам нужно уточнение.

Ответ 2

Я делаю это almoast, как в этом уроке: http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Nginx - это мой прокси-сервер для приложения django, работающего на gunicorn и его службе statics, virtualenv для моей среды python, супервизора для просмотра моего приложения.
Возможно, вы запустите некоторую ошибку, если не используете Postgresql, спросите, тогда я помогу (использовал MySQL в прошлом теперь Postgresql)

Ответ 3

Во-первых, нет необходимости использовать Ubuntu, если вы счастливее с Windows. Я не знаю, работает ли nginx в Windows, но я был бы очень удивлен, если это не так (на самом деле здесь являются nginx docs для установки в Windows). Между тем, Apache определенно работает в Windows. Документация Django имеет полное объяснение о том, как настроить Apache/mod_wsgi для обслуживания Django.

Вам не нужны два сервера. Я не уверен, почему вы думаете, что вы делаете: обычной причиной для этого является наличие статических активов на отдельном сервере, но вы не упоминаете это как причину. Так как вы говорите только о небольшом сайте, вам даже не нужно этого делать. Один сервер, настроенный для обслуживания как Django, так и статических активов, будет хорошо. Опять же, документы объясняют, как это сделать.