Как использовать 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 поддерживает различные варианты настройки, смотрите документацию о настройках.
Пример команды для запуска сервера 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: путь к виртуальному окружению (virtualenv).
Пример конфигурационного 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 настроен для загрузки таких файлов. Для этого укажите в uwsgi.ini:
env = LANG=en_US.UTF-8
Подробности смотрите в разделе Файлы.
Смотрите документацию managing the uWSGI process для информации о способах запуска, остановки и обновления процессов uWSGI.