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下,建立一个名为testflask的upstart配置示例。 新建配置文件 /etc/init/testflask.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清单,如果看到testflask则代表upstart配置完成,如果看不到可以用命令initctl reload-configuration 初始化一下upstart。再不行的话就只配置语法有问题了,centos的upstart配置貌似很容易出错,试了好多次才搞定。 upstart配置完成后,常用的命令有:
(initctl) start testflask
(initctl) stop testflask
(initctl) reload testflask
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的简单部署配置。