flask 部署_Flask教程(十二)项目部署

软硬件环境

  • ubuntu 18.04 64bit
  • anaconda3 with python 3.7
  • pycharm 2020.1.2
  • flask 1.1.2
  • gunicorn 20.0.4
  • nginx 1.14.0

前言

Flask框架内部实现了一个简易的Web服务器,因此在之前的教程中,我们并没有去单独安装Web服务器,但是如果项目要在生产环境中部署的话,其内置的服务器是不适合的,既不够稳定,也无法承受大量请求的并发,Flask+gunicorn+nginx+supervisor是最常用的Flask应用部署方案,本文就来一步一步进行Flask应用程序的部署

什么是WSGI

Web Server Gateway Interface,即web服务器网关接口,是Web服务器和Web应用程序或框架之间的一种简单而通用的接口,它是一种协议,一种规范,专门用来解决众多Web服务器和Web应用程序或框架的兼容性问题。有了WSGI,你不用担心你写的Web应用程序只能运行在某一款Web服务器上。

gunicorn

目前Flask官方列出了5个常用的WSGI容器,它们都实现了WSGI,我们使用最常用的gunicorn

f584ab8434a0a74b44298057225c09ee.png

flask

它的安装非常方便,使用pip即可

pip install gunicorn

接下来就可以启动gunicorn服务了,我们使用 Flask教程(十)表单处理Flask-WTF 中的示例,进入到源码目录,执行gunicorn -w 2 -b :5000 run:app

命令中的-w指的是处理请求的进程数,-b是指绑定本机ip,可以省略掉不写,使用的端口是5000,run:app指的是run.py中的flask app,更多参数帮助可以参照gunicorn -h

bb0126c0ebc9b2e1657ec37f0518e181.png

flask

这时候在浏览器中访问http://192.168.1.140:5000,这里的192.168.1.140是ubuntu系统的ip地址

af21ec6b67021fe84ccccb2a964d7c49.png

flask

效果与Flask内置服务器是一模一样的

nginx

nginx是一个功能强大的反向代理服务器,我们使用nginx来转发gunicorn服务。为什么要在gunicorn之上再加层nginx呢?一方面nginx可以补充gunicorn在某些方面的不足,如SSL支持、高并发处理、负载均衡处理等,另一方面如果是做一个web网站,除了服务之外,肯定会有一些静态文件需要托管,这方面也是nginx的强项

首先安装nginx

sudo apt install nginx

编辑配置文件/etc/nginx/sites-available/default,修改location /如下

# 注意下这里的监听端口,访问的时候会用到listen 80 default_server;listen [::]:80 default_server;location / {    # First attempt to serve request as file, then    # as directory, then fall back to displaying a 404.    try_files $uri $uri/ =404;    proxy_pass http://localhost:5000/;    proxy_redirect off;    proxy_set_header Host $http_post;    proxy_set_header X-Real-IP $remote_addr;    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}

接下来重启nginx服务

sudo /etc/init.d/nginx restart

这时候一定要确保gunicorn服务已经启动,然后访问http://192.168.1.140

9d01fde907354ad06352828ab25b261e.png

flask

supervisor

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制,更详细的使用方法请参考之前的文章 https://xugaoxiang.com/2019/12/04/supervisor/

首先创建/etc/supervisor/conf.d/gunicorn.conf文件,这是gunicorn服务的配置文件

[program:gunicorn]command=/home/xugaoxiang/anaconda3/bin/gunicorn -w 2 -b :5000 run:appdirectory=/home/xugaoxiang/workshop/Flask-10-wtfautostart=trueautorestart=trueuser=xugaoxiangredirect_stderr=true

接着还是同样的方法创建nginx的配置文件,/etc/supervisor/conf.d/nginx.conf,内容是

[program:nginx]command=/usr/sbin/nginx -g 'daemon on;'autostart=trueautorestart=trueuser=rootredirect_stderr=true

nginx是需要root权限的,所以user应该设置成root。最后就可以重启supervisor

sudo /etc/init.d/supervisor restart

重启成功后,我们来查看下gunicornnginx是否启动正常

eca2b6cdd0d6739bb67ae543484d390b.png

flask

以及Flask应用是否正常

9d01fde907354ad06352828ab25b261e.png

flask

参考资料

  • Flask教程(十)表单处理Flask-WTF
  • 官方部署文档
  • https://zh.wikipedia.org/zh-hans/Web服务器网关接口
  • https://github.com/benoitc/gunicorn
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值