您好,登錄后才能下訂單哦!
本篇內容介紹了“Flask + Gunicorn + Nginx的部署方式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
常用的WSGI容器有Gunicorn和uWSGI,但Gunicorn直接用命令啟動,不需要編寫配置文件,相對uWSGI要容易很多,所以這里我也選擇用Gunicorn作為容器。
1
啟動 |
$ gunicorn [options] module_name:variable_name |
module_name對應python文件,variable_name對應web應用實例。
以最簡單的flask應用為例:
#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 |
# -*- 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文件中創建flask實例給gunicorn使用。
創建實例后,注冊上下文裝飾器。
再通過gunicorn啟動flask應用:
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設置為代理模式,代理到本地的8000端口,之后就可以通過公網訪問flask應用了。
<h3 id="toc_9" color:#2E2E2E;white-space:normal;background-color:#FFFFFF;"> 總結
最后,總結下這幾個部分的關系:
(nginx收到客戶端發來的請求,根據nginx中配置的路由,將其轉發給WSGI)
nginx:”WSGI,找你的來了!”
(WSGI服務器根據WSGI協議解析請求,配置好環境變量,調用start_response方法呼叫flask框架)
WSGI服務器:”flask,快來接客,客戶資料我都給你準備好了!”
(flask根據env環境變量,請求參數和路徑找到對應處理函數,生成html)
flask:”!@#$%^……WSGI,html文檔弄好了,拿去吧。”
(WSGI拿到html,再組裝根據env變量組裝成一個http響應,發送給nginx)
WSGI服務器:”nginx,剛才誰找我來著?回他個話,!@#$%^…..”
(nginx再將響應發送給客戶端)
“Flask + Gunicorn + Nginx的部署方式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。