最近在学习Flask,本文介绍一下如何部署Flask开发的应用,同时也学习一下Nginx的使用,这只是在Mac上的一个实验。html
这里使用的应用就是官方的文档中给出的Flaskr。python
使用HomeBrew安装Nginx:nginx
shell$ brew install nginx
HomeBrew会自动安装Nginx及其依赖的程序。在个人电脑上安装的是Nginx 1.6.2,配置文件的路径是/usr/local/etc/nginx/nginx.conf
。shell
启动Nginx的命令:flask
shell$ nginx
Nginx的默认端口是8080,用浏览器打开localhost:8080
,显示以下所示的页面说明Nginx已经工做了。浏览器
修改Nginx的配置文件:服务器
server { listen 80; server_name localhost; charset utf-8; location / { try_files $uri @flaskr; } location @flaskr { include fastcgi_params; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param SCRIPT_NAME ""; fastcgi_pass unix:/tmp/flaskr-fcgi.sock; } }
从新启动Nginx:app
shell$ nginx -s quit $ sudo nginx
由于使用了80端口,启动Nginx时须要加上sudo
。socket
启动完成后,访问localhost
:学习
访问时出现了错误,这是由于咱们的应用尚未启动。
Nginx是一个静态WEB服务器,不能直接运行咱们的Python应用,当Nginx接受到请求时,会经过FastCGI转发给咱们的应用,应用是运行在FastCGI Server上的,这个server接收Nginx的请求并调用咱们的程序,将结果返回给Nginx,Nginx再将结果返回给用户。
咱们要使用的FastCGI Server是flup,安装方法:
shell$ pip install flup
在应用目录下建立一个fcgi文件,例如flaskr.fcgi:
Python#!/usr/bin/python from flup.server.fcgi import WSGIServer from flaskr import app if __name__ == '__main__': WSGIServer(app, bindAddress='/tmp/flaskr-fcgi.sock').run()
同时给fcgi文件可执行的权限:
shell$ chmod +x flaskr.fcgi
手动启动server:
shell$ screen $ ./flaskr.fcgi
使用screen使server在后台运行,或者:
shell$ nohup ./flaskr.fcgi &
再次访问localhost
就能够看到咱们的应用了。
第一次运行FastCGI server后,任然没法访问,查看Nginx的日志后发现Nginx服务器没有权限访问socket文件,修改nginx.conf添加user配置:
user wzy;
启动的时候Nginx报错:
nginx: [emerg] getgrnam("wzy") failed in /usr/local/etc/nginx/nginx.conf:2
Google一下后发现要加上用户组才行,改为这样:
user wzy wheel;
再次启动Nginx后一切正常了。
Nginx配置项user
的使用方法:
Syntax: user user [group]; Default: user nobody nobody;
若是忽略group,Nginx会使用和user名称同样的用户组,例如我设置user wzy
,那么Nginx启动的时候会去查找用户组wzy
,个人电脑上没有这个用户组,因此Nginx会报错。