使用WSGI部署Django的几种方式

部署服务器介绍:

  • Gunicorn ('Green Unicorn') 是一个 UNIX 下的纯 Python WSGI 服务器
  • uWSGI 是一个快速的,自我驱动的,对开发者和系统管理员友好的应用容器服务器,完全由 C 编写
  • Apache 和 mod_wsgi 在生产环境部署已经过充分测试

方式一:使用 Gunicorn 托管 Django

安装 Gunicorn

> pip install gunicorn

把 Django 当作普通 WSGI 应用在 Gunicorn 中运行

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

> gunicorn myproject.wsgi

这样会创建一个进程,包含了一个监听在 127.0.0.1:8000 的线程。前提是你的项目在 Python path 中,要满足这个条件,最简单的方法是在 manage.py 文件所在的目录中运行这条命令。

方式二:使用 uWSGI 托管 Django

uWSGI 文档提供了一个覆盖 Django,nginx,和 uWSGI(一个配置,多种适配)。以下文档专注于如何用 uWSGI 集成 Django。

前置条件:uWSGI

安装uwsgi

pip install 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,这就是你运行 django-admin startproject mysite (使用你的项目名替换 mysite)后得到的目录结构。若该文件不存在,你需要创建它

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

方式三:使用 Apache 和 mod_wsgi 托管 Django

mod_wsgi 是一个 Apache 模块,它可以管理任何 Python WSGI 应用,包括 Django

Django 支持所有支持 mod_wsgi 的 Apache 版本

基础配置

一旦你安装了 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 下的请求。

如果你在某个 virtual environment 1 内为应用安装项目的 Python 依赖,将该 virtualenv 的路径添加至 WSGIPythonHome

WSGIPythonPath 行确保你的项目包能从 Python path 导入

使用 mod_wsgi 后台模式

"Daemon mode" 是运行 mod_wsgi 的推荐模式(在非 Windows 平台上)。为了创建必要的后台进程组并在其中运行 Django 实例,你需要添加合适的 WSGIDaemonProcessWSGIProcessGroup 指令。上述配置在你使用后台模式时需要点小修改,即你不能使用 WSGIPythonPath ;作为替换,你要在 WSGIDaemonProcess 中添加 python-path 选项,例如:

WSGIDaemonProcess example.com python-home=/path/to/venv python-path=/path/to/mysite.com

WSGIProcessGroup example.com

如果你想在子目录中开放你的项目(本例中 https://example.com/mysite ),你可在上述配置中添加 WSGIScriptAlias

WSGIScriptAlias /mysite /path/to/mysite.com/mysite/wsgi.py process-group=example.com

静态文件服务

Django 本身并不提供文件,它把这项工作留给你选择的任何一个网络服务器。

我们建议使用一个单独的 Web 服务器独立提供静态文件服务如:

  • Nginx
  • Apache

参考文档

如何部署 Django - 如何使用 WSGI 进行部署 - 《Django v4.1 中文文档》 - 书栈网 · BookStack

相关推荐
B站_计算机毕业设计之家1 小时前
计算机毕业设计:Python当当网图书数据全链路处理平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·django·flask·pandas·课程设计
q_35488851534 小时前
计算机毕业设计:Python当当网图书大数据分析平台 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
大数据·爬虫·python·机器学习·数据分析·django·课程设计
q_35488851537 小时前
计算机毕业设计源码:Python动漫智能推荐与可视化分析系统 Django框架 协同过滤推荐算法 可视化 数据分析 大数据 大模型(建议收藏)✅
python·scrapy·数据分析·django·课程设计·旅游·推荐算法
B站计算机毕业设计之家8 小时前
Python 基于协同过滤的动漫推荐与数据分析平台 Django框架 协同过滤推荐算法 可视化 数据分析 大数据 大模型 计算机毕业设计(建议收藏)✅
大数据·python·scrapy·数据分析·django·课程设计·推荐算法
B站计算机毕业设计之家10 小时前
计算机毕业设计源码:Python图书数据智能采集与可视化大屏 当当网 Django框架 爬虫 Pandas 可视化 大数据 大模型 书籍(建议收藏)✅
爬虫·python·机器学习·信息可视化·django·pandas·课程设计
小陈工18 小时前
FastAPI性能优化实战:从每秒100请求到1000的踩坑记录
python·性能优化·django·flask·numpy·pandas·fastapi
vx-程序开发1 天前
springboot在线装修管理系统-计算机毕业设计源码56278
java·c语言·spring boot·python·spring·django·php
chushiyunen1 天前
python日志logging、django日志等
python·django
杰杰7981 天前
一文掌握Django模型——认识模型
数据库·python·django
漫随流水2 天前
旅游推荐系统(getEchartsData.py)
python·django·旅游