Apollo多环境配置

Apollo预先定义的环境有四种:(DEV, FAT, UAT, PRO)。

  • DEV
  • 开发环境
  • FAT
  • 测试环境,相当于alpha环境(功能测试)
  • UAT
  • 集成环境,相当于beta环境(回归测试)
  • PRO
  • 生产环境

分布式多环境部署图:

apollo配置中心docker集群搭建 apollo客户端多环境配置_生产环境

lyliyongblue-apollo-deployment.png

  • Portal部署在生产环境的机房,通过它来直接管理FAT、UAT、PRO等环境的配置
  • Config Service、Admin Service和apolloconfigdb在每个环境都单独部署
  • 应用需要配置指定的环境,默认为dev。

一、添加Apollo预先定义好的环境

1.新增一套Config Service、Admin Service和ApolloConfigDB

一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB。

所以新增环境时,需要重新部署一套Config Service、Admin Service和ApolloConfigDB。

另外如果是为已经运行了一段时间的Apollo配置中心增加环境,还对新的环境做初始化(把旧的Config Service和Admin Service数据拷贝到新的环境)。

2.修改ApolloProtalDB.serverconfig中的apollo.portal.envs - 可支持的环境列表

ps:也可以启动Apollo后,在管理界面更改系统参数-apollo.portal.envs

默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:

DEV,FAT,UAT,PRO

3.修改apollo-portal/config/apollo-env.properties

apollo-portal安装包下的apollo-env.properties文件中修改环境配置:

把添加的环境配置相对应的config-server地址

local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=
uat.meta=
lpt.meta=${lpt_meta}
pro.meta=http://localhost:8081

4.修改项目中的apollo-meta和evn配置:

  • 本地开发环境下,通过server.properties配置文件配置apollo.metaevn环境
  • 生产环境或者测试环境,通过编译时传参或者启动应用时传参的方式进行配置,具体如下:
    maven:
    mvn -clean install -Dapollo.meta=http://config-service-url -Deureka-url=http://192.168.10.126:8001/eureka/java System property:
    java -jar mainWeb.jar --apollo.meta=http://config-service-url --app.id=YOUR-APP-ID--eureka-url=http://192.168.10.126:8001/eureka/

二、 添加自定义环境

如果需要添加的环境不是Apollo预先定义的环境,请参照如下步骤操作:

1.假设需要添加的环境名称叫beta

2.修改源码中的com.ctrip.framework.apollo.core.enums.Env类,在其中加入BETA枚举:

public enum Env{
  LOCAL, DEV, BETA, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
  ...
}

3.修改源码中的com.ctrip.framework.apollo.core.enums.EnvUtils类,在其中加入BETA枚举的转换逻辑:

public final class EnvUtils {
  
  public static Env transformEnv(String envName) {
    if (StringUtils.isBlank(envName)) {
      return Env.UNKNOWN;
    }
    switch (envName.trim().toUpperCase()) {
      ...
      case "BETA":
        return Env.BETA;
      ...
      default:
        return Env.UNKNOWN;
    }
  }
}

4.修改源码中的apollo-env.properties,增加beta.meta占位符:

local.meta=http://localhost:8080
dev.meta=${dev_meta}
fat.meta=${fat_meta}
beta.meta=${beta_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}

5.修改源码中的com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取BETA环境的meta server地址逻辑:

public class LegacyMetaServerProvider {
    ...
    domains.put(Env.BETA, getMetaServerAddress(prop, "beta_meta", "beta.meta"));
    ...
}

6.新增一套Config Service、Admin Service和ApolloConfigDB

与添加Apollo预先定义好的环境的做法一致

7.修改ApolloProtalDB.serverconfig中的apollo.portal.envs - 可支持的环境列表

与添加Apollo预先定义好的环境的做法一致

8.修改项目中的apollo-meta和evn配置

与添加Apollo预先定义好的环境的做法一致