Nginx+gunicorn+upstart方式部署flask

Linux下flask web项目的部署,也是本博客在阿里云服务器上的部署方式。


flask + gunicorn

动态网站/后端接口要被客户端访问到,一般是通过过wsgi协议解析。wsgi是服务端和客户端交互的接口规范,wsgi服务器的作用是接受和分析用户的请求,调用应用程序进行处理并返回结果。wsgi服务器或叫做应用服务器,python里面一般用uwsgi和gunicorn,都是广泛应用和比较成熟的。这里使用gunicorn配置启动flask应用。安装完gunicorn后即可启动flask应用:

gunicorn -w 4 -b 127.0.0.1:8080 app:app

app:app 第一个app是文件名,第二个app是flask python代码中定义的app名。

gunicorn + upstart

上面已经用gunicorn开启了flask应用,linux中的upstart可以配置便捷的命令行启动,以centos举例,只需了解一下upstart的配置语法即可配置自己的upstart job/service,upstart配置放在/etc/init下,建立一个名为molockflask的upstart配置示例。
新建配置文件 /etc/init/molockflask.conf 内容如下:

start on runlevel [2345]
stop on runlevel [!2345]
respawn
env PATH=/usr/share/nginx/flaskenv/bin:$PATH
chdir /usr/share/nginx/flaskenv
exec gunicorn -w 4 -b 127.0.0.1:8080 app:app >> /usr/share/nginx/flaskenv/log.txt 2>&1

initctl list 命令可以列出当前生效的upstart清单,如果看到molockflask则代表upstart配置完成,如果看不到可以用命令initctl reload-configuration 初始化一下upstart。再不行的话就只配置语法有问题了,centos的upstart配置貌似很容易出错,试了好多次才搞定。
upstart配置完成后,常用的命令有:

(initctl) start molockflask
(initctl) stop molockflask
(initctl) reload molockflask

upstart文档:http://upstart.ubuntu.com/cookbook/

用nginx进行反向代理

前面两步已经部署好flask应用服务了,最后一步用nginx进行反向代理,配置挺简单的,nginx示例配置如下:

location /random {
proxy_pass http://127.0.0.1:8080; # 反向代理
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_set_header Connection "";
proxy_http_version 1.1;
}

其中proxy_pass这一行就完成了反向代理。

至此就完成了nginx+gunicorn+upstart对flask的简单部署配置。