Как использовать Django с uWSGI¶
uWSGI это быстрый, самоперезапускающийся контейнер серверов, написанный на чистом C.
См.также
В документации uWSGI есть урок, в котором описана настройка Django, nginx и uWSGI (один из возможных способов установки). В этом разделе мы сфокусируемся на том, как организовать взаимодействие Django и uWSGI.
Обязательное условие для использования uWSGI¶
Wiki uWSGI описывает несколько шагов установки. Используя 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 основывается на клиент-серверной модели. Ваш веб-сервер (nginx, Apache…) обращается к рабочему процессу django-uwsgi для получения динамического контента.
Настройка и запуск сервера uWSGI для Django¶
uWSGI поддерживает различные варианты настройки, смотрите документацию о настройках.
Here’s an example command to start a uWSGI server:
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: путь к виртуальному окружению (virtualenv).
Example ini configuration file:
[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
Example ini configuration file usage:
uwsgi --ini uwsgi.ini
Исправляем UnicodeEncodeError при загрузке файлов
If you get a UnicodeEncodeError when uploading files with file names
that contain non-ASCII characters, make sure uWSGI is configured to accept
non-ASCII file names by adding this to your uwsgi.ini:
env = LANG=en_US.UTF-8
Подробности смотрите в разделе Файлы.
Смотрите документацию managing the uWSGI process для информации о способах запуска, остановки и обновления процессов uWSGI.