Какая «установка» работает лучше всего? Я использовал virtualenv и переместил свой проект django в эту среду, однако я видел другие настройки, в которых есть папка для виртуальных сред и другие для проектов.
virtualenv - это способ изолировать среды Python; как таковой, он не играет большой роли при развертывании, однако во время разработки и тестирования это требование, если не настоятельно рекомендуется.
Ценность virtualenv заключается в том, что он позволяет вам убедиться, что для приложения установлены правильные версии библиотек. Так что неважно, куда вы вставите саму виртуальную среду. Просто убедитесь, что вы не включаете его как часть системы управления версиями исходного кода.
Структура файловой системы не критична. Вы увидите множество статей, восхваляющих достоинства макетов каталогов и даже скелетных проектов, которые вы можете клонировать в качестве отправной точки. Я считаю, что это больше личное предпочтение, чем жесткое требование. Конечно, приятно иметь; но если вы не знаете почему , это не добавляет ценности вашему процессу развертывания - так что не делайте этого, потому что какой-то блог рекомендует это, если это не имеет смысла для вашего сценария. Например, нет необходимости создавать setup.py
файл, если у вас нет частного сервера PyPi, который является частью вашего рабочего процесса развертывания.
Как я могу настроить вещи таким образом, чтобы на одном сервере можно было разместить несколько сайтов?
Чтобы настроить несколько сайтов, вам нужно сделать две вещи:
- Сервер, который прослушивает общедоступный IP-адрес через порт 80 и / или порт 443, если у вас есть SSL.
- Куча «процессов», которые запускают реальный исходный код django.
Люди используют nginx для №1, потому что это очень быстрый прокси и он не требует накладных расходов на такой комплексный сервер, как Apache. Вы можете использовать Apache, если вам это удобно. Нет требования, что «для нескольких сайтов используйте nginx»; вам просто нужна служба, которая прослушивает этот порт, знает, как перенаправить (прокси) на ваши процессы, на которых выполняется фактический код django.
Для №2 есть несколько способов запустить эти процессы. gevent / uwsgi - самые популярные. Единственное, что здесь следует помнить, это не использовать сервер запуска в продакшене .
Это абсолютный минимум требований. Обычно люди добавляют своего рода диспетчер процессов для управления всеми запущенными «серверами django» (№2). Здесь вы увидите upstart
и supervisor
упомянули. Я предпочитаю супервизора, так как ему не нужно брать на себя всю систему (в отличие от выскочки). Однако, повторюсь - это несложное требование . Вы можете отлично запустить несколько screen
сеансов и отсоединить их. Обратной стороной является то, что при перезапуске сервера вам придется перезапустить сеансы экрана.
Лично я бы рекомендовал:
- Nginx для №1
- Сделайте выбор между uwsgi и gunicorn - я использую uwsgi.
- супервизор для управления внутренними процессами.
- Индивидуальные системные учетные записи (пользователи) для каждого приложения, которое вы размещаете.
Причина, по которой я рекомендую №4, - изолировать разрешения; опять же, не требование.
Почему некоторые люди предлагают использовать gunicorn_django -b 0.0.0.0:8000, а другие - gunicorn_django -b 127.0.0.1:8000? Я тестировал последний на инстансе Amazon EC2, но он не работал, а первый работал без проблем.
0.0.0.0
означает «все IP-адреса» - это мета-адрес (то есть адрес-заполнитель). 127.0.0.1
зарезервированный адрес, который всегда указывает на локальный компьютер. Вот почему он называется «localhost». Он доступен только для процессов, запущенных в одной системе.
Обычно у вас есть внешний сервер (№1 в списке выше), который прослушивает общедоступный IP-адрес. Вы должны явно привязать сервер к одному IP-адресу .
Однако, если по какой-то причине вы используете DHCP или не знаете, какой будет IP-адрес (например, это недавно подготовленная система), вы можете указать nginx / apache / любому другому процессу для привязки 0.0.0.0
. Это должна быть временная временная мера .
Для производственных серверов у вас будет статический IP-адрес. Если у вас динамический IP (DHCP), то можете оставить 0.0.0.0
. Однако очень редко у вас есть DHCP для ваших производственных машин.
Привязка gunicorn / uwsgi к этому адресу в производстве не рекомендуется . Если вы привяжете свой внутренний процесс (gunicorn / uwsgi) к нему 0.0.0.0
, он может стать доступным «напрямую», минуя ваш внешний прокси (nginx / apache / etc); кто-то может просто запросить http://your.public.ip.address:9000/
и получить доступ к вашему приложению напрямую, особенно если ваш интерфейсный сервер (nginx) и ваш внутренний процесс (django / uwsgi / gevent) работают на одном компьютере .
Вы можете сделать это, если не хотите, чтобы у вас были проблемы с запуском внешнего прокси-сервера.
Какова логика конфигурационного файла nginx? Существует так много руководств, в которых используются совершенно разные файлы конфигурации, что я не понимаю, какой из них лучше. Например, некоторые люди используют «псевдоним / путь / к / статической / папке», а другие «корень / путь / к / статической / папке». Может быть, вы можете поделиться своим предпочтительным файлом конфигурации.
Первое, что вам следует знать о nginx, это то, что это не веб-сервер, такой как Apache или IIS. Это прокси. Таким образом, вы увидите разные термины, такие как «восходящий» / «нисходящий» и несколько «серверов». Найдите время и сначала просмотрите руководство по nginx.
Есть много разных способов настроить nginx; но вот один ответ на вопрос о alias
VS. root
. root
- явная директива, связывающая корень документа («домашний каталог») nginx. Это каталог, в который он будет смотреть, когда вы дадите запрос без пути, напримерhttp://www.example.com/
alias
означает «сопоставить имя с каталогом». Каталоги с псевдонимами не могут быть подкаталогом корня документа.
Зачем мы создаем символическую ссылку между доступными и доступными сайтами в / etc / nginx?
Это что-то уникальное для debian (и подобных ему систем, таких как ubuntu). sites-available
перечисляет файлы конфигурации для всех виртуальных хостов / сайтов в системе. Символическая ссылка с sites-enabled
на sites-available
«активирует» этот сайт или виртуальный хост. Это способ разделения файлов конфигурации и простого включения / отключения хостов.