美文网首页
用Gunicorn部署Flask&Django, since 2

用Gunicorn部署Flask&Django, since 2

作者: Mc杰夫 | 来源:发表于2022-04-06 22:31 被阅读0次

    (2022.04.06 Wed)
    注:Nginx+Gunicorn+web framework是完整的部署流程,本文只介绍用Gunicorn部署web framework的流程作为alternative。

    Gunicorn是什么?

    Gunicorn是Python WSGI HTTP服务器,对web框架具有广泛兼容性,易实现,占用服务器资源少,速度快。常和Nginx一起使用,因其有互补特性。
    The Gunicorn "Green Unicorn" is a Python Web Server Gateway Interface HTTP server. It is a pre-fork worker model, ported from Ruby's Unicorn project. The Gunicorn server is broadly compatible with a number of web frameworks, simply implemented, light on server resources and fairly fast. It is often paired with NGINX, as the two have complementary features.

    WSGI是什么?

    一个标准和典型的web应用流程如下:

    浏览器发送请求

    • web应用接收到请求,并生成HTML文档作为响应
    • web应用将HTML文档作为响应的body发送给客户端
    • 客户端接收到响应,取出body并展示HTML

    在这个过程中,web应用本质是一个socket服务端,用户是socket客户端。

    在web应用处理响应的过程中,包括对HTTP请求和响应的处理,HTML的解析和生成,响应内容填充到HTML文档中等等。其中任何涉及HTTP解析的部分,比如HTTP接收请求、解析请求、发送响应,都需要深度了解HTTP协议和规范。另外关于TCP/IP的连接,HTML文件的格式等等,也是底层性质的基础工作。理想情况是web应用仅仅处理业务请求,即如何响应球球,而这些基础性质的繁重工作交给一个统一的接口完成,接口处理业务以外的部分工作。这个接口就是WSGI。

    更多WSGI内容,查看Django基础,https://www.jianshu.com/p/3d326774f020

    为Flask服务部署Gunicorn

    写好一个Flask服务,如test.py

    import flask
    
    app = flask.Flask(__name__)
    
    @app.route('/')
    def hello():
        return 'this is a Flask service.'
    

    使用pip安装Gunicorn,如果安装过程缓慢,选用国内pip服务器,如清华,或者修改pip连接服务器的设置。

    >> pip install gunicorn
    # 如果安装过程缓慢,选用国内pip服务器,如清华
    >> pip install gunicorn -i https://pypi.tuna.tsinghua.edu.cn/simple
    # 或者修改pip连接服务器的设置
    >> python -m pip install --upgrade pip
    >> pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
    

    可选择性安装若干异步框架

    >> pip install greenlet # 使用异步必须安装
    >> pip install eventlet # 使用eventlet workers
    >> pip install gevent   # 使用gevent workers
    

    之后就可以用Gunicorn启动Flask服务了

    >> gunicorn -w 4 -b 0.0.0.0:8000 test:app 
    

    参数说明

    • -w: 设置进程数
    • -b: 设置需要绑定的ip和端口,其中如果是0.0.0.0则表示同LAN中其他机器可访问,127.0.0.1则不可访问
    • test:app: 其中的test是运行Flask的程序,也就是test.py文件,app是程序中的实例,也即test.py中的app = flask.Flask(__name__)

    之后就可以用过localhost:8000/(本地浏览器)访问。
    如果通过局域网内的其他设备访问该连接,可先查询host IP地址,方法是在terminal中输入如下指令,找到inet对应的ip即可。

    >> ifconfig
    ...
        inet 192.168.3.8 netmask 0xffffff00 broadcast 192.168.3.255
    ...
    

    有了host ip,即可在LAN的其他设备上通过192.168.3.8:8000/访问Gunicorn部署的Flask程序。访问效果和Flask直接起服务相同,即python3 test.py

    相关文章

      网友评论

          本文标题:用Gunicorn部署Flask&Django, since 2

          本文链接:https://www.haomeiwen.com/subject/xojdsrtx.html