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的简单部署配置。