使用nginx+uwsgi+flask部署服务器
现在,假设我们已经写好了flask的脚本。我给他起名叫manager.py。
那么,我们要把自己的flask程序上传到服务器上,使用uwsgi+nginx部署,可供外网访问,我们该怎么做呢?别急,分为以下几个步骤:
1.将脚本上传至服务器。
目录随意,自己能够找到即可,例如/home/test。需要注意千万不要放在/tmp中,否则过后你就会发现他们被当作垃圾清理掉了。
2.安装uwsgi
使用pip即可安装uwsgi,pip install uwsgi
即可。如果报错缺少python.h,别急,先 yum install python-devel
就可以,然后用pip安装一次。
3.安装Nginx
使用yum工具(在centos下,其他linux可以使用apt代替)。sudo yum intall -y nginx
等待安装成功。
4.确认uwsgi与nginx都已经安装成功。
开始进行后面的配置。
5.配置uwsgi
现在,进入刚刚上传了flask脚本的目录cd /home/test
。新建一个文件,叫啥都行,例如test.ini。vi test.ini
进入之后,写下下面的几行:
[uwsgi]
socket= 127.0.0.1:5000
wsgi-file=/home/test/manager.py
callable=app
touch-reload=/home/test/
master = true
这几个参数是什么意思呢?第一个是socket,也就是这个uwsgi程序绑定的套接字(注意,不是http,不是http)这个套接字适用于和nginx反向代理通信的,后面会讲到。
第二个参数是flask文件的路径。
第三个参数是flask对象的名字,(就是那个app=Flask(__name__))里面那个“app”,如果你的叫别的名字,那你就换成那个名字。
第四个参数填写的是一开始你上传到的文件夹的路径,不过不是一个重要的参数。
第五个参数照搬就可以。
保存。
6. 配置Nginx。
打开nginx服务器的配置文件nginx.conf。不会找的话,一般是在**/etc/nginx/nginx.conf**路径下。*如果不是的话,可以使用whereis nginx
命令来找到nginx所在的所有目录,然后一个个看目录下是否有nginx.conf这个文件。*打开它,编辑。仅需修改server代码块重的location代码块。使之变成这样:
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:5000;
}
就可以了。其中,uwsgi_pass参数,后面跟的前面所提到的uwsgi程序的套接字,他们就是通过这个套接字进行通讯的。而大家可以看到在conf文件中的server代码块里面有一个listen 80;这个就是让nginx来监听80端口,并将请求通过127.0.0.1:5000传递给后端的uwsgi,再通过这个端口将后端返回的数据转发给请求(看不懂没关系)。
7. 运行nginx服务器。
运行方法:nginx -c /etc/nginx/nginx.conf
运行成功后用浏览器打开服务器的ip,会显示400bad request。那是因为nginx服务器已经成功开启,但是由于后端的uwsgi没有开启,因此无法将请求转发到后端的uwsgi程序。因此下面我们开启uwsgi
8. 运行uwsgi程序
运行方法:首先切换到test.ini所在的目录(也就是上传文件的目录)。之后,uwsgi --ini test.ini
就可以了。可以看到英文显示成功绑定到127.0.0.1:5000,服务成功开启等字样。在浏览器输入服务器的ip地址,不出意外的话,就可以访问到你写的flask程序了。搞定~(tips:由于直接uwsgi --ini -tesst.ini这样会把信息打印到标准输出,建议用nohup运行)
最后,另外提一提如何关闭服务器以及服务。
关闭nginx:nginx -s stop
关闭uwsgi killall -s INT /path/to/uwsgi (uwsgi的path可以通过whereis查找,若直接kill会导致uwsgi服务重启,无法关闭)