内容简介:手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码docker化,用于持续部署。原来的代码使用gunicorn+gevent+supervisor+flask+DB的架构;具体的细节如下:本地服务器搭建了一个nginx域名服务器,里面区分PC端还是手机端;
背景
手里有一个web项目,代码按照前端代码库、后端代码库分别在GitHub上,分散带来的结果是,不容易持续集成,比如你可能需要很多的job去保证一个项目的正常运作,但是这个项目也不是特别大,所以尝试将代码融合,于此同时将代码 docker 化,用于持续部署。
技术架构
原来的代码使用gunicorn+gevent+supervisor+flask+DB的架构;具体的细节如下:
本地服务器搭建了一个nginx域名服务器,里面区分PC端还是手机端;
访问域名通过nginx,访问前端静态页面的内容
静态页面中加载指定地址的数据,提供数据的服务由flask后端提供接口;
后端提供的接口,通过访问 redis 缓存和 mongodb 数据库,返回相应的数据;
docker-compose
上篇文章说了flask项目是怎么拆分和组合的,但是上次仅仅是使用docker,多个容器之间使用的--link连接起来的,本篇文章将介绍如何使用docker-compose代替原来的多个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" ```
- 解释:所有的启动的dontainer都在inline-network网络环境中,所以可以直接使用aliases指定的名字作为数据库连接时候的host,本来是不打算将数据库的端口的,只给flask用,但是后面由于切换的时候是现切换数据库,在切换后段flask的镜像,所以就将数据库端口和宿主机绑定了。
- 其中flask、matrix、broadcast,都是之前代码中的功能,使用supervisor启动的,现在单独启动三个docker进程去完成。
前端docker
前端的PC端和移动端,都使用npm构建成dist文件,然后通过nginx定向到指定的dist文件内容就可以,所以我们对前端的代码也进行了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端和移动端使用的dockerfile和default.conf都是上面的;
- 在服务其部署的时候,只需要部署域名服务,将PC端和移动端的docker镜像映射到宿主机的8088和8087端口,服务器nginx配置中根据PC请求和移动端的请求,定位到指定的PC/移动端nginx镜像即可。
总结
本次镜像化大概花了一周的时间,包括测试和解决一些坑,很多知识点包括原来的项目都不是太熟悉,所以记录一下,可能回头会发现这些很LOW,但是相信对一些人还是有用的。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 京东占领首页项目架构揭密
- flutter 完整项目(mvvm架构)
- Swift 面向应用架构开源项目精选
- 比特币钱包开发:钱包项目整体架构设计
- EOS钱包开发:钱包项目整体架构设计
- 大型项目前端架构浅谈(8000字原创)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
用户至上:用户研究方法与实践(原书第2版)
凯茜·巴克斯特 / 王兰、杨雪、苏寅 / 机械工业出版社 / 2017-5-1 / 99
《UI/UE系列丛书 用户至上:用户研究方法与实践(原书第2版)》是用户研究方法指南,谷歌用户体验研究员十几年工作经验结晶,从理论到实战,包含完整的实操案例,是设计以人为中心产品的实用手册。 《UI/UE系列丛书 用户至上:用户研究方法与实践(原书第2版)》包含五个部分共15章。入门篇包括第1~5章:介绍用户体验入门,如何理解目标用户,道德与法律问题,如何搭建研究设施,如何选择用户体验研究方......一起来看看 《用户至上:用户研究方法与实践(原书第2版)》 这本书的介绍吧!