一、项目背景

先说一说事情的来龙去脉:公司有一个项目,后端是Spring Boot,前端是ElementUI,数据库用MySQL。早期客户不多,所以后端包和前端包都放在Tomcat里部署,然后给每个客户单独部署一套。项目在这个阶段,这样做无疑是最合理且有效的,公司本来就没几个人,一切从简,从实用角度出发。

经过几年的运作,客户逐渐积累多了。其实也不是很多,对我们这种小微公司来说算多的,一共大概20个客户左右。这样的话,按照原先的方式,如果给每个客户部署一套系统,就需要部署20套,不仅实施成本增加了,后面的运维成本,代码同步等问题就凸显了。于是我们决定改成集中化部署,只部署一套系统,通过账号来控制权限。也许一开始就应该这样做,但是最开始公司就一两个人,能把项目拉扯起来就已经是巨大成功,谁会去考虑这些。

由于担心集中化部署,程序的性能有瓶颈,因此,我们将程序拆分成若干微服务。经过大概2周时间,我们将程序拆分完,外加上拆分过程中引发的一些列问题,前前后后大概搞了一个月左右,最终程序也顺利上线了。后来又经历了一段时间的升级维护,发现服务多了不好管理,测试环境和生产环境的网络等各方面差异也比较大,开发环境、测试环境和生产环境总是不能统一,由于环境产生的问题,难以排查。

再后来,就决定使用docker-compose对微服务进行编排,方便管理。目前程序改造工作已经基本完成了,在测试环境部署了一版,生产环境还没有部署。

二、整体思路

项目依赖的mysql、nacos、redis没有放在docker-compose里编排,因为这块服务可能会有其他项目也需要使用。因此,这三个服务使用docker单独部署的。其他服务以及项目的前端包都放在docker-compose里编排,具体情况如图所示:

微服务目录 微服务 服务编排_生产环境

三、配置文件

我将完整的配置文件贴出来,以备忘和参考,至于 dockerdocker-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