使用uWSGI在生产环境下部署Flask服务

admin 2024年8月18日21:24:39评论8 views字数 1241阅读4分8秒阅读模式

之前搞的小程序后端服务是Flask写的,然后投产实际使用中,采用的是Nginx+uWSGI+Flask的架构,简单记录下配置过程

uWSGI

uWSGI是一个应用服务器,它是生产上常用的处理高并发问题的中间件。Flask本身是自带了服务的,更多的是开发阶段的本地调试使用。如果部署到生产后访问量很大的情况下,Flask本身的性能是不足以支撑的,所以就需要在前面增加一层uWSGI来进行请求的处理。

即使只有一个 Flask 服务节点 , uWSGI 可以启动并管理多个 Flask 应用进程,并且可以多个进程之间均衡请求负载,优化性能。

架构

在Nginx+uWSGI+Flask的架构中,简化如下

使用uWSGI在生产环境下部署Flask服务

使用

uWSGI的安装很简单

pip install uwsgi

假设我们有一个flask的应用

from flask import Flaskapp = Flask(__name__)@app.route('/')def hello_world():    return 'Hello, World!'if __name__ == '__main__':    app.run()

那么这个时候,我们通过uWSGI来启动这个服务的方式如下

uwsgi --http :5000 --wsgi-file app.py --callable app

这会在端口 5000 上启动 uWSGI,并将请求传递给 Flask 应用中的 app 对象。即此时通过 http://127.0.0.1:5000 即可访问。

配置文件

上述仅仅是命令启动,更多的时候会使用配置文件的方式启动,例如:

[uwsgi]http = 127.0.0.1:5000wsgi-file = server.pycallable = appprocesses = 5daemonize = uwsgi.logpidfile = uwsgi.pid

上述只是一个简单的配置,通过如下命令启动即可:

uwsgi --ini app.ini

这样的话便会在后台启动5个服务进程

Nginx联动

当uWSGI的服务启动后,例如 127.0.0.1:5000,那么在Nginx中把该地址作为location后的代理地址即可

http {  server {    listen 80;    server_name xxx.com;    location / {        proxy_pass http://127.0.0.1:5000;    }  }}

上述方法比较简单,

或者通过uWSGI生成的app.sock进行转发

首先,在uWSGI的配置文件中加上socket的参数

[uwsgi]...processes = 5socket = app.sock...

这样会在启动目录下生成一个app.sock的socket文件

随后在Nginx中配置如下

http {  server {    listen 80;    server_name xxx.com;    location / {        include uwsgi_params;        uwsgi_pass unix:/path/app.sock;    }  }}

也可以完成反代联动

使用uWSGI在生产环境下部署Flask服务

使用uWSGI在生产环境下部署Flask服务

原文始发于微信公众号(飞羽技术工坊):使用uWSGI在生产环境下部署Flask服务

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月18日21:24:39
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用uWSGI在生产环境下部署Flask服务https://cn-sec.com/archives/3077552.html

发表评论

匿名网友 填写信息