##背景
最近断断续续搞过一些小玩意,一般都是需要通过网络请求获取数据。自然而然的就想到了用Python来做,Python做服务端应用比较熟的就是Flask了。但是自己测试的时候用python命令行起一个简单的服务器很容易,但是想要做成稳定的服务器来调用还是要费些功夫的。本文就是记录一下用uWSGI和Nginx在Ubuntu 14.04上搭建Flask应用的流程。
##准备工作
首先当然要安装一下Python的基础环境和Nginx:
1 | sudo apt-get update |
安装了pip之后,我们就可以安装uwsgi和flask:
1 | pip install uwsgi flask |
##创建一个应用
现在就可以简单的创建一个Python应用:
1 | vi ~/myproject/myproject.py |
这里就直接贴一个简单的例子:
1 | from flask import Flask |
写完之后可以先运行一下:
1 | python myproject.py |
如果一切正常的话,用浏览器打开127.0.0.1:5000就能看到”Hello World!”了。
##配置uWSGI
###创建wsgi.py
应用写好了就可以配置uWSGI了,首先创建一个wsgi.py文件:
1 | vi ~/myproject/wsgi.py |
在这个文件中就是简单的将我们之前创建的应用引入并执行:
1 | from myproject import application |
创建好文件之后就可以运行uwsgi来试一下:
1 | uwsgi --socket 0.0.0.0:8000 --protocol=http -w wsgi |
注意这里端口我们指定的是8000,所以用浏览器打开127.0.0.1:5000就能看到”Hello World!”了。
###创建uWSGI配置文件
下面要创建一个uWSGI配置文件:
1 | vi ~/myproject/myproject.ini |
在配置文件中我们指定一些配置参数,这样在运行usgi的时候就不需要写那么多参数了。简单的配置如下:
1 | [uwsgi] |
其中:[uwsgi]
是说明这个文件是针对uwsgi的配置,相当于说明文件类型。
module = wsgi
是对应于之前创建的wsgi.py
的文件。
master = true
是说是使用master模式启动。
processes = 5
这个是线程数5个。
socket = myproject.sock
由于与客户端交互的是Nginx,所以uWSGI这里只是负责与Nginx通信,使用Unix socket方式进行通信是比较高效的方式。
chmod-socket = 660
修改一下权限,让Nginx能够访问。
vacuum = true
是说在进程结束时关闭socket。
die-on-term = true
由于Upstart和uWSGI对于系统的SIGTERM信号处理不同,所以这里强制指定一下处理的逻辑。
###创建Upstart脚本文件
如果需要Ubuntu系统启动的时候就自动启动我们的应用,那么就要创建Upstart脚本文件。文件放在/etc/init
目录下:
1 | sudo vi /etc/init/myproject.conf |
然后我们编辑一下里面的内容:
1 | description "uWSGI server instance configured to serve myproject" |
其中:
description
描述一下这个脚本的作用
start/stop on runlevel
指明该脚本在什么情况下运行,一般的runlevel就是2, 3, 4, 5
setuid & setgid
设置运行的uid和gid,其中Nginx运行时需要用户组为www-data
最后就是执行我们的uwsgi命令了
编写好之后运行:
1 | sudo start myproject |
##配置Nginx
Nginx的配置就比较简单了,首先在sites-available
创建一个server文件用于指定我们的服务:
1 | sudo vi /etc/nginx/sites-available/myproject |
然后配置一下:
1 | server { |
这里比较简单就不过多说明了。之后软链接到sites-enabled
中:
1 | sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled |
然后检查一下我们的配置编写是否有问题:
1 | sudo nginx -t |
如果返回OK,那么我们就可以重启Ngnix来加载最新的配置了:
1 | sudo service nginx restart |
之后我们就可以通过Nginx配置的地址访问我们的服务了。
DONE!
参考:
How To Serve Flask Applications with uWSGI and Nginx on Ubuntu 14.04