使用ASGI部署Django的几种方式

服务器介绍

  • Daphne是一个纯PythonASGI服务器,用于UNIX,由Django项目的成员维护。它充当ASGI的参考服务器。
  • Hypercorn是一个支持HTTP/1、HTTP/2和HTTP/3的ASGI服务器,重点是协议支持。
  • Uvicorn是一个基于 uvloop 和 httptools ,强调速度。

为什么要使用asgi?

uwsgi并不能处理websocket请求,所以需要asgi服务器来处理websocket请求

WSGI、uwsgi和ASGI协议

  • 请求接收与转发:WSGI、uwsgi和ASGI服务器负责接收来自客户端的请求,并将请求转发给相应的应用程序处理。这一过程中,服务器需要解析请求中的信息,并将必要的数据传递给应用程序
  • 应用程序处理:应用程序根据接收到的请求数据进行处理,并生成相应的响应。在处理过程中,应用程序可以调用各种资源和方法,以完成对请求的处理。
  • 响应返回:应用程序处理完请求后,将生成的响应返回给服务器。服务器再将响应发送回客户端。在这一过程中,协议规定了响应的格式和传输方式

方式一:使用Daphne部署Django

**Daphne:**目的是提供高效、快速的HTTP和WebSocket服务,可以处理大量并发连接

python3.7及以上版本才可安装

安装 Daphne

python -m pip install daphne

在 Daphne 中运行 Django

一旦 Daphne 安装完毕,你就可以使用 daphne 命令了,它将用来启动 Daphne 服务进程。在最简单的情形下,Daphne 加上包含一个 ASGI 应用模块的位置和应用的名称(以冒号分隔)。

对于一个典型的 Django 项目,可以像下面这样来启动 Daphne

> daphne myproject.asgi:application

命令格式:

daphne -b <绑定IP> -p <绑定端口> myproject.asgi:application

它将开启一个进程,监听 127.0.0.1:8000 。这需要你的项目位于 Python path 上。为了确保这点,你应该在与 manage.py 文件相同的路径中运行这个命令。

例如,以下命令将启动一个绑定在127.0.0.1:8000上,使用4个工作进程的Daphne服务器,并将访问日志输出到access.log文件中:

daphne --bind 127.0.0.1 --port 8000 --workers 4 --access-log access.log myproject.asgi:application

常用参数详解

下面是一些常用的 Daphne 参数:

--port: 指定 Daphne 监听的端口,默认为8000。

--bind: 指定 Daphne 监听的 IP 地址和端口,格式为ip:port。

--unix-socket: 指定 Daphne 监听的 Unix 域套接字路径。

--verbosity: 指定日志详细程度,可选的值有 0(只输出错误信息)、1(输出错误信息和警告信息)、2(输出错误信息、警告信息和一般信息)。

--access-log: 指定访问日志文件路径,如果不指定,则不会记录访问日志。

--root-path: 指定静态文件根目录,用于提供静态文件服务。

--ping-interval: 指定 Websocket ping 的间隔时间,单位为秒,默认为20秒。

--ping-timeout: 指定 Websocket ping 超时时间,单位为秒,默认为30秒。

--http-timeout: 指定 HTTP 请求超时时间,单位为秒,默认为120秒。

--websocket-timeout: 指定 Websocket 连接超时时间,单位为秒,默认为120秒。

方式二:使用Hypercorn部署Django

安装Hypercorn

> python -m pip install hypercorn

在 Hypercorn 中运行 Django

安装了Hypercorn后 hypercorn 命令可用于运行ASGI应用程序。调用Hypercorn时需要使用包含ASGI应用程序对象的模块的位置,后跟应用程序的名称(用冒号分隔)。

对于一个典型的Django项目,调用Hypercorn将如下所示:

> hypercorn myproject.asgi:application

执行位置同上

方式三:使用Uvicorn部署Django

安装Uvicorn

> python -m pip install uvicorn

在 Uvicorn 中运行 Django:

uvicorn myproject.asgi:application

执行位置同上

使用nginx代理转发配置参考:

upstream backend {

server 127.0.0.1:8000;

There could be more than a backend here

}

server {

server_name my-domain.com;

location / {

proxy_pass http://backend;

proxy_set_header Host $host;

proxy_set_header X-Real-IP $remote_addr;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header X-Forwarded-Proto $scheme;

}

}

直接代理转发

参考文档:

如何使用 ASGI 来部署 | Django 文档 | Django

Deploying --- Channels 4.0.0 documentation

相关推荐
懒大王爱吃狼1 小时前
Python教程:python枚举类定义和使用
开发语言·前端·javascript·python·python基础·python编程·python书籍
秃头佛爷2 小时前
Python学习大纲总结及注意事项
开发语言·python·学习
深度学习lover3 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
API快乐传递者4 小时前
淘宝反爬虫机制的主要手段有哪些?
爬虫·python
码农小旋风5 小时前
详解K8S--声明式API
后端
Peter_chq5 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml46 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~6 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616886 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端