Как использовать Django с uWSGI¶
uWSGI - это быстрый, самовосстанавливающийся и удобный для разработчиков/сисадминов сервер-контейнер приложений, написанный на чистом языке C.
См.также
Документация uWSGI предлагает tutorial, охватывающую Django, nginx и uWSGI (одна из возможных настроек развертывания из многих). Документация ниже посвящена тому, как интегрировать Django с uWSGI.
Пререквизиты: uWSGI¶
В вики uWSGI описано несколько installation procedures. Используя pip, менеджер пакетов Python, вы можете установить любую версию uWSGI одной командой. Например:
# Install current stable version.
$ python -m pip install uwsgi
# Or install LTS (long term support).
$ python -m pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
модель uWSGI¶
uWSGI operates on a client-server model. Your web server (e.g., nginx, Apache)
communicates with a django-uwsgi
«worker» process to serve dynamic content.
Настройка и запуск сервера uWSGI для Django¶
uWSGI поддерживает несколько способов настройки процесса. См. раздел uWSGI configuration documentation.
Вот пример команды для запуска сервера uWSGI:
uwsgi --chdir=/path/to/your/project \
--module=mysite.wsgi:application \
--env DJANGO_SETTINGS_MODULE=mysite.settings \
--master --pidfile=/tmp/project-master.pid \
--socket=127.0.0.1:49152 \ # can also be a file
--processes=5 \ # number of worker processes
--uid=1000 --gid=2000 \ # if root, uwsgi can drop privileges
--harakiri=20 \ # respawn processes taking more than 20 seconds
--max-requests=5000 \ # respawn processes after serving 5000 requests
--vacuum \ # clear environment on exit
--home=/path/to/virtual/env \ # optional path to a virtual environment
--daemonize=/var/log/uwsgi/yourproject.log # background the process
Это предполагает, что у вас есть пакет проекта верхнего уровня с именем mysite
, а внутри него модуль mysite/wsgi.py
, который содержит объект WSGI application
. Такую схему вы получите, если запустите django-admin startproject mysite
(используя собственное имя проекта вместо mysite
) с последней версией Django. Если этот файл не существует, вам нужно будет его создать. Смотрите документацию Как развертывать с помощью WSGI о содержимом по умолчанию, которое вы должны поместить в этот файл, и о том, что еще вы можете добавить в него.
Специфические для Django опции здесь следующие:
chdir
: Путь к каталогу, который должен быть в пути импорта Python - т.е. каталог, содержащий пакетmysite
.module
: Модуль WSGI для использования – вероятно, модульmysite.wsgi
, который создаетstartproject
.env
: вероятно, должен содержать по крайней мереDJANGO_SETTINGS_MODULE
.home
: Необязательный путь к виртуальной среде вашего проекта.
Пример конфигурационного файла ini:
[uwsgi]
chdir=/path/to/your/project
module=mysite.wsgi:application
master=True
pidfile=/tmp/project-master.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi/yourproject.log
Пример использования конфигурационного файла ini:
uwsgi --ini uwsgi.ini
Исправление UnicodeEncodeError
для загрузки файлов
Если вы получаете UnicodeEncodeError
при загрузке файлов с именами файлов, содержащими символы не ASCII, убедитесь, что uWSGI настроен на прием имен файлов не ASCII, добавив следующее к вашему uwsgi.ini
:
env = LANG=en_US.UTF-8
Подробности см. в разделе Файлы справочного руководства Unicode.
Смотрите документацию uWSGI на managing the uWSGI process для информации о запуске, остановке и перезагрузке рабочих uWSGI.