• 周五. 4月 26th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

django生产环境部署

admin

11月 28, 2021

1.django生产环境部署

生产环境中的数据流

参考文档:

wsgi详解:https://blog.csdn.net/li_101357/article/details/52748323

wsgi协议介绍(萌新版):https://blog.csdn.net/j163you/article/details/80919360

廖雪峰web编程讲解:https://www.liaoxuefeng.com/wiki/897692888725344/923057027806560

WSGI是什么?

  1. WSGI是一种规范,它定义了使用python编写的web app(django)与web server(uWSGI)之间接口格式,实现web app与web server间的解耦。

  2. WSGI 没有官方的实现, 因为WSGI更像一个协议. 只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行

  3. WSGI实质:WSGI是一种描述web服务器(如nginx,uWSGI等服务器)如何与web应用程序(如用Django、Flask框架写的程序)通信的规范、协议。

为什么需要web协议:

 1)不同的框架有不同的开发方式,但是无论如何,开发出的应用程序都要和服务器程序配合,才能为用户提供服务。

 2) 这样,服务器程序就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。

 3)web协议本质:就是定义了Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。

Web协议介绍

 Web协议出现顺序: CGI -> FCGI -> WSGI -> uwsgi

  1. CGI: 最早的协议

  2. FCGI: 比CGI快

  3. WSGI: Python专用的协议

  4. uwsgi: 比FCGI和WSGI都快,是uWSGI项目自有的协议,主要特征是采用二进制来存储数据,议都是使用字符串,所以在存储空间和解析速度上,都优于字符串型协议.

uwsgi是什么?

  1. 它是一个二进制协议,可以携带任何类型的数据。

  2. 一个uwsgi分组的头4个字节描述了这个分组包含的数据类型。

  3. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信;

uWSGI是什么?(web服务器 和nginx类似

  1. 什么是uWSGI: uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。

  2. uWSGI**作用:**它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

  3. uWSGI特点:轻量级,易部署,性能比nginx差很多

 注:

  如果架构是Nginx+uWSGI+APP,uWSGI是一个中间件  如果架构是uWSGI+APP,uWSGI是一个服务器

WSGI / uwsgi / uWSGI 这三个概念的区分。

  • WSGI是一种通信协议。通常用户django框架和uWSGI服务器之间通信。(如果说的更细致的话就是用来和Python WSGI model通信)

  • uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。

  • 而uWSGI是实现了uwsgi和WSGI等协议的Web服务器

nginx是什么?

  1. Nginx是一个Web服务器,其中的HTTP服务器功能和uWSGI功能很类似

  2. 但是Nginx还可以用作更多用途,比如最常用的反向代理、负载均衡、拦截攻击等,而且性能极高

django是什么?

  1. Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。

  2. 所以如何部署Django不是Django所需要关心的。

请求处理整体流程

  • nginx接收到浏览器发送过来的http请求,将包进行解析,分析url

  • 静态文件请求:就直接访问用户给nginx配置的静态文件目录,直接返回用户请求的静态文件

  • 动态接口请求:那么nginx就将请求转发给uWSGI,最后到达django处理

各模块作用

  1. nginx:是对外的服务器,外部浏览器通过url访问nginx,nginx主要处理静态请求

  2. uWSGI:是对内的服务器,主要用来处理动态请求

  3. uwsgi:是一种web协议,接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi

  4. WSGI:是python专用的web协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数

  5. django:是真正干活的,查询数据等资源,把处理的结果再次返回给WSGI, WSGI 将返回值进行打包,打包成uwsgi能够接收的格式

  6. uwsgi接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器

Django + uWSGI方案

  1. 没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。

  2. nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。

  3. 而uwWSGI则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。

nginx和uWSGI特点

1)nginx的作用

  1.反向代理,可以拦截一些web攻击,保护后端的web服务器

  2.负载均衡,根据轮询算法,分配请求到多节点web服务器

  3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

2)uWSGI的适用

  1.单节点服务器的简易部署

  2.轻量级,好部署

2.安装uwsgi 配置uWSGI

2.1 安装uwsgi

'''1. 安装uwsgi'''
[root@linux-node1 /]# workon syl
[root@linux-node1 /]# pip3 install uwsgi     # 安装uwsgi
[root@linux-node1 /]# whereis uwsgi          # 查看uwsgi安装路径
uwsgi: /root/.virtualenvs/syl/bin/uwsgi

2.2 配置uwgsi.ini启动文件


1.每个请求处理时间为0.5s?
2.当前配置QPS是多少?(每秒能处理的请求数量)
QPS就是160
  • uwsgi_conf/uwsgi.ini下新建这个文件

[root@linux-node1 /]# vim uwsgi_conf/uwsgi.ini
[uwsgi]
# 使用Nginx连接时使用,Django程序所在服务器地址和端口号p
socket=127.0.0.1:3031
#http=172.16.240.177:8000
# 项目目录绝对路径
chdir=/root/from/P8
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=P8/wsgi.py
# 进程数(机器核数的1倍)
processes=4
# 线程数
threads=50
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/root/.virtualenvs/text_dev
 

2.3 使用uwsgi启动django:一定要在这个项目目录中

  • 测试命令,和我们下面没有任何关系

'''3. 使用uwsgi启动django:一定要在这个项目目录中'''
[root@linux-node1 /]# uwsgi --http 192.168.56.100:6666 --file syl/wsgi.py --static-map=/static=static
访问项目:http://192.168.56.11

3.安装配置nginx

3.1 安装nginx

[root@linux-node1 /]# sudo apt update                  # 更新apt
[root@linux-node1 /]# sudo apt install nginx           # 安装nginx
[root@linux-node1 /]# sudo systemctl status nginx      # 查看nginx状态

3.2 配置nginx+uwsgi启动

  • /etc/nginx/conf.d/文件夹下新建任意名字 xxx.conf即可,写入的内容是官方给的

# /etc/nginx/conf.d/django.conf
server {
    listen       8888;
    server_name  172.20.30.173;
        # /teach/shiyanlou_project/syl/static/admin/css/base.css
        # http://192.168.56.100/static/admin/css/base.css
        location /static {   
            alias /teach/shiyanlou_project/syl/static;
        }
    
        location / {
              include uwsgi_params;
              uwsgi_pass172.20.30.173;
              uwsgi_ignore_client_abort on;
        }
}


3.3 /etc/nginx/nginx.confnginx主配置文件解读(不用变)

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
​
events {
    worker_connections 768;      # 链接数量
}
​
http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    access_log /var/log/nginx/access.log;         # 1.客户浏览器访问nginx服务记录(客户户端访问异常时可以查看)
    error_log /var/log/nginx/error.log;           # 2.nginx错误日志(nginx启动时报错的日志)
    include /etc/nginx/conf.d/*.conf;             # 3.nginx扩展配置文件
    include /etc/nginx/sites-enabled/*;
}

4. uwsgi和nginx 启动、关闭、查看日志

'''1.启动并查看nginx日志'''
[root@linux-node1 demo2]# systemctl restart nginx         # 开启nginx
root@dev:uwsgi_conf# tail -f /var/log/nginx/access.log    # 查看nginx接入日志
root@dev:uwsgi_conf# tail -f /var/log/nginx/error.log     # 查看nginx错误日志
'''2.启动并查看uwsgi日志'''
root@dev:uwsgi_conf# cd /teach/shiyanlou_project/uwsgi_conf     # 进入实验楼目录
[root@linux-node1 demo2]# uwsgi --ini uwsgi.ini        # 启动uwsgi的django项目
[root@linux-node1 demo2] #ps -ef |grep  uwsgi          #查看uwsgi的状态
# http://192.168.56.100:8888/ 访问项目
[root@linux-node1 demo2]# uwsgi --stop uwsgi.pid                # 关闭uwsgi
[root@dev:uwsgi_conf# tail -f uwsgi.log                         # 查看uwsgi日志
 

(syl) root@dev:uwsgi_conf# ps -ef|grep uwsgi       # 查看uwsgi服务是否启动
root      92328  89266  0 14:37 pts/1    00:00:00 grep --color=auto uwsgi
(syl) root@dev:uwsgi_conf# netstat -anptu | grep 8888     # 查看8888端口被哪一个程序占用


 nginx的配置

server {
    listen       8000;
    server_name  172.20.30.173;
        # /teach/shiyanlou_project/syl/static/admin/css/base.css
        # http://192.168.56.100/static/admin/css/base.css
        #location /static {
        #    alias /teach/shiyanlou_project/syl/static;
        #}

        location / {
              include uwsgi_params;
              uwsgi_pass 127.0.0.1:3031;
              uwsgi_ignore_client_abort on;
        }
}
server {
              listen 8080;     #1.你想让你的这个项目跑在哪个端口
              server_name 172.20.30.173;     #2.当前服务器ip
       location / {
           root   /root/from/dist;     #3.dist文件的位置(我是直接放在home目录下了)
            try_files $uri $uri/ /index.html;     #4.重定向,内部文件的指向(照写)
       }
}

 uwsgi的配置

[uwsgi]
# 使用Nginx连接时使用,Django程序所在服务器地址和端口号p
socket=127.0.0.1:3031
#http=172.16.240.177:8000
# 项目目录绝对路径
chdir=/root/from/P8
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=P8/wsgi.py
# 进程数(机器核数的1倍)
processes=4
# 线程数
threads=50
# uwsgi服务器的角色
master=True
# 存放进程编号的文件
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log
# 指定依赖的虚拟环境
virtualenv=/root/.virtualenvs/text_dev

《django生产环境部署》有2个想法
  1. Wow, fantastic weblog format! How lengthy have you ever been running a blog for?
    you make running a blog look easy. The total glance of
    your website is magnificent, let alone the content material!

    You can see similar here ecommerce

  2. Hey! Do you know if they make any plugins to help with Search Engine Optimization? I’m trying to get my
    website to rank for some targeted keywords but I’m not seeing very good success.
    If you know of any please share. Appreciate it! You can read
    similar blog here: Scrapebox AA List

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注