django+Nginx+uWSGI

django+Nginx+uWSGI

前言


相关知识

django

基于python的一个web框架,同类框架有Flask等

web
  • .在理解uWSGI和WSGI之前,先要弄清楚web开发的两大块,web服务器和web框架
  • web服务器即用来接受客户端请求,建立连接,转发响应的程序。至于转发的内容是什么,交由web框架来处理,即处理这些业务逻辑。如查询数据库、生成实时信息等。
  • Nginx就是一个web服务器,Django或flask就是web框架。
"wsgi"

实现python解析的通用接口标准/协议,俗称web服务网关接口

​ 需要搞清一点:wsgi不是服务器、Python模块、框架、API或者任何软件,它只是一种规范,描述web服务器与web程序通信的规范

"uwsgi"

同wsgi一样,也是一种通信协议,是一个uWSGI服务器自有的协议,它用于定义传输信息的类型,它与wsgi相比是两样东西,是实现了WSGI协议的一个web服务器

"uWSGI"

uWSGI是实现了uwsgi和wsgi两种协议的Web服务器,负责相应python的web请求。

​ uWSGI实现 wsgi协议、uwsgi协议、http协议

uWSGI和nginx
  • .那么如何实现uWSGI和WSGI的配合呢?
  • 如何做到任意一个web服务器,都能搭配任意一个框架呢?
    • ​ 这就产生了WSGI协议。只要web服务器和web框架满足WSGI协议,它们就能相互搭 配。 所以WSGI只是一个协议,一个约定。而不是python的模块、框架等具体的。
  • .而uWSGI则是实现WSGI协议的一个web服务器。即用来接受请求,转发响应的程序。 实际上,一个uWSGI的web服务器,再加上Django这样的框架,就已经可以实现网站功能了
那为啥还需要nginx?

一个普通的个人网站,访问量不大的时候,用uWSGI和Django部署是没问题的,但是一旦访问量过大,客户的请求连接就要进行长时间的等待。 这个时候就出现了分布式服务器,也就是说我用多台服务器,这些服务器都能处理请求,但是谁来分配客户的的请求连接和web服务器呢?Nginx就是这样一个管家的存在,由他分配,这其实就是Nginx的反向代理,即代理服务器。


理想流程

为使项目被公网访问,以下是大体的操作步骤:

前期

​ 1.获取 登录 服务器

​ 购买 实例,选择 配置和操作系统

​ SSH (IP地址和SSH密钥来访问服务器)

​ 2.依赖 和 上传

​ 更新操作系统并安装所需的系统依赖,例如Python、Nginx、uWSGI、Redis等。

​ 将 Django项目文件上传到服务器, 使用xftp

​ 3.创建虚拟环境

​ 为 隔离项目依赖, 在服务器上创建一个Python虚拟环境并在其中安装项目所需的Python库。

中期

​ 4.安装、配置 **uWSGI **和 Nginx

​ 安装uWSGI并配置 以托管 Django应用程序。

​ 配置nginx,将请求从公网转发到uWSGI服务器,同时提供静态文件服务。

nginx?

​ 以前我们使用 python manage.py runserver 来运行服务器。这只适用测试环境中使用。正式发布的服务,我们需要一个可以稳定而持续的服务器,比如Nginx

​ 5.数据库 和 Redis

​ 确保在服务器上配置并迁移数据库。

​ 配置并运行Redis服务器。

​ 6.启动应用

​ 启动uWSGI和Nginx服务器以确保Django应用程序在公网上可访问。

后期

​ 7.域名设置

​ 配置域名解析,将 域名 指向阿里云服务器的IP地址。

​ 8.安全性、监控、日志

​ 防火墙、HTTPS、访问控制等。

​ 设置服务器监控和日志记录,以便随时跟踪应用程序性能和问题。

​ 9.备份策略

​ 实施定期备份策略,以防止数据丢失或服务器故障。


项目实现原理

为什么这样部署,这样部署有什么好处,每个组件都起什么作用?

步骤拆解
  • 首先客户端请求服务资源,

  • nginx作为直接对外的服务接口,接收到客户端发送过来的http请求,会解包、分析,

    • 如果是静态文件请求就根据nginx配置的静态文件目录,返回请求的资源,
    • 如果是动态的请求,nginx就通过配置文件,将请求传递给uWSGI;uWSGI 将接收到的包进行处理,并转发给wsgi,
      • (注:不同的组件之间传递信息涉及到数据格式和协议的转换)
  • wsgi根据请求调用django工程的某个文件或函数,处理完后django将返回值交给wsgi,

  • wsgi将返回值进行打包,转发给uWSGI,

  • uWSGI接收后转发给nginx,nginx最终将返回值返回给客户端(如浏览器)。

拓展理解
  1. \ 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;
  2. \ 在nginx上加上安全性或其他的限制,可以达到保护程序的作用;
  3. \ uWSGI本身是内网接口,开启多个work和processes可能也不够用,而nginx可以代理多台uWSGI完成uWSGI的负载均衡;
  4. \ django在debug=False下对静态文件的处理能力不是很好,而用nginx来处理更加高效。

实际安装与逐步配置(待完成)

基础环境 的准备
配置nginx和uWSGI 部署django
启动 各项
错误补充
posted on 2023-11-08 09:44  言行一  阅读(9)  评论(0编辑  收藏  举报