天天看点

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服务器,这样可以达到很好的客户端响应。

Centos7上面安装uWSGI 部署项目测试
统一标准。

说到这,我们基本理清了 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,我收到了,我把响应结果返回给客户端。大家合作愉快~

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

2、安装uwsgi

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

安装成功

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

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

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

使用下面命令安装:

yum install python3-devel      
Centos7上面安装uWSGI 部署项目测试

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

项目上传虚拟机得二种方式

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

互传工具:

Xfp

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

WinSCP 也可以互传的

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

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

链接成功

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

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

传输成功

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

第二种

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

yum install lrzsz      

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

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

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

直接输入

rz      

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

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

在虚拟机里面查看

Centos7上面安装uWSGI 部署项目测试
编写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      

配置如上,

没有注释的配置如下:

[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      

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

先切换到项目目录

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

用vi 编辑配置文件

vi run.ini      
Centos7上面安装uWSGI 部署项目测试

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

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

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

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

经过测试,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      

后面这个2行可以去掉:

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

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

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

这里,直接去掉

正确配置如下

Centos7上面安装uWSGI 部署项目测试
pidfile = /home/uwsgi.pid  # 保存pid信息,方便停止服务和重启的时候用
daemonize = /home/MSB-Shopping/log/uwsgi.log # 后台运行时记录uwsgi的运行日志
这2个不用自己去创建,运行的时候,自动生成      

uwsgi启动命令

uwsgi --ini uwsgi.ini # 启动后直接进控制台 
nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器 
uwsgi --reload uwsgi.pid # 重启 
uwsgi --stop uwsgi.pid # 停止 
kill -9 pid # 关闭服务,直接kill uwsgi的端口      

虚拟机中启动uwsgi

uwsgi --ini uwsgi.ini # 启动后直接进控制台      
Centos7上面安装uWSGI 部署项目测试
Centos7上面安装uWSGI 部署项目测试

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

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

find / -name uwsgi      

如图

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

建立软连接

ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi      
Centos7上面安装uWSGI 部署项目测试

输入

uwsgi --help  #出现下面表示软连接建立成功      
Centos7上面安装uWSGI 部署项目测试

启动uwsgi

uwsgi --ini run.ini      
Centos7上面安装uWSGI 部署项目测试

查看uwsgi 是否启动

ps aux | grep uwsgi      
Centos7上面安装uWSGI 部署项目测试

启动成功

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

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

发现成功

切换其他目录查看

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

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

ps -ef | grep uwsgi

ps aux | grep uwsgi

这2个命令都一样可以查看显示系统的进程信息
第二个更加详细      
Centos7上面安装uWSGI 部署项目测试

停止uwsgi服务

uwsgi --stop uwsgi.pid  #停止uwsgi服务  这里要变成pid的文件目录      
Centos7上面安装uWSGI 部署项目测试
Centos7上面安装uWSGI 部署项目测试

发现uwsgi服务已经停止

nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器  不在这个uwsgi.ini文件同级目录下面,启动要加文件路径      
Centos7上面安装uWSGI 部署项目测试

发现uwsgi 服务又启动起来了

kill -9 pid # 关闭服务,直接kill uwsgi的端口      
Centos7上面安装uWSGI 部署项目测试
uwsgi --reload uwsgi.pid # 重启  和上面一样要加路径运行      

继续阅读