zoukankan      html  css  js  c++  java
  • 前后端项目部署-2, flask+Gunicorn+gevent,docker部署,

    ####

    部署方案flask+Gunicorn+gevent

    每个组件的作用:

    1,. gunicorn:高性能WSGI服务器;

    Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server。
    和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点。

    目前Gunicorn只能运行在Linux环境中,不支持windows平台

    部署 Flask 应用时,为什么会需要 gunicorn 或 uWSGI?

    简单说就是 Flask自带的wsgi性能低下

    只适合你开发调试的时候用,

    线上你必须用Gunicorn+Nginx才能获得更强的性能,和更高的安全性

    下面我说一些废话:

    django、flask 都有自带的http server,

    仅仅是方便我们开发的时候调试代码而已

    这些开源框架的维护者不可能投入大量精力来优化自带的wsgi服务器,

    他们需要把更多的精力投入到框架自身的优化中,

    因为服务器方面已经有Gunicorn/uWSGI、nginx等优秀的开源解决方案

    假设我们用自带的来部署到线上,会有什么问题呢?

    性能很差,差到不好意思出门见人(如果你的网站就几十个人访问,那性能应该问题不大)

    最后我个人建议的方案是 flask+Gunicorn+gevent+supervisor+nginx

    所以说为什么使用Gunicorn,简单点就是为了并发。利用异步,提高性能。

    2. gevent:把Python同步代码变成异步协程的库;

    gevent:gunicorn 默认使用同步阻塞的网络模型(-k sync),对于大并发的访问可能表现不够好,我们很方便地顺手套一个gevent来增加并发量

    ####

    第一步,准备一个简单的flask项目,

    很简单只需要一个文件,

     

     app.py

    from flask import Flask
    
    app = Flask(__name__)
    
    
    @app.route('/')
    def alldata():
        return '<h1>Hello World!</h1>'
    
    
    #
    if __name__ == "__main__":
        """初始化,debug=True"""
        app.run(host='0.0.0.0', port=9876, debug=True)

    ###

    第二步,gunicorn 安装,Gevent安装

    pip install gunicorn

    pip install gevent

    ###

    第三步,在根目录下新建文件 /gunicorn.conf.py

    workers = 5    # 定义同时开启的处理请求的进程数量,根据网站流量适当调整
    worker_class = "gevent"   # 采用gevent库,支持异步处理请求,提高吞吐量
    bind = "0.0.0.0:8888"    # 监听IP放宽,以便于Docker之间、Docker和宿主机之间的通信

    启动测试

    gunicorn start:app -c gunicorn.conf.py

    用这种py文件的方式启动是比较简单的,

    否则就要用命令行的方式启动,比较麻烦:

    gunicorn --workers 3 --bind 0.0.0.0:5000  --user nginx --worker-class gevent start:app

    #####

    第四步,Dockerfile

    FROM python:3.8.5-slim-buster
    
    WORKDIR /usr/src/app
    
    COPY requirements.txt ./
    RUN pip install --no-cache-dir -r requirements.txt
    
    COPY . .
    
    CMD ["gunicorn", "app:app", "-c", "./gunicorn.conf.py"]

    这个地方有一个坑

    我之前是FROM python:3.8-alpine3.13

    然后报错了,error: command ‘gcc‘ failed with exit status 1

    所以看起来,python:3.8-alpine3.13这个包虽然小,但是里面缺少了一些东西,要谨慎使用,

    ####

    第五步构建

    完成这两个文件的创建之后,执行如下命令,就可以开始构建Docker镜像:

    sudo docker build -t 'testflask' .

    构建完成之后,通过如下命令查看镜像列表,可以发现testflask显示在其中:

    sudo docker images

    ####

    第六步,运行,

    接下来,我们可以push镜像到镜像仓库进行分发,这里我们就在本机运行进行演示。
    需要注意,公司的私有代码,不要push到公网的镜像仓库上
    运行如下命令,临时运行docker镜像:

    sudo docker run -it --rm -p 8888:8888 testflask

    #####



    #####

  • 相关阅读:
    ssh
    datetime
    网络-sdn(2)
    django-drf
    Vscode前段常用插件
    Vscode离线安装插件
    CSS 实现绘制各种三角形
    flex布局
    js实现全选和取消全选
    购物车用Ajax向后台传参
  • 原文地址:https://www.cnblogs.com/andy0816/p/15370274.html
Copyright © 2011-2022 走看看