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