• nginx + uwsgi部署


    1 总体业务流程

    1.1 总体概述

    1.1.1 web容器
    • web容器是帮助我们部署java、php、python、vue等项目的
    • web容器是帮助django服务端处理客户端连接,官方号称可以处理10万(实现高并发)
    • web容器是帮助处理静态资源请求(html、css、JS),返回给客户端浏览器(django等web服务器处理静态资源能力差)
    1.1.2 常见web容器
    • nginx(python、php)
      • LNMP
        • L:LInux
        • N:Nginx
        • M:MySQL
        • P: php
    • apache(PHP)
      • LAMP
        • L:LInux
        • A:Apache
        • M:MySQL
        • P: php
    • Tomcat(JAVE)
    1.1.3 WSGI
    WSGI是一种 python专用 的web协议 和http类似
    WSGI实质:WSGI是一种描述web服务器(如 nginx,uWSGI web服务器 )如何与 web框架 (如用
    Django、Flask框架写的程序)通信的规范、协议
    WSGI定义了使用 python编写的web app(django)与web server(uWSGI)之间接口格式
    
    * 为什么需要web协议:
    1)不同的框架有不同的开发方式,但是无论如何,开发出的 应用程序(django)都要和服务器 (nginx)程序配合 ,才能为用户提供服务。
    2) 这样, 服务器程序(nginx) 就需要为不同的框架提供不同的支持,只有支持它的服务器才能被开发出的应用使用,显然这是不可行的。
    3)web协议本质:就是定义了 Web服务器和Web应用程序或框架之间的一种简单而通用的接口规范。
    
    1.1.4 uWSGI
    什么是uWSGI: uWSGI是一个全功能的HTTP服务器,实现了WSGI协议 、uwsgi协议 、http协议等。
    uWSGI作用:它要做的就是把HTTP协议转化成语言支持的网络协议,比如把HTTP协议转化成WSGI协议,让Python可以直接使用。uWSGI特点:轻量级,易部署,性能比nginx差很多,支持多种协议
    
    1.1.5 Nginx
    Nginx是一个Web服务器,其中的HTTP服务器功能和 uWSGI功能很类似
    但是Nginx还可以用作更多用途,比如最常用的 反向代理、负载均衡、拦截攻击等,而且性能极高
    单台nginx号称可以处理10万并发
    
    1.1.6 Django
    Django是一个Web框架,框架的作用在于处理request和 reponse,其他的不是框架所关心的内容。
    所以如何部署Django不是Django所需要关心的。
    

    1.2 nginx+uwsgi+django部署各模块作用

    1.3 Django + Uwsgi + Nginx方案

    1.请求处理整体流程:
    nginx接收到浏览器发送过来的http请求,将包进行解析,分析url
    * 静态文件请求:就直接访问用户给nginx配置的静态文件目录(html/css/js/图片),直接返回用户请求的静态文件。
    * 动态接口请求: 那么nginx就将请求转发给uWSGI,最后到达django处理
    2.各模块作用。
    nginx:是对外的服务器,外部浏览器通过url访问nginx,nginx主要处理静态请求(html/css/js/图片) 
    uWSGI:是对内的服务器,主要用来 处理动态请求 。(从mysql、redis、es等中动态查询到的
    数据)。
    uwsgi:是一种web协议,接收到请求之后将包进行处理,处理成wsgi可以接受的格式,并发给wsgi。
    wsgi:是python专用的web协议,根据请求调用应用程序(django)的某个文件,某个文件的某个函数。
    django:是真正干活的,查询数据等资源,把处理的结果再次返回给WSGI, WSGI将返回值进行打包,打包成uwsgi能够接收的格式。
    uwsgi:接收wsgi发送的请求,并转发给nginx,nginx最终将返回值返回给浏览器。
    

    1.4 Django + uWSGI方案特点

    没有nginx而只有uwsgi的服务器,则是Internet请求直接由uwsgi处理,并反馈到web项目中。
    nginx可以实现安全过滤,防DDOS等保护安全的操作,并且如果配置了多台服务器,nginx可以保证服务器的负载相对均衡。
    而uwsgi则是一个web服务器,实现了WSGI协议(Web Server Gateway Interface),http协议等,它可以接收和处理请求,发出响应等。所以只用uwsgi也是可以的。
    

    1.5 nginx和uWSGI特点

    1.5.1 nginx的作用
    反向代理,可以拦截一些web攻击,保护后端的web服务器
    负载均衡,根据轮询算法,分配请求到多节点web服务器
    缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用
    
    1.5.2 uWSGI的适用
    单节点服务器的简易部署
    轻量级,好部署
    

    2 后端部署

    2.1 Django的settings配置

    # 正式上线关闭调试模式, 不会暴露服务器信息
    DEBUG = True
    # 允许的主机
    ALLOWED_HOSTS = ['*']
    # 静态资源收集位置
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    # 命令行执行
    python manage.py collectstatic
    

    2.2 关于 uwsgi

    2.2.1 安装uwsgi
    workon syl
    pip3 install uwsgi 		# 安装uwsgi 
    whereis uwsgi 			# 查看uwsgi安装路径
    
    2.2.2 uwsgi_conf中写入uwsgi.ini
    # vim /root/shiyanlou_project/uwsgi_conf/uwsgi.ini
    # vim中,A键进入插入模式,ESC退出,:wq保存并退出
    # 或者pycharm中直接粘贴也可以
    [uwsgi] 
    # 使用Nginx连接时使用,Django程序所在服务器地址和端口号 
    socket=127.0.0.1:8000 
    # 项目目录绝对路径 
    chdir=/root/shiyanlou_project/syl 
    # 项目中wsgi.py文件的目录,相对于项目目录 
    wsgi-file=syl/wsgi.py 
    # 进程数(机器核数的1倍) 
    processes=4 
    # 线程数 
    threads=20 
    # uwsgi服务器的角色 
    master=True 
    # 存放进程编号的文件 
    pidfile=uwsgi.pid 
    # 日志文件 
    daemonize=uwsgi.log 
    # 指定依赖的虚拟环境 
    virtualenv=/root/.virtualenvs/syl
    
    2.2.3 用uwsgi启动django
    # 一定要在项目目录里面
    uwsgi --http 192.168.56.100:6666 --file syl/wsgi.py --static-map=/static=static
    # 访问项目 访问项目:http://192.168.56.11 (只是测试)
    

    2.3 关于nginx

    2.3.1 安装nginx
    sudo apt update 	# 更新ap
    sudo apt install nginx # 安装nginx [root@linux-node1 /]# sudo systemctl status nginx # 查看nginx状态
    
    2.3.2 配置nginx+uwsgi启动
    # etc/nginx/conf.d/django.conf 
    server {
            listen 8888;
            server_name 192.168.56.100;
                    location /static {
                            alias /root/shiyanlou_project/syl/static;
                    }
    
                    location / {
                            include uwsgi_params;
                            uwsgi_pass 127.0.0.1:8000;
                            uwsgi_ignore_client_abort on;
                    }
    }
    
    2.3.3 解读
    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; 
        # 客户浏览器访问nginx服务记录(客户 户端访问异常时可以查看) 
        error_log /var/log/nginx/error.log; 
        # nginx错误日志(nginx启动时报错的 日志)
        include /etc/nginx/conf.d/*.conf; 
        # nginx扩展配置文件件 
        include /etc/nginx/sites-enabled/*; 
    }
    

    2.4 uwsgi和nginx操作日志

    2.4.1 启动并查看nginx日志
    systemctl restart nginx 
    # 开启nginx 
    
    tail -f /var/log/nginx/access.log 
    # 查看nginx接入日志 
    
    tail -f /var/log/nginx/error.log 
    # 查看nginx错误日志 
    
    2.4.2 启动并查看uwsgi日志
    cd /root/shiyanlou_project/uwsgi_conf 
    # 进入实验楼目录 
    
    uwsgi --ini uwsgi.ini 
    # 启动uwsgi的 django项目 
    # http://192.168.56.11:8888/ 访问项目 
    
    uwsgi --stop uwsgi.pid 
    # 关闭uwsgi
    
    tail -f uwsgi.log 
    # 查看uwsgi日志
    
  • 相关阅读:
    Git原理与命令大全
    【网络安全】加解密算法最详解
    陪你阅读《区块链:从数字货币到信用社会》序一
    Splunk初识
    红帽学习记录[RHCE] ISCSI远程块储存
    DNS 域名系统与邮件服务器
    红帽学习记录[RHCE] 防火墙与网络合作
    红帽学习笔记[RHCE]网络配置与路由转发
    红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置
    红帽学习笔记[RHCSA] 第二周
  • 原文地址:https://www.cnblogs.com/mapel1594184/p/13973205.html
Copyright © 2020-2023  润新知