首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以避免重复我的蓝绿色部署的服务定义吗?

我可以避免重复我的蓝绿色部署的服务定义吗?
EN

Stack Overflow用户
提问于 2018-09-05 14:41:09
回答 1查看 296关注 0票数 1

我正在研究一种简单的方法,用于应用程序后端的蓝绿色部署。我从一开始就为后端编写了一个docker-compose文件,并在稍后迁移了该文件以支持蓝绿色。

我不需要码头群或类似的东西。我使用蓝绿色部署,因为该项目的每个前端版本在发布之前都必须经过审查过程,并且在审查之后不允许以任何方式进行更改。因此,我为前端版本连接的任何后端端点,在进行审查时都会立即修复。因此,我交替使用每个版本的后端端点,以便在任何时候都有测试和实时后端。

我的问题是:我能以某种方式简化这些服务定义吗,因为它们非常重复?从本质上讲,蓝色和绿色服务做的是完全相同的事情。我甚至可以对这两个端口使用相同的端口,因为我的反向代理负责路由请求。但我不知道如何使用不同的名称(蓝色或绿色)启动两次服务,所以我复制了后端服务。

代码语言:javascript
复制
version: '3'

networks:
  nw1:
    external: false
  nw2:
    external: true

services:
  blue:
    entrypoint:
      - npm
      - run
    command:
      - "start-backend"
      - --
      - -s
      - ${CLIENT_SECRET}
      - -c
      - ${CLIENT_ID}
      - -o
      - ${OWNER_ID}
    build: .
    expose:
      - ${BLUE_PORT}
    networks:
      - nw1
      - nw2
    environment:
      - PORT=${BLUE_PORT}
      - CONFIG=live
    depends_on:
      - mongodb

  green:
    entrypoint:
      - npm
      - run
    command:
      - "start-backend"
      - --
      - -s
      - ${CLIENT_SECRET}
      - -c
      - ${CLIENT_ID}
      - -o
      - ${OWNER_ID}
    build: .
    expose:
      - ${GREEN_PORT}
    networks:
      - nw1
      - nw2
    environment:
      - PORT=${GREEN_PORT}
      - CONFIG=live
    depends_on:
      - mongodb

  mongodb:
    image: mongo:3.4
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - ./myapplication/data/db:/data/db
    command: mongod --smallfiles --logpath=/dev/null # --quiet
    networks:
      - nw1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-06 22:51:29

多个不同的选项。首先,您可以创建两个完全独立的堆栈,一个用于蓝色,另一个用于绿色。您需要将任何公共服务移到第三个公共堆栈中,并使用外部网络和/或卷进行连接。在蓝色/绿色堆栈定义中,使用变量来配置该堆栈唯一的任何内容,比如您的端口。这将是我推荐的解决方案,因为它允许您轻松地向组合中添加更多服务,并使用相同的组合文件在蓝/绿环境之外部署相同的堆栈。

第二种选择是使用Yaml的锚和别名语法。

代码语言:javascript
复制
version: '3'

networks:
  nw1:
    external: false
  nw2:
    external: true

services:
  blue: &service
    entrypoint:
      - npm
      - run
    command:
      - "start-backend"
      - --
      - -s
      - ${CLIENT_SECRET}
      - -c
      - ${CLIENT_ID}
      - -o
      - ${OWNER_ID}
    build: .
    expose:
      - ${BLUE_PORT}
    networks:
      - nw1
      - nw2
    environment:
      - PORT=${BLUE_PORT}
      - CONFIG=live
    depends_on:
      - mongodb

  green:
    <<: *service
    expose:
      - ${GREEN_PORT}
    environment:
      - PORT=${GREEN_PORT}
      - CONFIG=live

  mongodb:
    image: mongo:3.4
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - ./myapplication/data/db:/data/db
    command: mongod --smallfiles --logpath=/dev/null # --quiet
    networks:
      - nw1

最后一种选择是将服务的公共部分定义为extension field,然后使用相同的别名和锚定语法在组合文件中重用它。

代码语言:javascript
复制
version: '3.7'

x-service-common: &service-common
  entrypoint:
    - npm
    - run
  command:
    - "start-backend"
    - --
    - -s
    - ${CLIENT_SECRET}
    - -c
    - ${CLIENT_ID}
    - -o
    - ${OWNER_ID}
  build: .
  networks:
    - nw1
    - nw2
  depends_on:
    - mongodb

networks:
  nw1:
    external: false
  nw2:
    external: true

services:
  blue:
    <<: *service-common
    expose:
      - ${BLUE_PORT}
    environment:
      - PORT=${BLUE_PORT}
      - CONFIG=live

  green:
    <<: *service-common
    expose:
      - ${GREEN_PORT}
    environment:
      - PORT=${GREEN_PORT}
      - CONFIG=live

  mongodb:
    image: mongo:3.4
    environment:
      - MONGO_DATA_DIR=/data/db
      - MONGO_LOG_DIR=/dev/null
    volumes:
      - ./myapplication/data/db:/data/db
    command: mongod --smallfiles --logpath=/dev/null # --quiet
    networks:
      - nw1
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52178651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档