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服务器,这样可以达到很好的客户端响应。
统一标准。
说到这,我们基本理清了 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,我收到了,我把响应结果返回给客户端。大家合作愉快~
2、安装uwsgi
pip install uwsgi
安装成功
如果安装失败,出现这个:
使用下面命令安装:
yum install python3-devel
如果上面都不行,说明你的python环境安装有问题,按照这个博客,重新安装一下
项目上传虚拟机得二种方式
第一种:通过win本地和虚拟机互传工具,把自己在win本地准备的python3.8的压缩包上传到虚拟机对应的目录下
互传工具:
Xfp
WinSCP 也可以互传的
这里用winscp ,输入ip和密码登录就可以
链接成功
直接在左边win里面把要传的文件,直接鼠标拖动到对应目录下面
传输成功
第二种
虚拟机和win本地上传文件还可以通过rz命令进行上传
yum install lrzsz
rz:从本地上传文件至服务器
有些安装可能没有上面的提示输入y的命令 我这边是全新创建的一个虚拟机环境才有
直接输入
rz
后面回车找到对应目录,上传就行
在虚拟机里面查看
编写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项目上传到虚拟机里面
先切换到项目目录
用vi 编辑配置文件
vi run.ini
按照esc 退出 刚刚进入编辑下按 i 字母的插入模块
按住键盘 shit+q 弹出:后面输入 :wq 报错退出
再查看一下·是否写入成功
经过测试,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
这里,直接去掉
正确配置如下
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 # 启动后直接进控制台
运行配置文件,出现下面错误
解决办法:找到uwsgi执行位置,建立软链接
find / -name uwsgi
如图
建立软连接
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
输入
uwsgi --help #出现下面表示软连接建立成功
启动uwsgi
uwsgi --ini run.ini
查看uwsgi 是否启动
ps aux | grep uwsgi
启动成功
切换到日志目录查看日志是否生成成功
发现成功
切换其他目录查看
发现uwsgi.pid这个文件也生成成功
ps -ef | grep uwsgi
ps aux | grep uwsgi
这2个命令都一样可以查看显示系统的进程信息
第二个更加详细
停止uwsgi服务
uwsgi --stop uwsgi.pid #停止uwsgi服务 这里要变成pid的文件目录
发现uwsgi服务已经停止
nohup uwsgi --ini uwsgi.ini & # 后台启动uwsgi服务器 不在这个uwsgi.ini文件同级目录下面,启动要加文件路径
发现uwsgi 服务又启动起来了
kill -9 pid # 关闭服务,直接kill uwsgi的端口
uwsgi --reload uwsgi.pid # 重启 和上面一样要加路径运行