Apollo多环境配置
Apollo预先定义的环境有四种:(DEV, FAT, UAT, PRO)。
- DEV
- 开发环境
- FAT
- 测试环境,相当于alpha环境(功能测试)
- UAT
- 集成环境,相当于beta环境(回归测试)
- PRO
- 生产环境
分布式多环境部署图:
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.meta
和evn
环境 - 生产环境或者测试环境,通过编译时传参或者启动应用时传参的方式进行配置,具体如下:
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预先定义好的环境的做法一致