Python+Flask+Gunicorn 在linux生產環境上真實部署方案

最近經常碰到朋友問Python能不能做在線web服務,會不會不安全啥的。其實,這些擔心是多餘了點哈,Python是當然完全可以做這些事情的呀。

Python提供web在線接口服務肯定是沒問題的,其實最大的問題是,大家並不知道怎麼部署到生產環境上去。今天,我就將我們前段時間的一個在線Python服務生產部署提前給大家羅列出來供有需要的朋友的去參考,(分佈式專題看懂分佈式事務的你,真的很了不起)可以直接用在自己生產環境,我們這個也是經過了線上真實併發用戶壓力的,目前單機QPS在400左右,自己根據本公司業務可以進行集羣部署。

 

所需要的環境:

  • Python3.7 (自己看自己的版本,當前我們的項目是3.7的版本)
  • CentOS7
  • pip3(對應於你的Python版本)
  • gunicorn
  • Flask

可能這裏大家對gunicorn這個東東不是很清楚,其實很簡單,就是個web服務器,和部署java的tomcat容器,PHP的Apache是一個意思,它也是個高性能的Python WSGI UNIX HTTP Server。這個部署Python+Flask超級好用,信我。

基本架構圖:

Python web在線服務生產環境真實部署方案,可直接用

 

下面把生產部署步驟發出來看看

在說之前,我們先來看看另一個小東西,寫Python代碼的應該都知道,Python項目可能會用到各種模塊,建議大家和我們一樣,放在一個文件裏面,也方便我們的管理。比如我們放在requirements.txt裏面,如下:

beautifulsoup4==4.7.0
bs4==0.0.1
certifi==2018.11.29
chardet==3.0.4
Click==7.0
cssselect==1.0.3
fake-useragent==0.1.11
Flask==1.0.2
idna==2.8
itsdangerous==1.1.0
Jinja2==2.10
lxml==4.3.0
MarkupSafe==1.1.0
parse==1.9.0
pyee==5.0.0
PyJWT==1.7.1
pyppeteer==0.0.25
pyquery==1.4.0
redis==3.0.1
requests==2.21.0
requests-html==0.9.0
six==1.12.0
soupsieve==1.6.2
tqdm==4.28.1
urllib3==1.24.1

1,安裝python3.7 以及pip3 (pip3現在是可以和python3.7同步安裝)。

2,進入你項目文件夾安裝依賴,執行命令:pip3 install -r requirements.txt (確保不報錯, 若有其中的部分失敗,可以手動單獨安裝(pip3 install 出錯的模塊))

完成第2步,可進行應用測試,通過命令python3 main.py 如果報錯,則證明有錯誤或者依賴未安裝,並未異常則直接Ctrl+C停止當前進程,進行下面3的步驟。

3,進入你項目文件夾,修改gconfig.py 配置文件(參考下面配置), bind = '0.0.0.0:5000' 將5000修改爲需要開放的端口(確保nginx反向代理能到達)。

4,安裝gunicorn ,命令:pip3 install gunicorn 。

5,啓動:請在你項目 文件夾下操作,可以在文件夾下寫個啓動腳本start.sh。例如:

nohup python3 -u /usr/local/bin/gunicorn -c gconfig.py main:app >stdout.log 2>&1 &

採用nohup方式啓動,其中 /usr/local/bin/gunicorn 這個是第三步gunicorn的安裝路徑,也可以加入PATH中

6,查看你項目文件下stdout.log (tail -f stdout.log) 並未拋錯且出現各個進程info則證明當前應用啓動成功

7,將可用nginx 配置文件中增加反向代理,location配置上述啓動好的應用,例如上面是http://ip:port,完成nginx接入。

8,停止:採用kill的方式,首先使用pstree -ap|grep gunicorn(查看進程),然後kill -9 父進程,就停了,通過pstree -ap|grep gunicorn查看。

gconfig.py 配置參考:

import logging 
import logging.handlers from logging.handlers 
import WatchedFileHandler 
import os 

bind = ‘0.0.0.0:9010’ #綁定的ip已經端口號 backlog = 512 #監聽隊列 timeout = 30 #超時 worker_class = ‘gevent’ #使用gevent模式,還可以使用sync 模式,默認的是sync模式 
workers = 16 #進程數
threads = 2 #指定每個進程開啓的線程數
loglevel = ‘info’ #日誌級別,這個日誌級別指的是錯誤日誌的級別,而訪問日誌的級別無法設置 access_log_format = ‘%(t)s %(p)s %(h)s “%(r)s” %(s)s %(L)s %(b)s %(f)s” “%(a)s”’ #設置gunicorn訪問日誌格式

好了,這樣就可以將你寫的Python在線服務部署到了生產環境了,直接訪問nginx的地址就可以愉快的訪問了。如果恰好你正在做這塊,又沒有好的方案,就可以直接先用我們提供的這方案,目前肯定沒問題的哈,如果大家有不同的方案,歡迎評論去多寫下方案,讓我們都學習下,畢竟我們的目的就是爲了學深學透技術,共同進步。

 

往期精選

你的成神之路我已替你鋪好,沒鋪你來捶我

每天百萬交易的支付系統,生產環境該怎麼設置JVM堆內存大小

數據庫分庫分表後,我們生產環境怎麼實現不停機數據遷移

你的成神之路我已替你鋪好,沒鋪你來捶我

Zookeeper實現分佈式鎖詳細步驟,你一定要知道

在公衆號菜單中可自行獲取專屬架構視頻資料,包括不限於 java架構、python系列、人工智能系列、架構系列,以及最新面試、小程序、大前端均無私奉獻,你會感謝我的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章