在CentOS上配置Nginx+Gunicorn+Python+Flask环境的教程
Python基础环境搭建
CENTOS6.X系列默认安装的Python2.6,目前开发中主要是使用Python2.7,这两个版本之间还是有不少差异的,程序在Python2.6下经常会出问题。
比如:re.sub函数,2.7支持flags参数,而2.6却不支持。
所以,打算安装Python2.7来运行Flask应用程序,但2.6不能删除,因为系统对它有依赖。
1、安装sqlite-devel
因为Flask应用程序可能使用能Sqlite数据库,所以这个得装上(之前因为没装这个,导致Python无法导入sqlite3库。
当然,也可以从源码编译安装。
yuminstallsqlite-devel-y
2、安装Python2.7
wgethttps://www.python.org/ftp/python/2.7.8/Python-2.7.8.tgz tarxfPython-2.7.8.tgz cdPython-2.7.8 ./configure--prefix=/usr/local make&&makeinstall
安装成功之后,你可以在/usr/local/bin/python2.7找到Python2.7。
3、安装setuptools+pip
这里需要注意,一定要使用python2.7来执行相关命令。
#FirstgetthesetupscriptforSetuptools: wgethttps://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py #TheninstallitforPython2.7: python2.7ez_setup.py #Nowinstallpipusingthenewlyinstalledsetuptools: easy_install-2.7pip #Withpipinstalledyoucannowdothingslikethis: pip2.7install[packagename] pip2.7install--upgrade[packagename] pip2.7uninstall[packagename]
4、使用virtualenv
#InstallvirtualenvforPython2.7andcreateasandboxcalledmy27project: pip2.7installvirtualenv virtualenv-2.7my27project #CheckthesystemPythoninterpreterversion: python--version #ThiswillshowPython2.6.6 #Activatethemy27projectsandboxandchecktheversionofthedefaultPythoninterpreterinit: sourcemy27project/bin/activate python--version #ThiswillshowPython2.7.X deactivate
基本就是这些了,网上很多教程都说要做软链接,但我感觉那样做或多或少会对系统有一些未知的影响。这个方法能尽量保持系统的完整性,很多自带Python程序其实在头部都指定了#!/usr/bin/python,所以它们用的其实是Python2.6,而不是新安装的Python2.7。
Nginx+Supervisor+Gunicorn部署Flask应用程序
1.安装supervisor
$sudopipinstallsupervisor
创建一个Flask程序
创建虚拟环境:
$mkdir/tmp/wwwroot/web1 $cd/tmp/wwwroot/web1 $virtualenvdeps $sourcedeps/bin/activate $pipinstallflaskgunicorn
创建一个简单的Flask程序:
$cat>myapp.py<<EOF
fromflaskimportFlask app=Flask(__name__) @app.route("/") defindex(): return"helloflask01"
使用gunicorn执行Flask程序:
最简单的用法:
$gunicorn-b127.0.0.1:3721myapp:app
现在访问http://127.0.0.1:3721,应该可以看到"helloflask01"。
这里3721端口只是一个演示。
2.配置supervisor
创建配置文件:
$cd/tmp/wwwroot $echo_supervisord_conf>supervisor.conf $cat>>supervisor.conf<<EOF
[program:myapp] ;user=digwtx command=/tmp/wwwroot/web1/deps/bin/gunicorn-b127.0.0.1:3721myapp:app directory=/tmp/wwwroot/web1 process_name=%(program_name)s;process_nameexpr(default%(program_name)s) numprocs=1;numberofprocessescopiestostart(def1) stopsignal=QUIT;signalusedtokillprocess(defaultTERM) redirect_stderr=true;redirectprocstderrtostdout(defaultfalse) stdout_logfile=/tmp/myapp.log;stdoutlogpath,NONEfornone;defaultAUTO
启动进程:
$supervisord-csupervisor.conf
管理进程:
$supervisorctl-csupervisor.conf
3.配置nginx:
主要是把请求转交给gunicorn进行处理。
server{ listen8080; #默认请求 location/{ #请求转向本机ip:3721 proxy_passhttp://127.0.0.1:3721;#这里是gunicorn监听的地址 proxy_redirectoff; proxy_set_headerHost$host:8080;#如果端口不是80要写上 proxy_set_headerX-Real-IP$remote_addr; proxy_set_headerX-Forwarded-For$proxy_add_x_forwarded_for; } }
现在重启nginx,访问http://127.0.0.1:8080应该可以看到"helloflask01"。
自动启动:
那么,如果想开机时自动启动怎么办呢?或者说,如果机器重启了,那WEB服务就断了。
其实呢,也很简单,只要在/etc/rc.d/rc.local中加入一句就可以了:
supervisord-c/tmp/wwwroot/supervisor.conf