本篇內(nèi)容介紹了“Flask + Gunicorn + Nginx的部署方式”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的金州網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動(dòng),不需要編寫配置文件,相對(duì)uWSGI要容易很多,所以這里我也選擇用Gunicorn作為容器。
1
啟動(dòng) |
$ gunicorn [options] module_name:variable_name |
module_name對(duì)應(yīng)python文件,variable_name對(duì)應(yīng)web應(yīng)用實(shí)例。
以最簡(jiǎn)單的flask應(yīng)用為例:
#main.py from flask import Flask app = Flask(__name__)
@app.route('/') def index(): return 'hello world'
if __name__ == '__main__': app.run() |
啟動(dòng)代碼:
gunicorn --worker=3 main:app -b 0.0.0.0:8080 |
# -*- 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í)例后,注冊(cè)上下文裝飾器。
再通過(guò)gunicorn啟動(dòng)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端口,之后就可以通過(guò)公網(wǎng)訪問flask應(yīng)用了。
最后,總結(jié)下這幾個(gè)部分的關(guān)系:
(nginx收到客戶端發(fā)來(lái)的請(qǐng)求,根據(jù)nginx中配置的路由,將其轉(zhuǎn)發(fā)給WSGI)
nginx:”WSGI,找你的來(lái)了!”
(WSGI服務(wù)器根據(jù)WSGI協(xié)議解析請(qǐng)求,配置好環(huán)境變量,調(diào)用start_response方法呼叫flask框架)
WSGI服務(wù)器:”flask,快來(lái)接客,客戶資料我都給你準(zhǔn)備好了!”
(flask根據(jù)env環(huán)境變量,請(qǐng)求參數(shù)和路徑找到對(duì)應(yīng)處理函數(shù),生成html)
flask:”!@#$%^……WSGI,html文檔弄好了,拿去吧?!?br/>(WSGI拿到html,再組裝根據(jù)env變量組裝成一個(gè)http響應(yīng),發(fā)送給nginx)
WSGI服務(wù)器:”nginx,剛才誰(shuí)找我來(lái)著?回他個(gè)話,!@#$%^…..”
(nginx再將響應(yīng)發(fā)送給客戶端)
“Flask + Gunicorn + Nginx的部署方式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!