Nginx?Gunicorn?flask項(xiàng)目部署思路分析詳解
部署目的
之前聊了很多flask的知識(shí)點(diǎn),那么完成一個(gè)flask項(xiàng)目之后,該這么讓大家使用呢,直接放到本地,還是需要放到服務(wù)器上,放到服務(wù)器上又這么操作的呢,那么我們今天來(lái)聊聊flask項(xiàng)目部署。
首先在這里需要了解部署的目的,是讓所有人或者指定的人可以訪問(wèn)到這個(gè)項(xiàng)目,并且可以更高效的提供服務(wù)給用戶(hù),這里就有些需要思考的關(guān)鍵點(diǎn)了:
- 1、需要7*24不間斷的提供服務(wù),家用的筆記本電腦或者臺(tái)式機(jī)是不夠的。
- 2、需要提供給指定的人或者所有人看,就需要將項(xiàng)目放到大家可以訪問(wèn)到的服務(wù)器。
- 3、任何用戶(hù)請(qǐng)求服務(wù)器都希望得到快速高效的服務(wù),所以服務(wù)器的效率是一個(gè)很關(guān)鍵的點(diǎn)。
- 4、還需要注意網(wǎng)站的安全,為用戶(hù)提供服務(wù)的同時(shí)需要保證用戶(hù)和網(wǎng)站的數(shù)據(jù)都是安全的。
然后基于這些點(diǎn)對(duì)比開(kāi)發(fā)過(guò)程當(dāng)中Flask自帶的輕量級(jí)服務(wù)器很容易就發(fā)現(xiàn)了一些我們需要注意的點(diǎn):
- 1、開(kāi)發(fā)一般是基于windows的個(gè)人電腦,這個(gè)環(huán)境開(kāi)發(fā)和簡(jiǎn)單的單元測(cè)試是沒(méi)有問(wèn)題的,但是如果要進(jìn)行項(xiàng)目的運(yùn)行是不夠的,所以最好使用linux服務(wù)器(當(dāng)然windows也有服務(wù)器版本)。
- 2、Flask服務(wù)器默認(rèn)監(jiān)聽(tīng)127.0.0.1:5000,這個(gè)地址是本機(jī)地址,外網(wǎng)訪問(wèn)不到,需要修改,端口默認(rèn)是5000,http默認(rèn)是80也是可以修改的項(xiàng)。
- 3、flask自帶的輕量級(jí)web服務(wù)器默認(rèn)是單線程的,最大并發(fā)支持200,這樣的并發(fā)支持顯然無(wú)法提供更好的服務(wù),所以可以通過(guò)nginx或者其他web服務(wù)器來(lái)提高服務(wù)器的性能。
- 4、flask開(kāi)發(fā)的時(shí)候?yàn)榱朔奖銜?huì)開(kāi)啟debug調(diào)試模式,調(diào)試模式下,如果發(fā)生服務(wù)端錯(cuò)誤的時(shí)候會(huì)把發(fā)生錯(cuò)誤的代碼和觸發(fā)流程都展示出來(lái),這樣很方便調(diào)試和排錯(cuò),但是也容易導(dǎo)致代碼被用戶(hù)看到,引發(fā)安全問(wèn)題,所以需要關(guān)閉調(diào)試模式。
部署思路
基本的部署思路是采用nginx作為和前端進(jìn)行交互的服務(wù)器,因?yàn)?,Nginx (engine x) 是一個(gè)高性能的HTTP和反向代理web服務(wù)器,同時(shí)也提供了IMAP/POP3/SMTP服務(wù)。nginx除了單點(diǎn)具備高性能的特點(diǎn)之外,也可以很方便的進(jìn)行集群配置,比如:結(jié)合keepalive實(shí)現(xiàn)高可用,或者基于nginx和反向代價(jià)服務(wù)集群都是很方便的。
Gunicorn 服務(wù)器作為 wsgi app 的容器,能夠與各種 Web 框架兼容(flask,django 等),得益于 gevent 等技術(shù),使用 Gunicorn 能夠在基本不改變 wsgi app 代碼的前提下,大幅度提高 wsgi app 的性能。
所以基于這樣的策略,可以讓nginx指向gunicorn,gunicorn指向flask來(lái)做高性能部署,當(dāng)然也可以直接使用gunicorn+flask部署,但是不建議nginx+flask部署,畢竟flask本身的性能是一個(gè)很大的瓶頸。
假如項(xiàng)目是main.py
from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "Hello Flask" # 如果用gunicorn的話(huà),那么必須這么寫(xiě)不然的話(huà),會(huì)提示找不到 if __name__ == '__main__': app.run()
gunicorn啟動(dòng)flask
安裝gunicorn
pip3 install gunicorn #安裝gunicorn ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #配置環(huán)境變量
使用命令啟動(dòng)項(xiàng)目
gunicorn -w 4 -b 0.0.0.0:8080 main:app #main文件下的app變量
-w 4 使用4個(gè)worker進(jìn)程執(zhí)行服務(wù)
-b 0.0.0.0:8080 綁定當(dāng)前服務(wù)器所有ip的8080端口
使用配置
config.py
workers = 5 # 定義同時(shí)開(kāi)啟的處理請(qǐng)求的進(jìn)程數(shù)量,根據(jù)網(wǎng)站流量適當(dāng)調(diào)整 worker_class = "gevent" # 采用gevent庫(kù),支持異步處理請(qǐng)求,提高吞吐量 bind = "127.0.0.1:8000" # 這里8080可以隨便調(diào)整
常用配置
參數(shù) | 描述 |
---|---|
debug | 是否開(kāi)啟debug模式,部署選false |
bind | 訪問(wèn)地址 |
workers | 工作進(jìn)程數(shù) |
threads | 工作線程數(shù) |
timeout | 超時(shí)時(shí)間 |
loglevel | 輸出日志級(jí)別 |
pidfile | 運(yùn)行日志路徑 |
accesslog | 訪問(wèn)日志路徑 |
errorlog | 錯(cuò)誤日志路徑 |
加載配置文件啟動(dòng)項(xiàng)目
gunicorn -c config.py main:app
nginx指向gunicorn
nginx安裝這里就不詳細(xì)解釋了,直接聊配置吧(默認(rèn)配置文件位置:/usr/local/nginx/conf/nginx.conf
upstream flask{ server 127.0.0.1:8000; } #這里可以添加多個(gè)地址,也就是可以指向多個(gè)gunicorn服務(wù)器, server { # 監(jiān)聽(tīng)80端口 listen 80; # 本機(jī) server_name localhost; # 默認(rèn)請(qǐng)求的url location / { #請(qǐng)求轉(zhuǎn)發(fā)到gunicorn服務(wù)器 proxy_pass http://flask; #設(shè)置請(qǐng)求頭,并將頭信息傳遞給服務(wù)器端 proxy_set_header Host $host; } }
關(guān)于部署先聊這么多,以上就是Nginx Gunicorn flask項(xiàng)目部署思路分析詳解的詳細(xì)內(nèi)容,更多關(guān)于Nginx Gunicorn flask部署的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
nginx如何通過(guò)proxy_pass設(shè)置反向代理,隱藏端口號(hào)
這篇文章主要介紹了nginx如何通過(guò)proxy_pass設(shè)置反向代理,隱藏端口號(hào)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01使用Nginx實(shí)現(xiàn)灰度發(fā)布的使用
這篇文章主要介紹了使用Nginx實(shí)現(xiàn)灰度發(fā)布的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03利用Nginx反向代理與負(fù)載均衡搭建多人測(cè)試環(huán)境詳解
這篇文章主要介紹了利用Nginx反向代理與負(fù)載均衡搭建多人測(cè)試環(huán)境的相關(guān)資料,文中介紹的非常詳細(xì),相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-04-04nginx上傳文件大小報(bào)錯(cuò)500的解決辦法
這篇文章主要介紹了nginx上傳文件大小報(bào)錯(cuò)解決辦法的相關(guān)資料,小文件可以提交,大文件會(huì)報(bào)500內(nèi)部錯(cuò)誤,這里提供解決辦法,需要的朋友可以參考下2017-08-08Nginx實(shí)現(xiàn)外網(wǎng)訪問(wèn)內(nèi)網(wǎng)的步驟詳解
外網(wǎng)瀏覽器與內(nèi)網(wǎng)是不通的,但是外網(wǎng)與中間過(guò)渡服務(wù)器是通的,中間過(guò)渡服務(wù)器與內(nèi)網(wǎng)服務(wù)器是通的,這樣在外網(wǎng)訪問(wèn)過(guò)渡服務(wù)器時(shí),過(guò)渡服務(wù)器再跳轉(zhuǎn)到后臺(tái)服務(wù)器,本文給大家介紹了Nginx外網(wǎng)訪問(wèn)內(nèi)網(wǎng)如何實(shí)現(xiàn)步驟,需要的朋友可以參考下2023-10-10Nginx location 和 proxy_pass路徑配置問(wèn)題小結(jié)
本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,進(jìn)行測(cè)試,完全還原了整個(gè)測(cè)試過(guò)程,本文給大家介紹Nginx location 基本配置及相關(guān)配置文件,感興趣的朋友跟隨小編一起看看吧2021-09-09nginx location 配置 正則表達(dá)式實(shí)例詳解
本文通過(guò)實(shí)例代碼給大家介紹了nginx location 配置 正則表達(dá)式的問(wèn)題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07Nginx安裝后/etc/nginx/conf.d下沒(méi)有default.conf的解決
nginx.conf是nginx默認(rèn)加載的配置文件 通過(guò)nginx -V可以看nginx默認(rèn)配置文件路徑,本文主要介紹了Nginx安裝后/etc/nginx/conf.d下沒(méi)有default.conf的解決,感興趣的可以了解一下2023-11-11