測試平臺系列(60) 在Linux機器上部署Pity
大家好~我是
米洛
!
這是一個完整的介面測試平臺系列教程
,希望能和大家一起學習,從0到1打造一個開源平臺。
歡迎關注我的公眾號測試開發坑貨
,獲取最新文章教程!
回顧
上一節我們編寫了用例列表
相關改造,但由於編輯/新增case的頁面還得好好設計一番,而後端介面
也沒啥大的變化。
所以今天我們來聊聊怎麼部署。
部署服務的幾種方式
其實我們如果是在公司
使用的話,一般公司運維都會提供部署服務的平臺,但可能都是以業務程式碼使用的語言為主。
比如我上家公司,業務程式碼
是用的Java,所以在Java服務的部署上,基本上接入公司釋出系統即可。不扯遠了,有的公司測試會自己維護一臺伺服器,隨便兒你玩,不走釋出系統。(當然如果你們公司支援Python服務的釋出,建議還是用公司的釋出系統,貴在穩定+視覺化)
如果我們是自己維護自己的伺服器,該怎麼部署咱們的系統
呢?
以下是Pity的部署教程
,如果想看其他Python部署方式的,可以先跳過哈。
資料庫
資料庫這塊比較簡單,Pity提供了自動建表功能,底層使用的是MySQL
,所以大家需要準備一臺MySQL伺服器,或者就在你的伺服器安裝好MySQL也是一樣。
具體的安裝過程我這兒就不細說了。
安裝好以後我們會拿到使用者名稱,密碼,host和port資訊,我們還需要建立資料庫:
create database pity;
修改pity關於資料庫的配置
在pity/Config.py修改SQLALCHEMY的連線串:
這樣你的資料就能好好儲存在你們的資料庫
安裝依賴
pip3 install -r requirements.txt
也可以使用豆瓣源:
pip3 install -r requirements.txt -i https://pypi.douban.com/simple
如果過程中安裝失敗了,建議升級一下pip
。
測試服務是否啟動
如果啟動服務的時候報沒有logs資料夾,可以在pity根目錄新建資料夾: logs
,因為github會自動忽略掉空資料夾,所以可能需要大家自己建立。
在pity目錄下啟動服務:
python3 main.py
開啟http://伺服器ip:7777
:
正題
我們今天主要是講怎麼用gunicorn部署Python服務,只不過博主我先用了自己的專案探路
回到正題,我們先來看一看最簡單的一個部署方式
。
經典部署方式
在解決好所有環境依賴以後,我們通過python3 xxx.py啟動服務,這樣其他人就能夠通過伺服器ip+埠訪問頁面了。
http://伺服器ip:埠號/
思考一下這樣做的弊端:
- 伺服器會一直列印著請求資訊,並沒有在後臺執行
- 程式如果自動宕機,不能自動恢復
比如哪天程式不小心崩潰了,有的異常沒有被自動捕獲
,導致整個Python程式崩潰,從而導致系統無法訪問
。
- Python GIL效能太差
改進一下
針對經典部署,其實也有一些處理方式,比如第一條,我們可以用nohup
幫我們解決第一個困難。
nohup python xxx.py &
然後可以看到當前目錄
生成了nohup.out的檔案,而你的控制檯視窗也沒有再停留
在服務輸出視窗。
但還有其他困難,我們怎麼解決呢?別慌!我們還有gunicorn+supervisor
supervisor
supervisor是一個託管容器,你的應用會被託管到裡面,而他會提供一個守護執行緒
,專門監控你的應用。當你的應用不小心崩了,他會自動把應用拉起,非常好用
!
遇到非程式碼錯誤,比如有人誤操作kill掉你的程式,它會自動幫忙拉起,毫無波瀾。
gunicorn
gunicorn基於gevent,差不多算是個提升app效能的庫,它可以幫助我們的web應用提升效能,並且他也有自動重啟的功能,還可以開啟根據伺服器配置開啟不同數量的worker
。
怎麼使用呢
安裝Gunicorn
pip3 install gunicorn
以我們的app為例,我們的app名字叫pity,檔案是main.py,所以取到app的方法就是: main:pity
普通gunicorn模式
安裝好以後gunicorn命令就能夠使用了,輸入命令:
# FastApi應用
gunicorn -k uvicorn.workers.UvicornWorker main:pity -b 0.0.0.0:7777 -w 4 &
解釋一下引數:
-k:
這個是指定worker為Uvicorn的Worker,為fastapi專屬,其他比如flask應用不需要帶上這個引數。
-w
workers數量,也就是起的執行緒數量,一般根據自己CPU核心
來。比如我的伺服器是4核的,那我就設定為4。
main:pity就是上面說的app的具體位置。
試驗一下
配置檔案的方式啟動
我們編寫gunicorn.py檔案(配置檔案):
import os
import gevent.monkey
gevent.monkey.patch_all()
import multiprocessing
# debug = True
loglevel = 'debug'
bind = "0.0.0.0:7777"
pidfile = "logs/gunicorn.pid"
accesslog = "logs/access.log"
errorlog = "logs/debug.log"
daemon = True
timeout = 60
# 啟動的程序數
# workers = multiprocessing.cpu_count()
workers = 8
worker_class = 'gevent'
x_forwarded_for_header = 'X-FORWARDED-FOR'
配置好bind地址,日誌資訊,workders數量,multiprocessing.cpu_count()
會返回CPU數量。
記得安裝gevent
,用pip。
可以看到服務起來了,這邊我開了8個workder
。
其實這個時候gunicorn已經具備了自動拉起
功能,但gunicorn也可能被kill掉,所以我們更穩妥點兒的話,需要supervisor
。
supervisor
這塊的資料比較多,大家可以盡情百度,因為博主主要講的是部署方式,還得靠大家自己去實踐
吶。
更多部署方式
docker
,k8s
什麼的也是不錯的選擇,如果大家有興趣也可以多研究一下,作為測試
的我們,掌握好基本的用法即可。
如果有興趣也歡迎大家一起探討
~~