使用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

  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值