1. 程式人生 > 其它 >測試平臺系列(60) 在Linux機器上部署Pity

測試平臺系列(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:埠號/

思考一下這樣做的弊端:

  1. 伺服器會一直列印著請求資訊,並沒有在後臺執行
  1. 程式如果自動宕機,不能自動恢復

比如哪天程式不小心崩潰了,有的異常沒有被自動捕獲,導致整個Python程式崩潰,從而導致系統無法訪問

  1. 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

這塊的資料比較多,大家可以盡情百度,因為博主主要講的是部署方式,還得靠大家自己去實踐吶。

更多部署方式

dockerk8s什麼的也是不錯的選擇,如果大家有興趣也可以多研究一下,作為測試的我們,掌握好基本的用法即可。

如果有興趣也歡迎大家一起探討~~