一、项目背景
先说一说事情的来龙去脉:公司有一个项目,后端是Spring Boot,前端是ElementUI,数据库用MySQL。早期客户不多,所以后端包和前端包都放在Tomcat里部署,然后给每个客户单独部署一套。项目在这个阶段,这样做无疑是最合理且有效的,公司本来就没几个人,一切从简,从实用角度出发。
经过几年的运作,客户逐渐积累多了。其实也不是很多,对我们这种小微公司来说算多的,一共大概20个客户左右。这样的话,按照原先的方式,如果给每个客户部署一套系统,就需要部署20套,不仅实施成本增加了,后面的运维成本,代码同步等问题就凸显了。于是我们决定改成集中化部署,只部署一套系统,通过账号来控制权限。也许一开始就应该这样做,但是最开始公司就一两个人,能把项目拉扯起来就已经是巨大成功,谁会去考虑这些。
由于担心集中化部署,程序的性能有瓶颈,因此,我们将程序拆分成若干微服务。经过大概2周时间,我们将程序拆分完,外加上拆分过程中引发的一些列问题,前前后后大概搞了一个月左右,最终程序也顺利上线了。后来又经历了一段时间的升级维护,发现服务多了不好管理,测试环境和生产环境的网络等各方面差异也比较大,开发环境、测试环境和生产环境总是不能统一,由于环境产生的问题,难以排查。
再后来,就决定使用docker-compose对微服务进行编排,方便管理。目前程序改造工作已经基本完成了,在测试环境部署了一版,生产环境还没有部署。
二、整体思路
项目依赖的mysql、nacos、redis没有放在docker-compose里编排,因为这块服务可能会有其他项目也需要使用。因此,这三个服务使用docker单独部署的。其他服务以及项目的前端包都放在docker-compose里编排,具体情况如图所示:
三、配置文件
我将完整的配置文件贴出来,以备忘和参考,至于 docker
与 docker-compose
的安装比较简单,网上有很多文章,随便找一个操作一下就可以:
version: '3'
networks:
shjd-network:
external: true
ipam:
config:
- subnet: 192.168.0.0/24
services:
bid-gateway: # 网关
build: ./bid-gateway
ports:
- 10010:10010
networks:
shjd-network:
ipv4_address: 192.168.0.100
container_name: bid-gateway
bid-coc: # 控制中心
build: ./bid-coc-server
ports:
- 8010:8010
networks:
shjd-network:
ipv4_address: 192.168.0.20
container_name: bid-coc
depends_on:
- bid-gateway
bid-fwspj: # ABC服务
build: ./bid-abc-server
ports:
- 8310:8310
networks:
shjd-network:
ipv4_address: 192.168.0.23
container_name: bid-fwspj
depends_on:
- bid-coc
bid-open: # 开放接口服务
build: ./bid-open
ports:
- 8610:8610
networks:
shjd-network:
ipv4_address: 192.168.0.26
container_name: bid-open
bid-websocket: # 长连接服务
build: ./bid-websocket
ports:
- 8910:8910
networks:
shjd-network:
ipv4_address: 192.168.0.29
container_name: bid-websocket
bid-view:
build: ../bid-view # 指定 Dockerfile 所在路径
ports: # 指定端口映射
- 18080:18080
networks:
shjd-network:
ipv4_address: 192.168.0.110
container_name: bid-view
depends_on:
- bid-gateway