溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Flask + Gunicorn + Nginx的部署方式

發(fā)布時間:2021-09-18 11:10:06 來源:億速云 閱讀:140 作者:chen 欄目:云計(jì)算

本篇內(nèi)容介紹了“Flask + Gunicorn + Nginx的部署方式”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

WSGI容器——Gunicorn

常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多,所以這里我也選擇用Gunicorn作為容器。

1

啟動

$ gunicorn [options] module_name:variable_name

module_name對應(yīng)python文件,variable_name對應(yīng)web應(yīng)用實(shí)例。
以最簡單的flask應(yīng)用為例:

#main.py

from flask import Flask

app = Flask(__name__)

 

@app.route('/')

def index():

    return 'hello world'

 

if __name__ == '__main__':

    app.run()

啟動代碼:

gunicorn --worker=3 main:app -b 0.0.0.0:8080

<td class="crayon-code" ">

# -*- coding: utf-8 -*-

import os

 

from . import create_app

import datetime

 

# Create an application instance that web servers can use. We store it as

# "application" (the wsgi default) and also the much shorter and convenient

# "app".

application = app = create_app('default')

 

@app.context_processor

def template_extras():

    """

    上下文處理裝飾器,返回的字典的鍵可以在上下文中使用

    :return:

    """

    return {'enumerate': enumerate, 'len': len, 'datetime': datetime}

  • 在wsgi文件中創(chuàng)建flask實(shí)例給gunicorn使用。

  • 創(chuàng)建實(shí)例后,注冊上下文裝飾器。

再通過gunicorn啟動flask應(yīng)用:

gunicorn -b 127.0.0.1:8000 -k gevent -w 1 app.wsgi


安裝

sudo apt-get install nginx

1

修改配置文件

先將配置文件備份:

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak

然后修改配置文件:

server {

        listen 80;

        server_name _; # 外部地址

 

        location / {

                proxy_pass http://127.0.0.1:8000;

                proxy_redirect     off;

                proxy_set_header   Host                 $http_host;

                proxy_set_header   X-Real-IP            $remote_addr;

                proxy_set_header   X-Forwarded-For      $proxy_add_x_forwarded_for;

                proxy_set_header   X-Forwarded-Proto    $scheme;

        }

這里將Nginx設(shè)置為代理模式,代理到本地的8000端口,之后就可以通過公網(wǎng)訪問flask應(yīng)用了。

<h3 id="toc_9" color:#2E2E2E;white-space:normal;background-color:#FFFFFF;"> 總結(jié)

最后,總結(jié)下這幾個部分的關(guān)系:

Flask + Gunicorn + Nginx的部署方式
(nginx收到客戶端發(fā)來的請求,根據(jù)nginx中配置的路由,將其轉(zhuǎn)發(fā)給WSGI)
nginx:”WSGI,找你的來了!”
(WSGI服務(wù)器根據(jù)WSGI協(xié)議解析請求,配置好環(huán)境變量,調(diào)用start_response方法呼叫flask框架)
WSGI服務(wù)器:”flask,快來接客,客戶資料我都給你準(zhǔn)備好了!”
(flask根據(jù)env環(huán)境變量,請求參數(shù)和路徑找到對應(yīng)處理函數(shù),生成html)
flask:”!@#$%^……WSGI,html文檔弄好了,拿去吧?!?br/>(WSGI拿到html,再組裝根據(jù)env變量組裝成一個http響應(yīng),發(fā)送給nginx)
WSGI服務(wù)器:”nginx,剛才誰找我來著?回他個話,!@#$%^…..”
(nginx再將響應(yīng)發(fā)送給客戶端)

“Flask + Gunicorn + Nginx的部署方式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI