Как использовать 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 работает по модели клиент-сервер. Ваш веб-сервер (например, nginx, Apache) взаимодействует с «рабочим» процессом django-uwsgi для предоставления динамического содержимого.

Настройка и запуск сервера 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.

Вернуться на верх