使用WSGI进行部署


本文整理自网络,侵删。

简介

Django的主要部署平台是WSGI,这是Web服务器和应用程序的Python标准。

Django的startproject管理命令为您设置了一个最小的默认WSGI配置,您可以根据项目的需要对其进行调整,并指导任何符合WSGI的应用服务器使用。

Django包括以下WSGI服务器的入门文档:

  • 如何在Gunicorn中使用Django
  • 如何在uWSGI中使用Django
  • 如何将Django与Apache和 mod_wsgi
  • 从Apache对Django用户数据库进行身份验证

该application对象

使用WSGI进行部署的关键概念是application应用服务器用来与您的代码进行通信的Callable。通常application以在服务器可访问的Python模块中命名的对象的形式提供。

该startproject命令将创建一个/wsgi.py包含此类application可调用文件的文件 。

Django的开发服务器和生产WSGI部署都使用了它。

WSGI服务器application从其配置中获取可调用对象的路径。Django的内置服务器(即runserver 命令)从WSGI_APPLICATION设置中读取它。默认情况下,它设置为.wsgi.application,它指向中的application 可调用对象/wsgi.py。

配置设置模块

当WSGI服务器加载您的应用程序时,Django需要导入settings模块-定义整个应用程序的地方。

Django使用 DJANGO_SETTINGS_MODULE环境变量以找到适当的设置模块。它必须包含指向设置模块的虚线路径。您可以将不同的值用于开发和生产。这完全取决于您如何组织设置。

如果未设置此变量,则默认wsgi.py将其设置为 mysite.settings,其中mysite是项目的名称。这就是 runserver默认情况下发现默认设置文件的方式。

注意:由于环境变量是进程范围的,因此当您在同一进程中运行多个Django站点时,这将无效。这与mod_wsgi一起发生。

为避免此问题,请对每个站点在自己的守护进程中使用mod_wsgi的守护程序模式,或通过在中强制执行来覆盖环境中的值。os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"``wsgi.py

应用WSGI中间件

要应用WSGI中间件,您可以包装应用程序对象。例如,您可以在以下位置添加这些行wsgi.py:

from helloworld.wsgi import HelloWorldApplication
application = HelloWorldApplication(application)

如果您想将Django应用程序与另一个框架的WSGI应用程序结合使用,也可以用自定义WSGI应用程序替换Django WSGI应用程序,该应用程序以后将其委托给Django WSGI应用程序。

Django与Gunicorn 的使用

Gunicorn(“绿色独角兽”)是用于UNIX的纯Python WSGI服务器。它没有依赖性,可以使用安装pip。

安装Gunicorn 

通过运行安装gunicorn 。有关更多详细信息,请参见gunicorn文档。

python -m pip install gunicorn

在Gunicorn中将Django作为通用WSGI应用程序运行

安装Gunicorn后,将gunicorn提供一个命令来启动Gunicorn服务器进程。gunicorn的最简单调用是传递包含名为的WSGI应用程序对象的模块的位置application,对于典型的Django项目,该对象应 类似于:

gunicorn myproject.wsgi

这将启动一个进程,该进程运行一个正在侦听的线程127.0.0.1:8000。它要求您的项目位于Python路径上;确保该命令最简单的方法是在与manage.py文件相同的目录中运行此命令。

有关其他提示,请参见Gunicorn的部署文档。

如何使用Django与uWSGI 

uWSGI是使用纯C编码的快速,自修复且对开发人员/ sysadmin友好的应用程序容器服务器。

也可以看看

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 --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的最新版本(使用您自己的项目名称代替)运行,这将是您的布局。如果该文件不存在,则需要创建它。请参阅“ 如何使用WSGI进行部署”文档,以获取应放在此文件中的默认内容以及可以添加的其他内容。django-admin startproject mysite``mysite

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文件上传

如果UnicodeEncodeError在上传文件名包含非ASCII字符的文件时看到,请确保将uWSGI配置为接受非ASCII文件名,方法是将其添加到您的uwsgi.ini:

env = LANG=en_US.UTF-8

有关详细信息,请参见Unicode参考指南的“ 文件”部分。

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

在Apache和Django中使用Django和mod_wsgi

使用Apache和mod_wsgi部署Django 是使Django投入生产的一种久经考验的方法。

mod_wsgi是一个Apache模块,可以承载任何Python WSGI应用程序,包括Django。Django可以与任何支持mod_wsgi的Apache版本一起使用。

在官方的mod_wsgi文档是你的所有关于如何使用mod_wsgi的详细信息来源。您可能需要从安装和配置文档开始。

基本配置

安装并激活mod_wsgi后,请编辑Apache服务器的 httpd.conf文件并添加以下内容。

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonHome /path/to/venv
WSGIPythonPath /path/to/mysite.com
?
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

该WSGIScriptAlias行的第一位是您要在其上为应用程序提供服务的基本URL路径(/表示根URL),第二位是“ WSGI文件”的位置–参见下文–在系统上,通常在项目内部包(mysite在此示例中)。这告诉Apache使用该文件中定义的WSGI应用程序为给定URL下的任何请求提供服务。

如果您将项目的Python依赖项安装在中,请使用添加路径。有关更多详细信息,请参见mod_wsgi虚拟环境指南。virtual environmentWSGIPythonHome

该WSGIPythonPath行确保您的项目包可用于在Python路径上导入;换句话说,那行得通。import mysite

该`部分确保Apache可以访问您的wsgi.py` 文件。

接下来,我们需要确保wsgi.pyWSGI应用程序对象存在。从Django 1.4版开始,startproject将为您创建一个。否则,您将需要创建它。请参阅WSGI概述文档,以获取应放在此文件中的默认内容以及可以添加的其他内容。

阅读剩余部分

相关阅读 >>

Django 简介

Django 模板

基于类的视图

Django 教程介绍

Django 处理http请求

Django 创建第一个项目

基于类的视图简介

使用asgi进行部署

Django 的安全性

部署静态文章

更多相关阅读请进入《Django》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...