项目部署
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
它的安装非常方便,使用pip
即可
pip install gunicorn |
接下来就可以启动gunicorn
服务了,我们使用 Flask教程(十)表单处理Flask-WTF 中的示例,进入到源码目录,执行gunicorn -w 2 -b :5000 run:app
在windows中并不能使用gunicorn,我们可以将服务部署在ubuntu上
命令中的-w
指的是处理请求的进程数,-b
是指绑定本机ip
,可以省略掉不写,使用的端口是5000,run:app
指的是run.py
中的flask app
,更多参数帮助可以参照gunicorn -h
这时候在浏览器中访问http://192.168.1.140:5000
,这里的192.168.1.140是ubuntu
系统的ip
地址
效果与Flask
内置服务器是一模一样的
nginx
nginx
是一个功能强大的反向代理服务器,我们使用nginx
来转发gunicorn
服务。为什么要在gunicorn
之上再加层nginx
呢?一方面nginx
可以补充gunicorn
在某些方面的不足,如SSL
支持、高并发处理、负载均衡处理等,另一方面如果是做一个web
网站,除了服务之外,肯定会有一些静态文件需要托管,这方面也是nginx
的强项
首先安装nginx
sudo apt install nginx |
编辑配置文件/etc/nginx/sites-available/default
,修改location /
如下
# 注意下这里的监听端口,访问的时候会用到 |
接下来重启nginx
服务
sudo /etc/init.d/nginx restart |
这时候一定要确保gunicorn
服务已经启动,然后访问http://192.168.1.140
supervisor
supervisor
是一个用python
语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor
监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制,更详细的使用方法请参考之前的文章 https://xugaoxiang.com/2019/12/04/supervisor/
首先创建/etc/supervisor/conf.d/gunicorn.conf
文件,这是gunicorn
服务的配置文件
[program:gunicorn] |
接着还是同样的方法创建nginx
的配置文件,/etc/supervisor/conf.d/nginx.conf
,内容是
[program:nginx] |
nginx
是需要root
权限的,所以user
应该设置成root
。最后就可以重启supervisor
了
sudo /etc/init.d/supervisor restart |
重启成功后,我们来查看下gunicorn
和nginx
是否启动正常
以及Flask
应用是否正常