uWSGI是一个快速、自我修复、开发人员/系统管理员友好的容器服务器,代码完全用C编写。
请参见
uWSGI文档提供一个教程,覆盖Django、nginx和uWSGI(多种部署方式中的一种)。 下面的文档集中在如何将Django与uWSGI集成。
uWSGI的Wiki讲述了几个安装过程。 使用Python包管理器pip,你只用一个命令即可安装任何版本的uWSGI。 像这样:
# Install current stable version.
$ pip install uwsgi
# Or install LTS (long term support).
$ pip install https://projects.unbit.it/downloads/uwsgi-lts.tar.gz
uWSGI 以客户端-服务器模型运作。 你的Web服务器(例如nginx、Apache)与django-uwsgi“worker”进程通信以提供动态内容。
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 virtualenv
--daemonize=/var/log/uwsgi/yourproject.log # background the process
它假设你有一个顶层的项目包名mysite
,且里面有一个包含一个WSGI application
对象的模块mysite/wsgi.py
。 如果你用最近版本的Django 运行django-admin startproject mysite
,将就是这个结构(使用你自己的项目的名称来替代mysite
)。 如果这个文件不存在,你需要创建它。 这个文件的默认内容以及可以添加的其它内容,参见如何使用WSGI部署 的文档。
与Django相关的选项是:
chdir
:目录的路径,应该在Python导入路径中 — 例如包含mysite
包的目录。module
:使用的WSGI 模块 — 可以是startproject
创建的mysite.wsgi
模块。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
如果上传的文件名包含非ASCII字符时遇到UnicodeEncodeError
,通过加入下面这行到你的uwsgi.ini
以确保uWSGI接受非ASCII文件名:
env = LANG=en_US.UTF-8
有关详细信息,请参阅Unicode参考指南的Files部分。
参见uWSGI关于管理uWSGI进程 的文档,以获得启动、停止和重新加载uWSGI工作者进程的信息。
2017年9月6日