时间:2022-12-08来源:www.pcxitongcheng.com作者:电脑系统城
之前聊了很多flask的知识点,那么完成一个flask项目之后,该这么让大家使用呢,直接放到本地,还是需要放到服务器上,放到服务器上又这么操作的呢,那么我们今天来聊聊flask项目部署。
首先在这里需要了解部署的目的,是让所有人或者指定的人可以访问到这个项目,并且可以更高效的提供服务给用户,这里就有些需要思考的关键点了:
然后基于这些点对比开发过程当中Flask自带的轻量级服务器很容易就发现了一些我们需要注意的点:
基本的部署思路是采用nginx作为和前端进行交互的服务器,因为,Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。nginx除了单点具备高性能的特点之外,也可以很方便的进行集群配置,比如:结合keepalive实现高可用,或者基于nginx和反向代价服务集群都是很方便的。
Gunicorn 服务器作为 wsgi app 的容器,能够与各种 Web 框架兼容(flask,django 等),得益于 gevent 等技术,使用 Gunicorn 能够在基本不改变 wsgi app 代码的前提下,大幅度提高 wsgi app 的性能。
所以基于这样的策略,可以让nginx指向gunicorn,gunicorn指向flask来做高性能部署,当然也可以直接使用gunicorn+flask部署,但是不建议nginx+flask部署,毕竟flask本身的性能是一个很大的瓶颈。
假如项目是main.py
1 2 3 4 5 6 7 8 |
from flask import Flask app = Flask(__name__) @app .route( "/" ) def index(): return "Hello Flask" # 如果用gunicorn的话,那么必须这么写不然的话,会提示找不到 if __name__ = = '__main__' : app.run() |
安装gunicorn
1 2 |
pip3 install gunicorn #安装gunicorn ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #配置环境变量 |
使用命令启动项目
1 | gunicorn -w 4 -b 0.0.0.0:8080 main:app #main文件下的app变量 |
-w 4 使用4个worker进程执行服务
-b 0.0.0.0:8080 绑定当前服务器所有ip的8080端口
使用配置
config.py
1 2 3 |
workers = 5 # 定义同时开启的处理请求的进程数量,根据网站流量适当调整 worker_class = "gevent" # 采用gevent库,支持异步处理请求,提高吞吐量 bind = "127.0.0.1:8000" # 这里8080可以随便调整 |
常用配置
参数 | 描述 |
---|---|
debug | 是否开启debug模式,部署选false |
bind | 访问地址 |
workers | 工作进程数 |
threads | 工作线程数 |
timeout | 超时时间 |
loglevel | 输出日志级别 |
pidfile | 运行日志路径 |
accesslog | 访问日志路径 |
errorlog | 错误日志路径 |
加载配置文件启动项目
1 | gunicorn -c config.py main:app |
nginx安装这里就不详细解释了,直接聊配置吧(默认配置文件位置:/usr/local/nginx/conf/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
upstream flask { server 127 .0.0.1: 8000; } #这里可以添加多个地址,也就是可以指向多个gunicorn服务器, server { # 监听80端口 listen 80; # 本机 server_name localhost; # 默认请求的url location / { #请求转发到gunicorn服务器 proxy_pass http : //flask; #设置请求头,并将头信息传递给服务器端 proxy_set_header Host $host; } } |
关于部署先聊这么多,以上就是Nginx Gunicorn flask项目部署思路分析详解的详细内容
2024-07-07
myeclipse怎么导入tomcat教程2024-07-07
myeclipse如何启动tomcat2024-07-07
myeclipse如何绑定tomcat上线了一个小的预约程序,配置通过Nginx进行访问入口,默认的日志是没有请求时间的,因此需要配置一下,将每一次的请求的访问响应时间记录出来,备查与优化使用....
2023-03-17