如何使用 Django 与 uWSGI¶
uWSGI 是一个快速、自愈且对开发人员/系统管理员友好的应用程序容器服务器,完全用 C 语言编写。
另请参阅
uWSGI 文档提供了一个 教程,涵盖了 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
的顶级项目包,并且在其内部有一个模块 mysite/wsgi.py
,其中包含一个 WSGI application
对象。如果您运行了 django-admin startproject mysite
(使用您自己的项目名称替换 mysite
)并使用了最新版本的 Django,那么您将拥有此布局。如果此文件不存在,则需要创建它。请参阅 如何使用 WSGI 部署 文档以了解应在此文件中放入的默认内容以及可以添加的其他内容。
此处特定于 Django 的选项为
chdir
:需要位于 Python 导入路径上的目录的路径,即包含mysite
包的目录。module
:要使用的 WSGI 模块,可能是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 参考指南的 文件 部分。
有关启动、停止和重新加载 uWSGI 工作进程的信息,请参阅 uWSGI 文档中关于 管理 uWSGI 进程 的内容。