Django 1.8.2 文档

如何使用uWSGI 部署Django

uWSGI 是一个快速、自我修复、开发人员/系统管理员友好的容器服务器,代码完全用C 编写。

另见

uWSGI 文档提供一个教程,覆盖Django、nginx 和uWSGI(多种部署方式中的一种)。下面的文档集中在如何将Django 与uWSGI 集成。

前提条件:uWSGI

uWSGI  的Wiki 讲述了几个安装过程使用Python 包管理器pip,你只用一个命令即可安装任何版本的uWSGI。例如:

# Install current stable version.
$ pip install uwsgi

# Or install LTS (long term support).
$ pip install http://projects.unbit.it/downloads/uwsgi-lts.tar.gz

警告

某些发行版本包括Debian 和Ubuntu,原生带有一个过时的uWSGI 版本,它们不遵循WSGI 的规范。1.2.6 之前的版本在处理一个请求后,不调用响应对象的close在这些情况下,不会发送request_finished 信号。它将导致数据库和memcache 服务器的空闲连接。

uWSGI 的模型

uWSGI 以客户端-服务器模型运作。你的Web 服务器(例如nginx、Apache)与一个django-uwsgi 进程交互来服务动态的内容。参见uWSGI 的后台的文档 以获得更多的细节。

配置并启动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 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

参见uWSGI 关于管理uWSGI 进程 的文档,以获得启动、停止和重新加载uWSGI 工作者进程的信息。