摘要:總結(jié)本次鏡像化大概花了一周的時(shí)間,包括測(cè)試和解決一些坑,很多知識(shí)點(diǎn)包括原來的項(xiàng)目都不是太熟悉,所以記錄一下,可能回頭會(huì)發(fā)現(xiàn)這些很,但是相信對(duì)一些人還是有用的。
背景
手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼docker化,用于持續(xù)部署。
技術(shù)架構(gòu)原來的代碼使用gunicorn+gevent+supervisor+flask+DB的架構(gòu);具體的細(xì)節(jié)如下:
本地服務(wù)器搭建了一個(gè)nginx域名服務(wù)器,里面區(qū)分PC端還是手機(jī)端;
訪問域名通過nginx,訪問前端靜態(tài)頁(yè)面的內(nèi)容
靜態(tài)頁(yè)面中加載指定地址的數(shù)據(jù),提供數(shù)據(jù)的服務(wù)由flask后端提供接口;
后端提供的接口,通過訪問redis緩存和mongodb數(shù)據(jù)庫(kù),返回相應(yīng)的數(shù)據(jù);
上篇文章說了flask項(xiàng)目是怎么拆分和組合的,但是上次僅僅是使用docker,多個(gè)容器之間使用的--link連接起來的,本篇文章將介紹如何使用docker-compose代替原來的多個(gè)docker命令;
docker compose是什么可以自行搜索,我直接上我的docker-compose.yml
version: "3" services: flask: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: flask logging: driver: "json-file" options: max-size: "200M" max-file: "10" command: "gunicorn manage:app -k gevent -w 4 -b 0.0.0.0" volumes: - $HOME/logs:/app/logs
networks: - inline-network ports: - "8000:8000" matrix: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: matrix command: "flask matrix" volumes: - $HOME/logs:/app/logs - /etc/localtime:/etc/localtime networks: - inline-network broadcast: image: "flask:latest" restart: always depends_on: - mongoDB - redisDB tty: true stdin_open: false environment: SLEEP_SECOND: 10 container_name: broadcast command: "flask broadcast" volumes: - $HOME/logs:/app/logs - /etc/localtime:/etc/localtime networks: - inline-network redisDB: image: "redis:latest" container_name: redis restart: always networks: inline-network: aliases: - redis ports: - "6379:6379" mongoDB: image: "mongo:latest" restart: always container_name: mongo ports: - "27017:27017" volumes: - /var/lib/mongo:/data/db networks: inline-network: aliases: - mongo networks: inline-network: driver: "bridge" ```
解釋:所有的啟動(dòng)的dontainer都在inline-network網(wǎng)絡(luò)環(huán)境中,所以可以直接使用aliases指定的名字作為數(shù)據(jù)庫(kù)連接時(shí)候的host,本來是不打算將數(shù)據(jù)庫(kù)的端口的,只給flask用,但是后面由于切換的時(shí)候是現(xiàn)切換數(shù)據(jù)庫(kù),在切換后段flask的鏡像,所以就將數(shù)據(jù)庫(kù)端口和宿主機(jī)綁定了。
其中flask、matrix、broadcast,都是之前代碼中的功能,使用supervisor啟動(dòng)的,現(xiàn)在多帶帶啟動(dòng)三個(gè)docker進(jìn)程去完成。
前端docker前端的PC端和移動(dòng)端,都使用npm構(gòu)建成dist文件,然后通過nginx定向到指定的dist文件內(nèi)容就可以,所以我們對(duì)前端的代碼也進(jìn)行了docker化,使用的是nginx;
dockerfile:
FROM nginx:1.15-alpine COPY dist/ /usr/share/nginx/html COPY default.conf /etc/nginx/conf.d/default.conf ENTRYPOINT nginx -g "daemon off;"
default.conf
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }
PC端和移動(dòng)端使用的dockerfile和default.conf都是上面的;
在服務(wù)其部署的時(shí)候,只需要部署域名服務(wù),將PC端和移動(dòng)端的docker鏡像映射到宿主機(jī)的8088和8087端口,服務(wù)器nginx配置中根據(jù)PC請(qǐng)求和移動(dòng)端的請(qǐng)求,定位到指定的PC/移動(dòng)端nginx鏡像即可。
總結(jié)本次鏡像化大概花了一周的時(shí)間,包括測(cè)試和解決一些坑,很多知識(shí)點(diǎn)包括原來的項(xiàng)目都不是太熟悉,所以記錄一下,可能回頭會(huì)發(fā)現(xiàn)這些很LOW,但是相信對(duì)一些人還是有用的。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/27872.html
摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是...
摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是...
摘要:背景手里有一個(gè)項(xiàng)目,代碼按照前端代碼庫(kù)后端代碼庫(kù)分別在上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼化,用于持續(xù)部署。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是...
摘要:總結(jié)本次鏡像化大概花了一周的時(shí)間,包括測(cè)試和解決一些坑,很多知識(shí)點(diǎn)包括原來的項(xiàng)目都不是太熟悉,所以記錄一下,可能回頭會(huì)發(fā)現(xiàn)這些很,但是相信對(duì)一些人還是有用的。 背景 手里有一個(gè)web項(xiàng)目,代碼按照前端代碼庫(kù)、后端代碼庫(kù)分別在GitHub上,分散帶來的結(jié)果是,不容易持續(xù)集成,比如你可能需要很多的job去保證一個(gè)項(xiàng)目的正常運(yùn)作,但是這個(gè)項(xiàng)目也不是特別大,所以嘗試將代碼融合,于此同時(shí)將代碼d...
閱讀 2893·2021-09-28 09:36
閱讀 3647·2021-09-27 13:59
閱讀 2497·2021-08-31 09:44
閱讀 2285·2019-08-30 15:54
閱讀 2359·2019-08-30 15:44
閱讀 1192·2019-08-30 13:45
閱讀 1231·2019-08-29 18:38
閱讀 1219·2019-08-29 18:37