時間:2022-12-08來源:www.djmaza-info.com作者:電腦系統城
之前聊了很多flask的知識點,那么完成一個flask項目之后,該這么讓大家使用呢,直接放到本地,還是需要放到服務器上,放到服務器上又這么操作的呢,那么我們今天來聊聊flask項目部署。
首先在這里需要了解部署的目的,是讓所有人或者指定的人可以訪問到這個項目,并且可以更高效的提供服務給用戶,這里就有些需要思考的關鍵點了:
然后基于這些點對比開發過程當中Flask自帶的輕量級服務器很容易就發現了一些我們需要注意的點:
基本的部署思路是采用nginx作為和前端進行交互的服務器,因為,Nginx (engine x) 是一個高性能的HTTP和反向代理web服務器,同時也提供了IMAP/POP3/SMTP服務。nginx除了單點具備高性能的特點之外,也可以很方便的進行集群配置,比如:結合keepalive實現高可用,或者基于nginx和反向代價服務集群都是很方便的。
Gunicorn 服務器作為 wsgi app 的容器,能夠與各種 Web 框架兼容(flask,django 等),得益于 gevent 等技術,使用 Gunicorn 能夠在基本不改變 wsgi app 代碼的前提下,大幅度提高 wsgi app 的性能。
所以基于這樣的策略,可以讓nginx指向gunicorn,gunicorn指向flask來做高性能部署,當然也可以直接使用gunicorn+flask部署,但是不建議nginx+flask部署,畢竟flask本身的性能是一個很大的瓶頸。
假如項目是main.py
1 2 3 4 5 6 7 8 |
from flask import Flask app = Flask(__name__) @app .route( "/" ) def index(): return "Hello Flask" # 如果用gunicorn的話,那么必須這么寫不然的話,會提示找不到 if __name__ = = '__main__' : app.run() |
安裝gunicorn
1 2 |
pip3 install gunicorn #安裝gunicorn ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #配置環境變量 |
使用命令啟動項目
1 | gunicorn -w 4 -b 0.0.0.0:8080 main:app #main文件下的app變量 |
-w 4 使用4個worker進程執行服務
-b 0.0.0.0:8080 綁定當前服務器所有ip的8080端口
使用配置
config.py
1 2 3 |
workers = 5 # 定義同時開啟的處理請求的進程數量,根據網站流量適當調整 worker_class = "gevent" # 采用gevent庫,支持異步處理請求,提高吞吐量 bind = "127.0.0.1:8000" # 這里8080可以隨便調整 |
常用配置
參數 | 描述 |
---|---|
debug | 是否開啟debug模式,部署選false |
bind | 訪問地址 |
workers | 工作進程數 |
threads | 工作線程數 |
timeout | 超時時間 |
loglevel | 輸出日志級別 |
pidfile | 運行日志路徑 |
accesslog | 訪問日志路徑 |
errorlog | 錯誤日志路徑 |
加載配置文件啟動項目
1 | gunicorn -c config.py main:app |
nginx安裝這里就不詳細解釋了,直接聊配置吧(默認配置文件位置:/usr/local/nginx/conf/nginx.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
upstream flask { server 127 .0.0.1: 8000; } #這里可以添加多個地址,也就是可以指向多個gunicorn服務器, server { # 監聽80端口 listen 80; # 本機 server_name localhost; # 默認請求的url location / { #請求轉發到gunicorn服務器 proxy_pass http : //flask; #設置請求頭,并將頭信息傳遞給服務器端 proxy_set_header Host $host; } } |
關于部署先聊這么多,以上就是Nginx Gunicorn flask項目部署思路分析詳解的詳細內容
2022-12-08
基于Nginx搭建WebDAV服務的詳細過程2022-12-08
Nginx訪問本地靜態資源詳細步驟(推薦)2022-12-08
CentOS安裝jdk的幾種方法及配置環境變量方式0 本地ide式開發 1.0 局域網下遠程終端開發 1.1 局域網下遠程ide式開發 1.2 公網下遠程ide式開發 1、購買一個阿里云服務器 2、阿里云服務器終端內 2.1、先開放端口 2.2、接下來配置frp 2.3、設置自啟動 3、內網linux...
2022-12-06
Process 查看消費的過程 Index 掌握Index數據結構 distribute 信息的分發distribute 理解一個pod的被調度的大致流程 Scheduler SchedulingQueue scheduleOne ScheduleResult 調度計算結果 Assume 初步推算 Bind 實際...
2022-12-06