如何在 uWSGI 中使用 Django — Django 文档

来自菜鸟教程
Django/docs/3.2.x/howto/deployment/wsgi/uwsgi
跳转至:导航、​搜索

如何在 uWSGI 中使用 Django

uWSGI 是一个快速、自我修复和开发人员/系统管理员友好的应用程序容器服务器,用纯 C 编码。

也可以看看

uWSGI 文档提供了 tutorial,涵盖了 Django、nginx 和 uWSGI(许多可能的部署设置)。 下面的文档专注于如何将 Django 与 uWSGI 集成。


先决条件:uWSGI

uWSGI wiki 描述了几个 安装过程 。 使用 Python 包管理器 pip,您可以使用单个命令安装任何 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 在客户端-服务器模型上运行。 您的 Web 服务器(例如,nginx、Apache)与 django-uwsgi“工作”进程通信以提供动态内容。


为 Django 配置和启动 uWSGI 服务器

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 的顶级项目包,其中包含一个包含 WSGI application 对象的模块 mysite/wsgi.py。 如果您使用最新版本的 Django 运行 django-admin startproject mysite(使用您自己的项目名称代替 mysite),您将拥有此布局。 如果此文件不存在,则需要创建它。 请参阅 How to deploy with WSGI 文档,了解您应该放入该文件的默认内容以及您可以添加的其他内容。

此处特定于 Django 的选项是:

  • chdir:需要在Python的导入路径上的目录的路径——即包含mysite包的目录。
  • module:要使用的 WSGI 模块——可能是 :djadmin:`startproject` 创建的 mysite.wsgi 模块。
  • 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 参考指南的 Files 部分。


有关启动、停止和重新加载 uWSGI 工作线程的信息,请参阅 管理 uWSGI 进程 上的 uWSGI 文档。