运维平台的搭建已经提上日程,而我选用了大家比较常用的“uWSGI+Nginx+Django”的架构,这里先记录一下安装uWSGI的过程。
这里解释一下“uWSGI+Nginx+Django”,我们整个流程如下图:
这里我们可以看出,web server是无法与我们的app(django等等)进行直接对话,他需要通过uwsgi这个桥梁,这个桥梁很重要,虽然我们使用django的runserver功能也会打开一个页面,但是这个页面是很脆弱的,小规模使用还好,要是放在网络上供人点击,根本就是脆不经风。
uWSGI是啥,请查看文末的参考资料,写的已经非常好了。
uWSGI的安装比较简单,推荐使用#yum install Uwsgi直接下载使用,而不推荐用#pip install uwsgi,因为pip 安装的话,虽然也能成功(如下图红框),是没有uwsgi.ini文件的,其实没有这个uwsgi.ini是无足轻重的,因为这个文件可以自己写,但是对于生手来说,没有这个文件可能会心里发毛,就无法按照攻略继续下去,所以我更推荐用yum安装,如图:
为了纪念我们的金刚狼同志,我们就写一个叫logan.py,里面的内容是这样的:
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return "good bye,Logan..."
然后我们就可以启动这个uwsgi看看效果,使用#uwsgi --http :8001 --wsgi-file logan.py,把端口设定为8001,同时指定协议是http,然后加载的文件就是logan.py,启动之后,如图:
遇到这种情况,你就#yum install uwsgi-plugin-Python,然后把命令做一点点修改,改成:#uwsgi --plugin python --http-socket :8001 --wsgi-file logan.py
屏幕会出现一大堆文字,然后提示,uwsgi已经启动成功了。在浏览器输入“服务器外网地址:8001”看一下效果,如图:
我们在root目录下再写一个测试的文件,这次我们写一个比较老实的python脚本来测试,这个脚本就叫test.py,里面的内容如图:
#!/usr/bin/python
#coding=utf-8
import os
import sys
def application(environ, start_response):
status = '200'
output = 'this is a test for uwsgi,HOHO~'
response_headers = [('Content-type', 'text/plain'),('Content-Length', str(len(output)))]
start_response(status, response_headers)
return output
还是用刚才的方法,依旧可以打开网页,其实上面这个简单的uWSGI程序更好理解整个套路,只需要实现一个名为application的函数就可以了,该函数有两个参数,environ为包含有http请求的环境变量,start_response为一个函数,用来设置http头。在这个函数里,我们只需要调用一次start_response函数,设置一下HTTP返回头,再return一个HTTP body即可。
至此,整个uWSGI就安装成功了。
更多参考
Nginx+uWSGI+Supervisor在Ubuntu上部署Flask应用
uWSGI+Django+Nginx的工作原理流程与部署过程
Nginx+uWSGI+Django+Python 应用架构部署
Ubuntu Server 14.04.2 LTS 配置 Nginx + Uwsgi + Django