網站首頁 編程語言 正文
部署目的
之前聊了很多flask的知識點,那么完成一個flask項目之后,該這么讓大家使用呢,直接放到本地,還是需要放到服務器上,放到服務器上又這么操作的呢,那么我們今天來聊聊flask項目部署。
首先在這里需要了解部署的目的,是讓所有人或者指定的人可以訪問到這個項目,并且可以更高效的提供服務給用戶,這里就有些需要思考的關鍵點了:
- 1、需要7*24不間斷的提供服務,家用的筆記本電腦或者臺式機是不夠的。
- 2、需要提供給指定的人或者所有人看,就需要將項目放到大家可以訪問到的服務器。
- 3、任何用戶請求服務器都希望得到快速高效的服務,所以服務器的效率是一個很關鍵的點。
- 4、還需要注意網站的安全,為用戶提供服務的同時需要保證用戶和網站的數據都是安全的。
然后基于這些點對比開發過程當中Flask自帶的輕量級服務器很容易就發現了一些我們需要注意的點:
- 1、開發一般是基于windows的個人電腦,這個環境開發和簡單的單元測試是沒有問題的,但是如果要進行項目的運行是不夠的,所以最好使用linux服務器(當然windows也有服務器版本)。
- 2、Flask服務器默認監聽127.0.0.1:5000,這個地址是本機地址,外網訪問不到,需要修改,端口默認是5000,http默認是80也是可以修改的項。
- 3、flask自帶的輕量級web服務器默認是單線程的,最大并發支持200,這樣的并發支持顯然無法提供更好的服務,所以可以通過nginx或者其他web服務器來提高服務器的性能。
- 4、flask開發的時候為了方便會開啟debug調試模式,調試模式下,如果發生服務端錯誤的時候會把發生錯誤的代碼和觸發流程都展示出來,這樣很方便調試和排錯,但是也容易導致代碼被用戶看到,引發安全問題,所以需要關閉調試模式。
部署思路
基本的部署思路是采用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
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "Hello Flask"
# 如果用gunicorn的話,那么必須這么寫不然的話,會提示找不到
if __name__ == '__main__':
app.run()
gunicorn啟動flask
安裝gunicorn
pip3 install gunicorn #安裝gunicorn
ln -s /usr/local/python3/bin/gunicorn /usr/bin/gunicorn #配置環境變量
使用命令啟動項目
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
workers = 5 # 定義同時開啟的處理請求的進程數量,根據網站流量適當調整
worker_class = "gevent" # 采用gevent庫,支持異步處理請求,提高吞吐量
bind = "127.0.0.1:8000" # 這里8080可以隨便調整
常用配置
參數 | 描述 |
---|---|
debug | 是否開啟debug模式,部署選false |
bind | 訪問地址 |
workers | 工作進程數 |
threads | 工作線程數 |
timeout | 超時時間 |
loglevel | 輸出日志級別 |
pidfile | 運行日志路徑 |
accesslog | 訪問日志路徑 |
errorlog | 錯誤日志路徑 |
加載配置文件啟動項目
gunicorn -c config.py main:app
nginx指向gunicorn
nginx安裝這里就不詳細解釋了,直接聊配置吧(默認配置文件位置:/usr/local/nginx/conf/nginx.conf
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; } }
原文鏈接:https://juejin.cn/post/7174050061213499428
相關推薦
- 2022-06-12 Spring Boot自定義Start組件開發實現
- 2023-04-12 python的去重以及數據合并的用法說明_python
- 2022-04-19 Install MongoDB Community Edition on Red Hat or Ce
- 2023-01-17 Qt中控件的函數使用教程分享_C 語言
- 2022-06-08 Spring Cloud Nacos 配置動態刷新
- 2022-07-22 數據庫常見約束
- 2022-04-04 【mybatis】spring mybatis與pageHelper分頁插件的整合
- 2023-01-15 React報錯Too?many?re-renders解決_React
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支