Меню Рубрики

Django nginx uwsgi windows

Django в production [Nginx + uWSGI + Django]

04 июня 2017 в 21:22

Когда впервые столкнулся с вопросом развертывания Django проекта, мне это казалось сложным, ведь цепочка компонентов получается большая. Однако, это только на первый взгляд. Запуск будет происходить по такой цепочке компонентов:

Nginx -> socket -> uWSGI -> Django

Также, текущая инструкция будет следовать ряду правил.

  • Все статичные файлы будут отдаваться только Nginx
  • Nginx и uWSGI будут взаимодействовать посредством UNIX-сокетов
  • За работой uWSGI будет следить Supervisor

Инструкция предполагает, что у вас уже создан проект на фреймворке Django, и написан requirements.txt для быстрой вставки пакетов в VirtualEnv.

1. Установка компонентов

1.1. Установка Nginx

Если вас не беспокоит неактуальная версия пакета Nginx, то его можно установить из менеджера пакетов:

Однако, я бы советовал установить Nginx, следуя официальной инструкции.

1.2 Установка uWSGI

Как и многое для языка Python, установка uWSGI разделяется на два варианта: для python2 и для python 3.

1.2.1 Установка uWSGI для Python 2.x

1.2.2 Установка uWSGI для Python 3.x

1.3 Установка Virtualenv

Виртуальное окружение, безусловно, нам понадобится. Для его установки необходимо ввести команду:

для Python 2.x, или для python 3.x

1.4 Установка Supervisor

Supervisor нам понадобится для того, чтобы контроллировать состояние работы uWSGI, запускать его при запуске системы, и перезапускать в случае его аварийной остановки. Установить его нужно командой:

2. Заливка Virtualenv и Django

Переходим в папку, где будем хранить наше виртуальное окружение Python

Затем создаем наше виртуальное окружение

  • — имя виртуального окружения (вводится без » «)
  • —no-site-packages — установка Virtualenv, запрещающая наследовать пакеты глобального окружения
  • pythonX.X — нужная вам версия python

Теперь накатим все зависимости из файла requirements.txt. Для этого активируем окружение

И установим пакеты

Также, нам следует залить наш Django проект на сервер удобным для вас способом.

3. Подготовка файлов

Далее, нам необходимо подготовить файлы конфигов для всех компонентов. Для удобства, их лучше хранить в отдельной папке в корне проекта Django. Приблизительно так будет выглядеть наша папка:

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

3.1 Файл nginx.conf

Файл конфигурации Nginx.

  • upstream django — подключение к файлу сокета uwsgi. Этот сокет будет обозначен в файле конфигурации uwsgi, будет создаваться при запуске uwsgi, и будет удаляться при остановке uwsgi.
  • listen — прослушиваем 80 порт. Стандартный порт для подачи запросов браузерами.
  • server_name — адрес вашего сайта. На этап тестирования можно указать IP сервера, либо ‘localhost’ (если сервер будет запускаться локально)
  • client_max_body_size — максимальный размер тела запроса. Необязательно. Дополнительная подстраховка.
  • location /media и location /static — путь к папкам media и static файлов Django. Если nginx встречает адрес, который начинается с /media или /static, то он не отдает запрос uWSGI, а пытается сам отдать файл находящийся в указанной папке. У вас могут быть свои имена папок и путей URL.
  • location / — параметры подключения к uWSGI, где uwsgi_pass — имя upstream для подключения. Остальные параметры лучше не менять.

3.2 Файл uwsgi.ini

Файл настроек, с которым будет запускаться uWSGI.

  • uid и gid — пользователь и группа пользователей linux, от имени которых будет запускаться uWSGI-вассал
  • virtualenv — пусть до виртуального окружения
  • chmod-socket — права, с которыми будет создаваться soket-файл
  • socket — произвольный путь к папке, где будет создан socket
  • chdir и pythonpath — указываем путь до проекта
  • env — дополнительные атрибуты виртуального окружения. Указываем обязательный параметр DJANGO_SETTINGS_MODULE, где project — папка, в которой лежит settings.py
  • processes — число воркеров, запускаемых для обслуживания проекта. Для каждого проекта подбирается отдельно

Хочу заметить, что socket должен быть доступен для чтения и записи как uWSGI, так и nGINX. Лучший вариант для избежания ошибок — назначить для Nginx того же пользователя, что и для uwsgi, а также передать права на проект и папку с сокетом этому пользователю. Худший вариант — ослабить права chmod-socket.

3.3. Файл supervisor.conf

Конфигурационный файл, который будет запускать и отслеживать процесс с названием uwsgi

  • user — пользователь linux, с помощью которого будет запускаться процесс
  • directory — директория, с которой будет выполняться команда. Может быть любой
  • command — команда, с помощью которой будет запускаться процесс. Сразу заметим, что мы будем запускать uWSGI в режиме EMPEROR, позволяющего запускать несколько сайтов на одном сервере. Сразу определяемся с папкой, где будут храниться конфиги вассалов (сайт = вассал).
  • stderr_logfile и stdout_logfile — файлы логов.

4. Создание симлинков

Итак, все файлы готовы. Осталось разложить их по правильным местам. Для начала создадим симлинк для Nginx.

В случае, если мы будем запускать на сервере несколько файлов, мы не сможем в одну папку конфига ложить файлы с одним и тем же именем, поэтому мы создаем симлинк с нашим файлом nginx.conf в папке Nginx, как имя_сайта.conf.

Затем, копируем конфиг uWSGI в папку вассалов.

И создаем симлинк для конфигурации supervisor

5. Запуск

Для начала запускаем uWSGI с помощью supervisor, чтобы создался сокет. Затем перезапускаем Nginx.

Источник

Django — NGINX: запускаем наш проект на сервере

Django — NGINX — это популярная и хорошо протестированная комбинация, используемая для развертывания веб-приложений в продакшене. В этом посте я объясню шаги, необходимые для развертывания вашего проекта Django на сервере с использованием Ubuntu 18.04.

Чтобы развернуть Django — NGINX на вашем сервере, выполните следующие простые шаги.

1. Установите необходимые пакеты, используя apt

Зачем вам нужен UWSGI ? Проще говоря, NGINX сам по себе не может запустить процесс Python для размещения вашего приложения, для этого вам понадобится так называемый сервер приложений, на котором будет размещен процесс Python, выполняющий ваш проект Django. NGINX и uWSGI будут «общаться» друг с другом по протоколу uwsgi.

2. Создайте каталоги для ваших статических и медиа файлов

Статические файлы — это файлы «не-python», необходимые для вашего проекта Django, например Javascript, CSS и изображения. Медиа-файлы — это файлы, загруженные пользователями вашего приложения. Не каждое приложение позволяет пользователям загружать файлы, но это очень распространенный сценарий. Django не будет обслуживать статические и медиа файлы самостоятельно. Мы будем использовать NGINX, чтобы работать с ними.

Прежде всего, вы должны создать каталоги. Здесь я предполагаю, что вы в настоящее время используете пользователя Ubuntu с домашним каталогом по умолчанию /home/ubuntu:

Вторая команда сделает пользователя с именем www-data владельцем каталога /home/ubuntu/media. www-data будет пользователем, выполняющим ваш процесс Python в uWSGI, и этот пользователь должен иметь возможность писать в каталог мультимедиа, чтобы правильно сохранять загруженные пользователем файлы.

3. Настройте свой проект Django и установите требования

Этот шаг действительно зависит от вашего конкретного приложения Django, для целей данного руководства я буду предполагать, что ваш проект Django установлен в каталоге / home/ubuntu/django_project/ со следующей структурой:

Также я предполагаю, что вы установили все свои зависимости Python, например, используя apt или pip.

Я всегда следую рекомендациям при запуске нового проекта Django, разбивая монолитный файл settings.py на разные файлы, по одному для каждой среды развертывания (local, test, production и т.д.).

В нашем случае Django будет использовать модуль project/settings/production.py для своих настроек. Здесь мы устанавливаем переменные STATIC_ROOT и MEDIA_ROOT для каталогов, которые мы создали на шаге 2:

4. Соберите статические файлы

Запустите следующую команду, чтобы собрать все статические файлы для вашего проекта Django:

Эта команда скопирует все статические файлы (Javascript, CSS, изображения) для всех ваших приложений Django в каталог STATIC_ROOT, настроенный в production.py . Например, /home/ubuntu/static .

5. Настройте uWSGI для размещения вашего проекта Django.

Создайте файл с именем django.ini в каталоге /etc/uwsgi/apps-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите uWSGI с помощью:

Вы должны найти логи uWSGI в /var/log/uwsgi/apps/django.log. Поэтому вы можете проверить их, чтобы увидеть, правильно ли запущен процесс Python или есть проблемы.

6. Настройте NGINX для обслуживания вашего приложения

Создайте файл с именем django в каталоге /etc/nginx/sites-enabled/. Содержимое файла должно быть примерно таким:

Перезапустите NGINX с помощью:

7. Наслаждайтесь своим приложением Django

Направьте браузер на свой домен, и вы увидите приложение Django во всей его красе!

Источник

Настройка веб-сервера для Django с nginx и uWSGI

Для запуска Django сервера можно использовать любой веб-сервер с поддержкой WSGI. В данной статье мы по шагам разберем процесс настройки веб-сервера для Django с использованием nginx и uWSGI. Те же принципы можно применить и при использовании другого веб-сервера.

Шаги для запуска веб-сервера для хостинга Django:

  • Приобрести сервер
  • Установить системные пакеты
  • Подготовить виртуальное окружение
  • Создать каталог и залить проект
  • Установить необходимые зависимости
  • Настроить веб-сервер и uWSGI

Если вы хотите разобраться в деталях настройки сервера для хостинга Python (Django) проекта — то я рекомендую прочесть статью http://itman.in/uwsgi-python-hosting/

Здесь же собраны только необходимые действия для запуска Django проекта на пустом Ubuntu сервере с использованием uWSGI.

Выбор сервера для хостинга сайта

Приобретение сервера сейчас не составляет сложности. Для хостинга простого сайта подойдет любой виртуальный сервер (VPS), для более сложных могут понадобится собственные сервера.

В этой статье рассмотрен вариант настройки сервера с операционной системой Ubuntu,

Установите нужные системные пакеты

В начале нужно обновить установленные на сервере системные пакеты. В Ubuntu для этого нужно выполнить две команды:

Теперь можно установить необходимые для настройки сервера пакеты

Создайте каталог и загрузите код проекта

Если ваш сервер используется для хостинга нескольких сайтов, то лучше выделить отдельный каталог для каждого проекта. Я использую каталог /data, в котором будут находится каталоги проектов.

Загрузка кода проекта на сервер

Если ваш проект в системе контроля версий GIT — это идеальный вариант — то достаточно выполнить git clone. Я использую для хранения исходного кода проекта Bitbucket:

Если программный код у вас в виде архива файлов, то загрузите его на сервер с помощью scp. Под WIndows можно использовать программу WinSCP для подключения к Ubuntu серверу и загрузки файлов.

В дальнейшем предполагается следующая структура:

Подготовить виртуальное окружение

Сперва создадим каталог, в котором будет находится виртуальное окружение:

Теперь создадим виртуальное окружение командой virtualenv mysite:

Теперь в каталоге venv появился каталог mysite, в котором будут хранится версия Python и все установленные в виртуальное окружение приложения.

Для активации виртуального окружения нужно выполнить команду:

После этого все Python приложения будут устанавливаться внутрь виртуального окружения, и не будут конфликтовать с системными версиями.

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

Чтобы деактивировать виртуальное окружения и работать с системными библиотеками, выполните команду

Установить необходимые зависимости

После активации виртуального окружения можно установить приложения, которые необходимы для запуска и работы сайта. Как правило их список приведен в файле requiments.txt в корневом каталоге проекта.

Для установки используйте

или установите приложения по одному:

Настройка NGINX и uWSGI

Для запуска python приложения в качестве сайта нужен любой веб-сервер с поддержкой WSGI. В состав Django входит простой веб-сервер, который позволяет сразу просмотреть работу сайта в процессе разработки.

Но для работы на хостинге нужно более серьезное решение. Nginx — возможно лучший веб-сервер на момент написания статьи, уже установлен. Также нужно установить uWSGI. Перед установкой деактивируйте виртуальное окружение, чтобы пакет был установлен в системные каталоги и выполните:

Настройка вашего сайта в nginx

Создайте каталог /data/mysite/conf для хранение файлов конфигурации и разместите в нем файл mysite_nginx.conf следующего содержания:

Если файла /etc/nginx/uwsgi_params не существует, загрузите его с сайта https://github.com/nginx/nginx/blob/master/conf/uwsgi_params

Эта конфигурация сообщает nginx, что он должен сам отдать браузеру статические и загруженные пользователем файлы, доступные по адресу: www.example.com/static/filename.jpg или www.example.com/media/filename.jpg

Затем запрос будет передан для дальнейшей обработки Python программе через uWSGI, используя файл-сокет /data/mysite/mysite.sock.

Чтобы nginx использовал новый файл конфигурации, добавьте ссылку на него в каталог /etc/nginx/sites-enabled/

Теперь нужно перезагрузить nginx командой

Чтобы убедится, что ваш сайт работает, загрузите в каталог /data/mysite/project/media файл media.png и откройте в браузере http://mysite.com/media/media.png

Если картинка отобразится, значит nginx настроен корректно.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Django cms установка на windows
  • Django apache wsgi windows
  • Dizzy для windows 7
  • Divx кодеки для windows 7 64 bit
  • Divx mobile player windows mobile