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

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

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

  1. просто для ясности, поскольку мне придется работать с одним из вышеперечисленных, пожалуйста, объясните мне, зачем мне нужны два сервера?
  2. если мне нужно адаптировать среду Ubuntu, мне нужно изучать сценарии оболочки Ubuntu, SSH и другие вещи? Или хостинг-провайдер поможет мне сделать это?
  3. пожалуйста, дайте мне знать, что еще мне нужно для вышеупомянутого.

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

3 ответов


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

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

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

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

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

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


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


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

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