Code前端首页关于Code前端联系我们

Django+uWSGI+nginx部署原理及工作流程

terry 2年前 (2023-09-28) 阅读数 92 #未命名

了解Django的部署原理以及不同服务器组件之间的工作流程。方便大家更深入的了解部署。

1。每个组件的工作流程:

Django 本身只是一个用 Python 编写的开源 Web 框架。没有服务器网关功能,不能直接使用。如果我们想通过外网访问Django项目。因此,作为客户端 首先 我们向服务器发送请求。目前,服务器有一个外部服务组件或接口(如Nginx、Apche等)来接收并响应客户端发送的HTTP请求。该请求将被解析和分析。如果是静态文件请求,则根据nginx指定的静态文件目录返回请求的资源。如果是动态请求,nginx通过配置文件将请求转发给uWSGI; 然后uWSGI处理收到的数据包并将其转发给wsgi。wsgi根据请求调用特定的django项目文件或函数。 Django处理完后将返回值交给wsgi,最后wsgi将返回值打包传给uWSGI。uWSGI接收并转发给nginx。 nginx最终返回一个返回值给客户端(比如浏览器)。

各组件之间的工作流程

Django+uWSGI+nginx部署原理及工作流程

上面我们提到了Nginx、uWsg和wsgi。下面我想简单介绍一下这些组件。

wsgi:

wsgiDjango项目携带的UI文件。如果项目名为myblog,则该文件位于目录[myblog/myblog/wsgi.py]中。实现Python解析的通用接口标准/协议。它是一种通用用户界面标准或用户界面协议,实现了Python Web程序和服务器之间交互的多功能性。它允许像 Django 这样的 Python Web 开发框架轻松部署在不同的 Web 服务器上。

uWSGI:

基于专有的u-wsgi协议、wsgi协议和http服务协议的Web网关。它是一个 python Web 服务器或称为服务器/网关。 uWSGI是一个Web服务器,实现了wsgi和WSGI两种协议,负责响应Python Web请求。

Nginx:

常用的高性能代理服务器。它本身不具备解析动态语言的能力。所以它被分配给其他模块。在Django中,uWSGI实现了wsgi协议、uwsgi协议、http等协议,所以Nginx的HttpUwsgi模块就是和uWSGI服务器进行交互的。

因此,我们在部署时需要使用Nginx和uWSGI来部署Django。其实nginx并不是必须的。wsgi可以完全完成与浏览器的整个交互过程;但由于其他安全或者其他限制,nginx可以对程序进行保护,并且nginx还可以充当多台uWSGI机器的代理,完成uWSGI的下载。均衡;而且静态文件处理能力用nginx更高效,所以Nginx和uWSGI一起使用。

2。安装调试

首先确保服务器上已经安装了Python环境,并且pip安装完成。如果没有,请安装它。由于大多数Linux自带的Python版本与Django所需的版本冲突,或者因为要安装和部署多个版本的Django或Python,所以通常建议使用virtualenv版本通过虚拟环境进行部署。

其次,确保nginx已安装并正常运行。

然后,确保Django以及必要的依赖框架包已安装。测试方法: python manage.py runserver 0.0.0.0:8000

最后安装uWSGI。

上面没问题,配置nginx和uwsgi就可以了。假设我们的 django 项目名为 mysite,位于 /www/wwwroot/mysite 目录中。

uWsig配置

在项目文件中创建uYaoming.ini文件,编辑该文件,配置uYaoming:

#添加配置选择
[uwsgi]
#配置和nginx连接的socket连接
socket=127.0.0.1:8997
#配置项目路径,项目的所在目录
chdir=/www/wwwroot/mysite/
#配置wsgi接口模块文件路径,也就是wsgi.py这个文件所在的目录名
wsgi-file=mysite/wsgi.py
#配置启动的进程数
processes=4
#配置每个进程的线程数
threads=2
#配置启动管理主进程
master=True
#配置存放主进程的进程号文件
pidfile=uwsgi.pid
#配置dump日志记录
daemonize=uwsgi.log

使用以下命令启动并运行uYaoming

uwsgi  --ini  uwsgi.ini

从uYaoming.ini中。表示uYaoming运行成功

可以使用ps -ef|grep uYaoming查看uYaoming是否启动。

uwsg.ini 配置文件 其他相关命令:

#停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --stop uwsgi.pid

#重启uwsgi
uwsgi --reload uwsgi.pid

nginx 配置

假设已安装 nginx 路径为 /usr/local/nginx,则将 nginx.conf 文件备份到 /usr/local/nginx conf/ 以防万一事故。

cp nginx.conf nginx.conf.bak

然后打开nginx.conf,删除原来的内容,直接添加以下内容:

events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    server {
        listen 80;
        server_name  www.django.cn; #改为自己的域名,没域名修改为127.0.0.1:80
        charset utf-8;
        location / {
           include uwsgi_params;
           uwsgi_pass 127.0.0.1:8997;  #端口要和uwsgi里配置的一样
           uwsgi_param UWSGI_SCRIPT mysite.wsgi;  #wsgi.py所在的目录名+.wsgi
           uwsgi_param UWSGI_CHDIR /www/wwwroot/mysite/; #项目路径
           
        }
        location /static/ {
        alias /www/wwwroot/mysite/static/; #静态资源路径
        }
    }
}

进入/usr/local/nginx/sbin/目录
运行命令❝检查配置文件是否为先改正。如果没有问题的话,执行以下命令:

./nginx

这样就可以调试成功,不会出现意外。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门