Как использовать Django с uWSGI
uWSGI — это быстрый, отказоустойчивый и удобный для разработчиков и системных администраторов сервер-контейнер приложений, написанный на чистом C.
См. также
Документация uWSGI содержит руководство по Django, nginx и uWSGI (один из множества возможных вариантов развёртывания). Приведённая ниже документация посвящена интеграции Django с uWSGI.
Предварительное требование: uWSGI
Вики 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 «worker», чтобы обслуживать динамический контент.
Настройка и запуск сервера uWSGI для Django
uWSGI поддерживает несколько способов настройки процесса. См. документацию по настройке 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: необязательный путь к виртуальному окружению проекта.
Пример файла конфигурации 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 при загрузке файлов
Если при загрузке файлов с именами, содержащими символы не из ASCII, возникает UnicodeEncodeError, убедитесь, что uWSGI настроен на обработку имён файлов с символами не из ASCII, добавив это в uwsgi.ini:
env = LANG=en_US.UTF-8
Подробнее см. раздел Файлы справочника по Unicode.
Сведения о запуске, остановке и перезагрузке рабочих процессов uWSGI см. в документации uWSGI по управлению процессом uWSGI.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/6.0/howto/deployment/wsgi/uwsgi/