摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。
背景
手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼docker化,用于持續(xù)部署。
技術(shù)架構(gòu)原來(lái)的代碼使用gunicorn+gevent+supervisor+flask+DB的架構(gòu);具體的細(xì)節(jié)如下:
本地服務(wù)器搭建了一個(gè)nginx域名服務(wù)器,里面區(qū)分PC端還是手機(jī)端;
訪問(wèn)域名通過(guò)nginx,訪問(wèn)前端靜態(tài)頁(yè)面的內(nèi)容
靜態(tài)頁(yè)面中加載指定地址的數(shù)據(jù),提供數(shù)據(jù)的服務(wù)由flask后端提供接口;
后端提供的接口,通過(guò)訪問(wèn)redis緩存和mongodb數(shù)據(jù)庫(kù),返回相應(yīng)的數(shù)據(jù);
整改方案首先我們需要將DB和Flask App拆分開(kāi),使用supervisor將包括DB在哪的所有進(jìn)程,都控制在一起,所以我們需要經(jīng)他們分開(kāi):
直接使用docker pull 下載指定版本的redis和mongo就可以
構(gòu)建flask app的dockerfile
在dockerfile中,我們決定不實(shí)用supervisor,具體原因下面說(shuō);
由于之前的supervisor是安裝在centos中的,我們代碼使用python3,所以在centos上裝了一個(gè)虛擬環(huán)境,用于跑flask代碼,所以我們使用python:3.6-slim為基礎(chǔ)鏡像;在使用apline鏡像的時(shí)候,不能安裝一些依賴,包括supervisor,所以我選擇了slim,后面拆分的時(shí)候因?yàn)閟upervisor在slim中,每次啟動(dòng)都有問(wèn)題,所以我放棄了supervisor,這樣你也可以使用apline,但是我還是保持了slim;
FROM python:3.6-slim COPY . /app WORKDIR /app RUN pip install -i https://pypi.douban.com/simple -r requirements.txt EXPOSE 5000 ENV FLASK_APP=manage.py
上面構(gòu)建的是整個(gè)flask項(xiàng)目的鏡像,包括寫數(shù)據(jù)庫(kù)的進(jìn)程(可獨(dú)立運(yùn)行),還有一個(gè)廣播的進(jìn)程,最后就是flask本身的進(jìn)程;我們已經(jīng)將數(shù)據(jù)庫(kù)獨(dú)立出來(lái),所以在原來(lái)的代碼中需要將訪問(wèn)數(shù)據(jù)庫(kù)的URL host修改對(duì)應(yīng)的IP,也可以使用--link,直接指定contianer的名字代替host,具體原理沒(méi)有詳細(xì)研究。(后來(lái)發(fā)現(xiàn),在平滑升級(jí)的時(shí)候還是需要將DB對(duì)應(yīng)的端口暴露給宿主機(jī),本來(lái)使用--link是不需要的);
flask鏡像包含了寫數(shù)據(jù)庫(kù),flask本身(可以理解為讀數(shù)據(jù)庫(kù))和廣播功能,我們?cè)趩?dòng)鏡像的時(shí)候,需要啟動(dòng)這三個(gè)進(jìn)程,分別是: flask run --host 0.0.0.0; flask wdb; flask broadcast;
為了保持代碼的完整,我們不使用flask run命令,而使用原來(lái)的gunicorn+gevent的方式執(zhí)行代碼;
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27857.html
摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是...
摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是...
摘要:總結(jié)本次鏡像化大概花了一周的時(shí)間,包括測(cè)試和解決一些坑,很多知識(shí)點(diǎn)包括原來(lái)的項(xiàng)目都不是太熟悉,所以記錄一下,可能回頭會(huì)發(fā)現(xiàn)這些很,但是相信對(duì)一些人還是有用的。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼d...
摘要:總結(jié)本次鏡像化大概花了一周的時(shí)間,包括測(cè)試和解決一些坑,很多知識(shí)點(diǎn)包括原來(lái)的項(xiàng)目都不是太熟悉,所以記錄一下,可能回頭會(huì)發(fā)現(xiàn)這些很,但是相信對(duì)一些人還是有用的。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來(lái)的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼d...
閱讀 1920·2021-11-24 11:16
閱讀 3273·2021-09-10 10:51
閱讀 3228·2021-08-03 14:03
閱讀 1275·2019-08-29 17:03
閱讀 3256·2019-08-29 12:36
閱讀 2242·2019-08-26 14:06
閱讀 506·2019-08-23 16:32
閱讀 2708·2019-08-23 13:42