• Centos7上面安装uWSGI 部署项目测试


    Centos7上面安装uWSGI 部署项目测试

    uWSGI服务器
    1、uWSGI

    uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作

    用是与uWSGI服务器进行交换。

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

    WSGI是一种通信协议,Flask,webpy,Django、CherryPy等等都自带WSGI,不过性能都不好。

    Web服务器网关接口(Python Web Server Gateway Interface,缩写为WSGI)

    1、WSGI是一套接口标准协议

    UWSGI同WSGI一样是一种通信协议。

    而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。

    为什么有了uWSGI为什么还需要nginx?因为nginx具备优秀的静态内容处理能力,然后将动态内容转发

    给uWSGI服务器,这样可以达到很好的客户端响应。

    image.png

    统一标准。

    说到这,我们基本理清了 uWSGI 在 web服务器与 web框架之间作用:uWSGI 就像一条纽带,将 web服

    务器与 web框架连接起来。Nginx 属于一种高并发能力 web服务器,Flask属于一种 web框架,因此,

    uWSGI 与 Nginx、Flask 的作用就不明而喻了。

    Nginx,uWSGI,Flask 之间的对话

    Nginx:Hey,uWSGI,我刚收到了一个请求,我需要你作些准备,然后由Flask来处理这个请求。

    uWSGI:OK,Nginx。我会设置好环境变量,然后将这个请求传递给Flask处理。

    Flask:Thanks uWSGI!给我一些时间,我将会把请求的响应返回给你。

    uWSGI:Alright,那我等你。

    Flask:Okay,我完成了,这里是请求的响应结果,请求把结果传递给Nginx。

    uWSGI:Good job!Nginx,这里是响应结果,已经按照要求给你传递回来了。

    Nginx:Cool,我收到了,我把响应结果返回给客户端。大家合作愉快~

    image.png

    2、安装uwsgi
    pip install uwsgi
    
    • 1

    image.png

    安装成功

    image.png

    如果安装失败,出现这个:

    image.png

    使用下面命令安装:

    yum install python3-devel
    
    • 1

    image.png

    如果上面都不行,说明你的python环境安装有问题,按照这个博客,重新安装一下

    https://blog.csdn.net/Deng872347348/article/details/126730677?spm=1001.2014.3001.5501
    
    • 1
    项目上传虚拟机得二种方式

    第一种:通过win本地和虚拟机互传工具,把自己在win本地准备的python3.8的压缩包上传到虚拟机对应的目录下

    互传工具:

    Xfp

    image.png

    WinSCP 也可以互传的

    image.png

    这里用winscp ,输入ip和密码登录就可以

    链接成功

    image.png

    直接在左边win里面把要传的文件,直接鼠标拖动到对应目录下面

    传输成功

    image.png

    第二种

    虚拟机和win本地上传文件还可以通过rz命令进行上传

    yum install lrzsz
    
    • 1

    rz:从本地上传文件至服务器

    image.png

    image.png

    image.png

    有些安装可能没有上面的提示输入y的命令 我这边是全新创建的一个虚拟机环境才有

    直接输入

    rz
    
    • 1

    后面回车找到对应目录,上传就行

    image.png

    在虚拟机里面查看

    image.png

    编写uwsgi.ini文件

    在项目目录下touch一个ini文件(xml,yaml格式),名称随意,vim进去

     [uwsgi]
    socket = 0.0.0.0:8000
    # 设置0.0.0.0表示可以接收不同服务器的nginx发送过来的请求, 127.0.0.1表示只接收同一服务器发送过来的请求, 8000为应用内的监听端口# http = 0.0.0.0:8000 # http为直接作为web服务器启动 # http = :5000 # 启动程序时所使用的地址和端口,通常在本地运行flask项目,
    http = :5000 #启动程序时所需要得地方和端口号,通常在本地运行flask项目
    chdir = /home/MSB-Shopping/  # 项目目录
    wsgi-file = /home/MSB-Shopping/Shopping/main.py # flask程序的启动文件,通常在本地是通过运行 python manage.py runserver 来启动项目的
    callable = app   # 程序内启用的application变量名
    processes = 4 # 处理器个数,进程个数 .一般最大填写CPU的核心数量
    threads = 2 # 线程个数 ,默认的linux系统中一个进程最多2048个线程。 1 ~ 1024
    stats = 0.0.0.0:9191 # 获取uwsgi统计信息的服务地址 ,只能本机访问
    pidfile = /home/uwsgi.pid  # 保存pid信息,方便停止服务和重启的时候用
    daemonize = /home/MSB-Shopping/log/uwsgi.log # 后台运行时记录uwsgi的运行日志
    lazy-apps = true  # 优雅重启 ,当需要连接cassandra时,uwsgi无法启动服务,可以 使用该选项设置
    master-fifo = /opt/mt-search/web-service/mfifo # 使用chain-reloading 逐个work重 启,服务不中断, 命令是 echo c > mfifo
    touch-chain-reload = true # 修改app.py内任意东西 保存即可重启uwsgi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    配置如上,

    没有注释的配置如下:

    [uwsgi]
    http = :5000
    chdir = /home/MSB-Shopping/
    wsgi-file = /home/MSB-Shopping/Shopping/main.py
    callable = app
    processes = 4
    threads = 2
    stats = 0.0.0.0:9191
    pidfile = /home/uwsgi.pid
    daemonize = /home/MSB-Shopping/log/uwsgi.log
    lazy-apps = true
    master-fifo = /opt/mt-search/web-service/mfifo
    touch-chain-reload = true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在进行上面配置时候,要把python项目上传到虚拟机里面

    先切换到项目目录

    image.png

    用vi 编辑配置文件

    vi run.ini
    
    • 1

    image.png

    按照esc 退出 刚刚进入编辑下按 i 字母的插入模块

    按住键盘 shit+q 弹出:后面输入 :wq 报错退出

    再查看一下·是否写入成功

    image.png

    经过测试,ini文件里面不能写这个注释

    所以后面用了下面的文件

    [uwsgi]
    http = :5000
    chdir =  /home/MSB-Shopping/
    wsgi-file = /home/MSB-Shopping/Shopping/main.py
    callable = app
    processes = 4
    threads = 2
    stats = 0.0.0.0:9191
    pidfile = /home/uwsgi.pid
    daemonize = /home/MSB-Shopping/logs/uwsgi.log
    lazy-apps = true
    master-fifo = /opt/mt-search/web-service/mfifo
    touch-chain-reload = true
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    后面这个2行可以去掉:

    master-fifo = /opt/mt-search/web-service/mfifo
    touch-chain-reload = true
    
    • 1
    • 2

    如果这2行没有注释,就要去虚拟机里面创建这个文件夹,不然就报错

    /opt/mt-search/web-service/mfifo
    
    • 1

    这里,直接去掉

    正确配置如下

    image.png

    pidfile = /home/uwsgi.pid  # 保存pid信息,方便停止服务和重启的时候用
    daemonize = /home/MSB-Shopping/log/uwsgi.log # 后台运行时记录uwsgi的运行日志
    这2个不用自己去创建,运行的时候,自动生成
    
    • 1
    • 2
    • 3
    uwsgi启动命令
    uwsgi --ini uwsgi.ini # 启动后直接进控制台 
    nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器 
    uwsgi --reload uwsgi.pid # 重启 
    uwsgi --stop uwsgi.pid # 停止 
    kill -9 pid # 关闭服务,直接kill uwsgi的端口
    
    • 1
    • 2
    • 3
    • 4
    • 5

    虚拟机中启动uwsgi

    uwsgi --ini uwsgi.ini # 启动后直接进控制台
    
    • 1

    image.png

    image.png

    运行配置文件,出现下面错误

    解决办法:找到uwsgi执行位置,建立软链接

    find / -name uwsgi
    
    • 1

    如图

    image.png

    建立软连接

    ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
    
    • 1

    image.png

    输入

    uwsgi --help  #出现下面表示软连接建立成功
    
    • 1

    image.png

    启动uwsgi

    uwsgi --ini run.ini
    
    • 1

    image.png

    查看uwsgi 是否启动

    ps aux | grep uwsgi
    
    • 1

    image.png

    启动成功

    切换到日志目录查看日志是否生成成功

    image.png

    发现成功

    切换其他目录查看

    image.png

    发现uwsgi.pid这个文件也生成成功

     ps -ef | grep uwsgi
    
    ps aux | grep uwsgi
    
    这2个命令都一样可以查看显示系统的进程信息
    第二个更加详细
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    image.png

    停止uwsgi服务

    uwsgi --stop uwsgi.pid  #停止uwsgi服务  这里要变成pid的文件目录
    
    • 1

    image.png

    image.png

    发现uwsgi服务已经停止

    nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器  不在这个uwsgi.ini文件同级目录下面,启动要加文件路径
    
    • 1

    image.png

    发现uwsgi 服务又启动起来了

    kill -9 pid # 关闭服务,直接kill uwsgi的端口
    
    • 1

    image.png

    kill -9 这个后面是进程id 加了进程id就杀死端口了

    image.png

    uwsgi --reload uwsgi.pid # 重启  和上面一样要加路径运行
    
    • 1
  • 相关阅读:
    【springboot+vue项目学习】Unable to start web server引发的问题串
    聊聊Jasypt的StandardPBEByteEncryptor
    3个实用性特别强的毕业论文选题思路
    SQL的语法
    Linux(Centos)服务器探索ffmpeg笔记 (命令行、Nvidia硬件加速、GPU、CPU、CUDA、h264_nvenc、过滤器、加水印)
    MySQL SQL优化
    TX Text Control .NET Server for ASP.NET 32.0 Crack
    【论文报告】2022 | HIRE:首个基于HGNN的即插即用的通用高效知识蒸馏框架
    期权里的资金变化
    .net餐厅管理系统数据层餐厅服务类修改、查询菜品信息
  • 原文地址:https://blog.csdn.net/Deng872347348/article/details/126768838