如何將Teprunner測(cè)試平臺(tái)部署到Linux系統(tǒng)Docker

如何將Teprunner測(cè)試平臺(tái)部署到Linux系統(tǒng)Docker,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、大荔網(wǎng)絡(luò)推廣、成都小程序開發(fā)、大荔網(wǎng)絡(luò)營(yíng)銷、大荔企業(yè)策劃、大荔品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供大荔建站搭建服務(wù),24小時(shí)服務(wù)熱線:028-86922220,官方網(wǎng)址:bm7419.com

本地運(yùn)行

通過在Vue項(xiàng)目執(zhí)行npm run serve和在Django項(xiàng)目執(zhí)行python manage.py  runserver,我們把項(xiàng)目在本地跑起來(lái)了,示意圖如下:

前端在本地啟了個(gè)Node服務(wù)器,后端在本地啟了個(gè)Django服務(wù)器,分別使用8080和8000端口。瀏覽器有個(gè)同源策略:域名、端口、協(xié)議三者一致才能進(jìn)行訪問,否則會(huì)由于跨域訪問而被瀏覽器攔截。圖中前后端的端口不一致,出現(xiàn)了跨域,前端是無(wú)法直接請(qǐng)求后端的。解決辦法是在vue.config.js中配置devServer:

這是Node開的一個(gè)代理服務(wù)器,當(dāng)前端請(qǐng)求后端時(shí),會(huì)先發(fā)向Node代理服務(wù)器,Node代理服務(wù)器以相同的參數(shù)向真正的后端服務(wù)器進(jìn)行請(qǐng)求,再把響應(yīng)返回給前端。在本項(xiàng)目中,前端請(qǐng)求仍然是發(fā)給http://127.0.0.1:8080,瀏覽器不會(huì)攔截,Node代理服務(wù)器會(huì)幫你把請(qǐng)求轉(zhuǎn)發(fā)給后端8000端口。

Nginx部署

搞懂了本地運(yùn)行代理轉(zhuǎn)發(fā),再來(lái)看看Nginx部署。Nginx本身是個(gè)服務(wù)器,就像Node服務(wù)器一樣,也可以看做Apache  Tomcat。Vue項(xiàng)目使用npm run build命令把代碼構(gòu)建為dist目錄靜態(tài)文件,放到Nginx服務(wù)器中加載出來(lái),結(jié)合Docker示意圖如下:

相比于本地運(yùn)行,Nginx部署時(shí),前端變化比較大,一:dist靜態(tài)文件拷貝到了/usr/share/nginx/html目錄中,二:對(duì)/路徑來(lái)說(shuō),Nginx會(huì)監(jiān)聽80端口,三:對(duì)/api路徑來(lái)說(shuō),Nginx會(huì)把請(qǐng)求轉(zhuǎn)發(fā)到后端服務(wù)器端口,這也叫做反向代理。后端沒有什么變化,為了和本地運(yùn)行看著有點(diǎn)區(qū)別,把端口稍微改了下,Docker內(nèi)部使用80端口。

這里比較關(guān)鍵的是理解Docker  teprunner-frontend、Docker  teprunner-backend、Linux三者之間的關(guān)系。如果不知道Docker,那么應(yīng)該聽說(shuō)過虛擬機(jī),Docker從概念上理解就像是虛擬機(jī),這三者可以看做是三臺(tái)主機(jī)。Linux的IP是172.16.25.131,80端口映射到了Docker  teprunner-frontend的80端口,8099端口映射到了Docker  teprunner-backend的80端口,如圖中下方雙向箭頭所示。在Linux上訪問http://127.0.0.1,能打開登錄頁(yè)面,但是無(wú)法向后端發(fā)起請(qǐng)求,因?yàn)閺?0端口直接請(qǐng)求8099端口,跨域了。解決辦法是在Docker  teprunner-frontend借助Nginx進(jìn)行反向代理,把請(qǐng)求先發(fā)送到Nginx服務(wù)器,再轉(zhuǎn)發(fā)給Linux的8099端口。

不能在Docker  teprunner-frontend中把/api的代理設(shè)置為http://127.0.0.1:8099,因?yàn)檫@個(gè)Docker容器的8099端口并沒有啟用,啟用的是Linux這臺(tái)機(jī)器上的8099端口,所以需要通過IP來(lái)指定。

整體思路明確了,接下來(lái)就開始動(dòng)手操作。

編寫deploy腳本

前端

打開teprunner-frontend文件夾,新建deploy/nginx.conf文件:

/路徑從user/share/nginx/html讀文件,入口為index.html,/api轉(zhuǎn)發(fā)到http://172.16.25.131:8099。這個(gè)文件會(huì)拷貝到Docker鏡像中。新建Dockerfile文件:

FROM定義了基礎(chǔ)鏡像,可以理解為操作系統(tǒng),前端項(xiàng)目基于nginx來(lái)構(gòu)建。WORKDIR定義了鏡像當(dāng)前工作目錄,意思是在執(zhí)行后面COPY操作時(shí),鏡像目錄用哪一個(gè)。COPY分別把dist靜態(tài)文件和nginx.conf配置文件拷貝到鏡像中,COPY指令第一個(gè)參數(shù)是本機(jī)目錄,第二個(gè)參數(shù)是鏡像目錄。鏡像目錄通過WORKDIR來(lái)指定,本機(jī)目錄通過Docker上下文來(lái)指定,新建build.sh文件:

DockerContext指定了Docker上下文為teprunner-frontend根目錄。這里的Shell腳本有兩個(gè)階段,第1階段是使用node編譯:

docker run  # 運(yùn)行鏡像  --rm  # 運(yùn)行后刪除容器 -v $(pwd)/../:/data/src  # $(pwd)指當(dāng)前工作目錄,把根目錄掛載到data/src -v /root/.npm/_logs:/root/.npm/_logs  # 掛載日志文件 -w /data/src/  # 鏡像當(dāng)前工作目錄 $BUILDER_IMAGE  # 運(yùn)行鏡像為node:latest,用node編譯前端代碼 /bin/sh -c "npm install && npm run build"  # /bin/sh是shell可執(zhí)行程序,調(diào)用執(zhí)行npm命令

第2階段是打包成Docker鏡像:

docker build  # 構(gòu)建鏡像 -f $Dockerfile  # 指定Dockerfile文件位置 -t $PkgName  # 鏡像包名 $DockerContext  # Docker上下文

后端后端也是類似的,先新建deploy/Dockerfile文件:

后端項(xiàng)目基于python:3.8來(lái)構(gòu)建,接著設(shè)置了時(shí)區(qū),COPY .  .把Django源文件直接復(fù)制到了鏡像目錄/app/release中,RUN指令執(zhí)行pip  install命令安裝依賴包,CMD和RUN有點(diǎn)區(qū)別,RUN指令在docker build時(shí)就執(zhí)行,CMD指令在docker run時(shí)才執(zhí)行,預(yù)定義啟動(dòng)命令。

這里簡(jiǎn)化了遷移數(shù)據(jù)庫(kù)migrate等啟動(dòng)命令,服務(wù)器數(shù)據(jù)庫(kù)和本地用的同一個(gè)。

再新建build.sh文件:

Python代碼不需要編譯,打包成Docker鏡像就可以了。

部署到Ubuntu系統(tǒng)Docker

Linux系統(tǒng)是內(nèi)核版本,它有很多發(fā)行版本,比如CentOS、Ubuntu,本文采用了Ubuntu,只有一個(gè)原因,它長(zhǎng)的好看。

大學(xué)室友曾經(jīng)沖動(dòng)地把Windows系統(tǒng)換成了Ubuntu,還天天跟我們炫耀有多酷炫有多牛逼,過了兩三天發(fā)現(xiàn)Office不好用,也玩不了游戲,就又換回來(lái)了。哈哈,Ubuntu平時(shí)玩玩就好了,除非是做Linux內(nèi)核開發(fā)。

下載軟件:

  • VMware 破解版

  • Ubuntu Desktop 20.04

安裝過程此處不再另加贅述。打開虛擬機(jī)的Ubuntu:

打開Terminal,輸入su,輸入密碼,切換到root:

發(fā)現(xiàn)缺少權(quán)限就su一下。

安裝curl:

apt-get install curl

安裝docker:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

使用ifconfig查詢虛擬機(jī)IP:

不要選擇.git和node_modules文件夾,把teprunner-frontend打成壓縮包。不要選擇.git和__pycache__文件夾,把teprunner-backend打成壓縮包。復(fù)制前后端壓縮包到虛擬機(jī)Documents解壓:

Ubuntu  Desktop的好處是提供了圖像化操作界面,適合我這種小白用戶。使用命令行編輯工具vi或者圖形編輯工具gedit編輯teprunner-frontend/deploy/nginx.conf文件中/api轉(zhuǎn)發(fā)地址為你的虛擬機(jī)實(shí)際IP地址:

打開兩個(gè)Terminal,分別cd到teprunner-frontend/deploy和teprunner-backend/deploy,執(zhí)行./build.sh命令。

如果執(zhí)行提示^M之類報(bào)錯(cuò),那是因?yàn)樵赪indows編輯后復(fù)制到Linux格式不一致,使用apt-get install  dos2unix命令安裝工具后進(jìn)行格式轉(zhuǎn)化,比如dos2unix build.sh、dos2unix Dockerfile。

第一次因?yàn)橐螺dnode依賴包和拉取nginx鏡像,會(huì)比較慢,第二次就快很多了。

第一次因?yàn)橐ython鏡像,會(huì)比較慢,第二次就快多了。都構(gòu)建完成后,輸入docker  images命令就能看到打包好的Docker鏡像了:

啟動(dòng)前端鏡像:

docker run -p 80:80 teprunner-frontend

啟動(dòng)后端鏡像:

docker run -p 8099:80 teprunner-backend

鏡像啟動(dòng)后就變成了Docker容器,可以理解為一臺(tái)虛擬主機(jī)。-p參數(shù)用于映射Ubuntu端口和Docker端口??梢蕴砑?d參數(shù)讓容器在后臺(tái)運(yùn)行。docker  ps -a查看容器,docker kill CONTAINER或docker stop CONTAINER退出容器。

最后可以在虛擬機(jī)中訪問http:127.0.0.1進(jìn)行登錄了,本地機(jī)器想要訪問的話,需要把127.0.0.1改為你的虛擬機(jī)實(shí)際IP,比如http://172.16.25.131。

在使用過程中,也感受到了Docker這一劃時(shí)代技術(shù)的魅力,如果沒有Docker,我們需要在Ubuntu上面安裝nginx、node、python等軟件,有了Docker,我們只需要安裝Docker,其他都基于Docker鏡像構(gòu)建就可以了。teprunner測(cè)試平臺(tái)的用例采用的是代碼形式,這就涉及到了代碼存放位置的問題,為了讓pytest能調(diào)用執(zhí)行,肯定是存放到文件里面的。本文實(shí)踐給了個(gè)重要提醒,如果后端把代碼直接寫入磁盤文件,每次打包鏡像部署后,就會(huì)把已保存的用例代碼抹掉。解決這個(gè)問題的第一個(gè)辦法是用K8S,第二個(gè)辦法是把代碼存數(shù)據(jù)庫(kù)。學(xué)習(xí)版采用了第二個(gè)辦法存數(shù)據(jù)庫(kù),執(zhí)行時(shí)動(dòng)態(tài)從數(shù)據(jù)庫(kù)拿代碼生成文件。

最后,簡(jiǎn)單聊下Docker和K8S,Docker是Docker公司的,K8S是Google的,Docker是家小公司搞的,在創(chuàng)建之初,并沒有考慮到“容器編排”這個(gè)功能,2014年  Google推出Kubernetes用于解決大規(guī)模場(chǎng)景下Docker容器編排的問題,2016年Kubernetes發(fā)布CRI統(tǒng)一接口,雖然Docker也在2016年發(fā)布了Docker  Swarm,帶來(lái)了Docker在多主機(jī)多容器的編排解決方案,但是已經(jīng)無(wú)法阻擋K8S取得這場(chǎng)容器編排戰(zhàn)爭(zhēng)的勝利。

看完上述內(nèi)容,你們掌握如何將Teprunner測(cè)試平臺(tái)部署到Linux系統(tǒng)Docker的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

新聞名稱:如何將Teprunner測(cè)試平臺(tái)部署到Linux系統(tǒng)Docker
當(dāng)前URL:http://bm7419.com/article44/gegohe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google定制開發(fā)、網(wǎng)站制作微信公眾號(hào)、網(wǎng)站營(yíng)銷網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作