成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Teprunner測試平臺部署到Linux系統Docker

系統 Linux
本文是一篇過渡,在進行用例管理模塊開發之前,有必要把入門篇開發完成的代碼部署到Linux系統Docker中,把部署流程走一遍,這個過程對后端設計有決定性影響。

[[387195]]

本文轉載自微信公眾號「dongfanger」,作者dongfanger。轉載本文請聯系dongfanger公眾號。

本文是一篇過渡,在進行用例管理模塊開發之前,有必要把入門篇開發完成的代碼部署到Linux系統Docker中,把部署流程走一遍,這個過程對后端設計有決定性影響。

本地運行

通過在Vue項目執行npm run serve和在Django項目執行python manage.py runserver,我們把項目在本地跑起來了,示意圖如下:

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

這是Node開的一個代理服務器,當前端請求后端時,會先發向Node代理服務器,Node代理服務器以相同的參數向真正的后端服務器進行請求,再把響應返回給前端。在本項目中,前端請求仍然是發給http://127.0.0.1:8080,瀏覽器不會攔截,Node代理服務器會幫你把請求轉發給后端8000端口。

 

Nginx部署

搞懂了本地運行代理轉發,再來看看Nginx部署。Nginx本身是個服務器,就像Node服務器一樣,也可以看做Apache Tomcat。Vue項目使用npm run build命令把代碼構建為dist目錄靜態文件,放到Nginx服務器中加載出來,結合Docker示意圖如下:

相比于本地運行,Nginx部署時,前端變化比較大,一:dist靜態文件拷貝到了/usr/share/nginx/html目錄中,二:對/路徑來說,Nginx會監聽80端口,三:對/api路徑來說,Nginx會把請求轉發到后端服務器端口,這也叫做反向代理。后端沒有什么變化,為了和本地運行看著有點區別,把端口稍微改了下,Docker內部使用80端口。

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

 

不能在Docker teprunner-frontend中把/api的代理設置為http://127.0.0.1:8099,因為這個Docker容器的8099端口并沒有啟用,啟用的是Linux這臺機器上的8099端口,所以需要通過IP來指定。

整體思路明確了,接下來就開始動手操作。

編寫deploy腳本

前端

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

/路徑從user/share/nginx/html讀文件,入口為index.html,/api轉發到http://172.16.25.131:8099。這個文件會拷貝到Docker鏡像中。新建Dockerfile文件:

FROM定義了基礎鏡像,可以理解為操作系統,前端項目基于nginx來構建。WORKDIR定義了鏡像當前工作目錄,意思是在執行后面COPY操作時,鏡像目錄用哪一個。COPY分別把dist靜態文件和nginx.conf配置文件拷貝到鏡像中,COPY指令第一個參數是本機目錄,第二個參數是鏡像目錄。鏡像目錄通過WORKDIR來指定,本機目錄通過Docker上下文來指定,新建build.sh文件:

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

  1. docker run  # 運行鏡像  
  2. --rm  # 運行后刪除容器 
  3. -v $(pwd)/../:/data/src  # $(pwd)指當前工作目錄,把根目錄掛載到data/src 
  4. -v /root/.npm/_logs:/root/.npm/_logs  # 掛載日志文件 
  5. -w /data/src/  # 鏡像當前工作目錄 
  6. $BUILDER_IMAGE  # 運行鏡像為node:latest,用node編譯前端代碼 
  7. /bin/sh -c "npm install && npm run build"  # /bin/sh是shell可執行程序,調用執行npm命令 

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

  1. docker build  # 構建鏡像 
  2. -f $Dockerfile  # 指定Dockerfile文件位置 
  3. -t $PkgName  # 鏡像包名 
  4. $DockerContext  # Docker上下文 

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

后端項目基于python:3.8來構建,接著設置了時區,COPY . .把Django源文件直接復制到了鏡像目錄/app/release中,RUN指令執行pip install命令安裝依賴包,CMD和RUN有點區別,RUN指令在docker build時就執行,CMD指令在docker run時才執行,預定義啟動命令。

 

這里簡化了遷移數據庫migrate等啟動命令,服務器數據庫和本地用的同一個。

再新建build.sh文件:

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

 

部署到Ubuntu系統Docker

Linux系統是內核版本,它有很多發行版本,比如CentOS、Ubuntu,本文采用了Ubuntu,只有一個原因,它長的好看。

大學室友曾經沖動地把Windows系統換成了Ubuntu,還天天跟我們炫耀有多酷炫有多牛逼,過了兩三天發現Office不好用,也玩不了游戲,就又換回來了。哈哈,Ubuntu平時玩玩就好了,除非是做Linux內核開發。

下載軟件:

  • VMware 破解版
  • Ubuntu Desktop 20.04

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

[[387196]]

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

 

發現缺少權限就su一下。

安裝curl:

  1. apt-get install curl 

安裝docker:

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

使用ifconfig查詢虛擬機IP:

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

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

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

 

如果執行提示^M之類報錯,那是因為在Windows編輯后復制到Linux格式不一致,使用apt-get install dos2unix命令安裝工具后進行格式轉化,比如dos2unix build.sh、dos2unix Dockerfile。

前端構建截圖:

第一次因為要下載node依賴包和拉取nginx鏡像,會比較慢,第二次就快很多了。后端構建截圖:

第一次因為要拉取python鏡像,會比較慢,第二次就快多了。都構建完成后,輸入docker images命令就能看到打包好的Docker鏡像了:

啟動前端鏡像:

  1. docker run -p 80:80 teprunner-frontend 

啟動后端鏡像:

  1. docker run -p 8099:80 teprunner-backend 

鏡像啟動后就變成了Docker容器,可以理解為一臺虛擬主機。-p參數用于映射Ubuntu端口和Docker端口。可以添加-d參數讓容器在后臺運行。docker ps -a查看容器,docker kill CONTAINER或docker stop CONTAINER退出容器。

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

小結

本文先介紹了本地運行和Nginx部署的示意圖,涉及到跨域訪問和反向代理。接著編寫deploy腳本,編譯代碼,構建鏡像。最后部署到Ubuntu系統的Docker中運行起來。在使用過程中,也感受到了Docker這一劃時代技術的魅力,如果沒有Docker,我們需要在Ubuntu上面安裝nginx、node、python等軟件,有了Docker,我們只需要安裝Docker,其他都基于Docker鏡像構建就可以了。teprunner測試平臺的用例采用的是代碼形式,這就涉及到了代碼存放位置的問題,為了讓pytest能調用執行,肯定是存放到文件里面的。本文實踐給了個重要提醒,如果后端把代碼直接寫入磁盤文件,每次打包鏡像部署后,就會把已保存的用例代碼抹掉。解決這個問題的第一個辦法是用K8S,第二個辦法是把代碼存數據庫。學習版采用了第二個辦法存數據庫,執行時動態從數據庫拿代碼生成文件。第一個辦法思路借鑒:

最后,簡單聊下Docker和K8S,Docker是Docker公司的,K8S是Google的,Docker是家小公司搞的,在創建之初,并沒有考慮到“容器編排”這個功能,2014年 Google推出Kubernetes用于解決大規模場景下Docker容器編排的問題,2016年Kubernetes發布CRI統一接口,雖然Docker也在2016年發布了Docker Swarm,帶來了Docker在多主機多容器的編排解決方案,但是已經無法阻擋K8S取得這場容器編排戰爭的勝利。

 

 

參考資料:https://www.cnblogs.com/riwang/p/11883332.htmlhttps://zhuanlan.zhihu.com/p/334787180https://testerhome.com/topics/27860

[[387197]]

 

責任編輯:武曉燕 來源: dongfanger
相關推薦

2021-04-23 07:27:26

Teprunner響應式用例

2011-12-14 09:46:14

LinuxUnix遷移

2022-01-02 08:39:04

平臺登錄Teprunner

2013-02-19 13:23:03

MySQL部署Linux平臺

2019-12-05 10:40:41

DockerMySQL數據庫

2024-01-04 07:39:53

LinuxCentOS 8Docker

2024-12-02 11:24:30

Docker編排技術

2009-01-06 10:28:46

2024-02-26 16:08:14

LinuxDocker

2010-06-13 17:21:41

Linux下dhcp測

2009-12-31 09:22:36

2009-04-09 16:59:39

Linux中科紅旗移動平臺

2010-01-04 09:33:03

2023-09-11 09:35:20

Docker程序

2013-12-11 16:34:38

LinuxLotus Domin集群

2015-08-12 10:47:23

紅帽LinuxOpenStack

2009-04-02 14:01:59

LinuxJSChromium

2015-06-24 09:53:05

2011-03-21 16:08:24

LAMP

2021-06-29 10:50:40

Linux.NET命令
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 在线视频 中文字幕 | 在线观看成人 | 狠狠伊人 | 天堂久久一区 | 成人高清视频在线观看 | 国产精品中文字幕在线 | 欧美一区二区三区久久精品 | 日韩欧美国产精品一区 | 成人av免费| 欧美 日韩 国产 一区 | 成人精品国产 | 亚洲不卡| 国产精品日日做人人爱 | 久久综合香蕉 | 久草精品视频 | 日韩电影中文字幕 | 国产一区二区欧美 | 狠狠操电影 | 欧美天堂在线 | 欧洲成人午夜免费大片 | 日韩精品一区二区三区四区视频 | 懂色av色香蕉一区二区蜜桃 | 国产区在线看 | 亚洲区视频 | 久久综合亚洲 | 男女污污网站 | 99精品国产一区二区三区 | 国产不卡在线观看 | 玖玖视频| 综合久久久 | 久久视频精品 | 亚洲一区视频在线 | 午夜精品视频在线观看 | 91就要激情 | 欧洲尺码日本国产精品 | 欧美一区二区三区大片 | 亚洲3p| 成人黄色av网站 | 91国在线观看 | 亚洲精品中文字幕av | 激情91|