3修改環境_apollo配置中心新增自定義環境
技術標籤:3修改環境
1. apollo部署
本次部署環境為DEV(開發環境)、SIT(整合測試環境)、UAT(使用者驗收測試環境)、PRO(生產環境),採用apollo版本為1.4.0,相關的部署文件可參考官網。
2. apollo專案介紹
Apollo(阿波羅)是攜程框架部門研發的分散式配置中心,能夠集中化管理應用不同環境、不同叢集的配置,配置修改後能夠實時推送到應用端,並且具備規範的許可權、流程治理等特性,適用於微服務配置管理場景。
apollo主要專案如下:
apollo-configservice:提供配置獲取介面,提供配置更新推送介面,介面服務物件為Apollo客戶端。
apollo-adminservice:提供配置管理介面,提供配置修改、釋出等介面,介面服務物件為Portal,以及Eureka。
apollo-portal:提供Web介面供使用者管理配置。
apollo-client:Apollo提供的客戶端程式,為應用提供配置獲取、實時更新等功能。
3.自定義apollo環境
自定義一個apollo部署環境也很簡單,比如我們加入一個SIT環境,我們需要進行如下操作:
1. 修改apollo-core專案,com.ctrip.framework.apollo.core.enums.Env,在其中加入SIT列舉:
public enum Env{ LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN,SIT; ........}
2.修改apollo-core專案,com.ctrip.framework.apollo.core.enums.EnvUtils,在其中加入SIT列舉的轉換邏輯:
public final class EnvUtils { //新增SIT環境規則public static Env transformEnv(String envName) {if (StringUtils.isBlank(envName)) {return Env.UNKNOWN;}switch (envName.trim().toUpperCase()) {case "LPT":return Env.LPT;case "FAT":case "FWS":return Env.FAT;case "UAT":return Env.UAT;case "PRO":case "PROD": //just in casereturn Env.PRO;case "DEV":return Env.DEV;case "LOCAL":return Env.LOCAL;case "TOOLS":return Env.TOOLS;case "SIT":return Env.SIT;default:return Env.UNKNOWN;}}}
3.修改apollo-core專案,com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider類,增加讀取SIT環境的meta server地址邏輯:
public class LegacyMetaServerProvider implements MetaServerProvider { // make it as lowest as possible, yet not the lowest public static final int ORDER = MetaServerProvider.LOWEST_PRECEDENCE - 1; private static final Map domains = new HashMap<>(); public LegacyMetaServerProvider() { initialize(); } private void initialize() { Properties prop = new Properties(); prop = ResourceUtils.readConfigFile("apollo-env.properties", prop); domains.put(Env.LOCAL, getMetaServerAddress(prop, "local_meta", "local.meta")); domains.put(Env.DEV, getMetaServerAddress(prop, "dev_meta", "dev.meta")); domains.put(Env.FAT, getMetaServerAddress(prop, "fat_meta", "fat.meta")); domains.put(Env.UAT, getMetaServerAddress(prop, "uat_meta", "uat.meta")); domains.put(Env.LPT, getMetaServerAddress(prop, "lpt_meta", "lpt.meta")); domains.put(Env.PRO, getMetaServerAddress(prop, "pro_meta", "pro.meta")); domains.put(Env.SIT, getMetaServerAddress(prop, "sit_meta", "sit.meta")); } ................}
4. 修改log日誌檔案生成路徑:
修改apollo-adminservice專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-adminservice/100003172。修改apollo-configservice專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-configservice/100003171。修改apollo-portal專案下/script/startup.sh,日誌路徑替換為:LOG_DIR=/usr/local/nlp/logs/apollo-portal/100003173。
經過如上四步我們完成了SIT環境的新增。
4.apollo打包
由於我們存在DEV,UAT,SIT,PRO四套環境,apollo-configservice,apollo-adminservice專案需要切換四次環境打包。apollo-portal專案只需打包一次。
#dev 環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx25:3519/apollo_configdb_dev?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#uat環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_uat?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#sit環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_sit?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxxx#pro環境mvn clean package -DskipTests -pl apollo-configservice,apollo-adminservice -am -Dapollo_profile=github -Dspring_datasource_url=jdbc:mysql://10.xxx.xx.25:3519/apollo_configdb_pro?characterEncoding=utf8 -Dspring_datasource_username=wxt_apollo -Dspring_datasource_password=xxx#portalmvn clean package -DskipTests -pl apollo-portal -am -Dapollo_profile=github,auth -Dspring_datasource_url=jdbc:mysql://10.180.14.25:3519/apollo_portaldb?characterEncoding=utf8 -Dspring_datasource_username=yrz_apollo -Dspring_datasource_password=xxxx -Ddev_meta=http://10.xxx.xx.127:8080 -Dsit_meta=http://10.xxx.xx.129:8080 -Duat_meta=http://10.xxx.xx.128:8080 -Dpro_meta=http://10.xxx.xx.130:8080
5.apollo部署
在自己的伺服器上新建一個目錄 /usr/local/wxt/apollo_xxx/ 將官方提供的安裝包直接下載到這個目錄下,然後解壓:
unzip apollo-adminservice-1.4.0-github.zip -d apollo-adminservice-1.4.0-githubunzip apollo-configservice-1.4.0-github.zip -d apollo-configservice-1.4.0-githubunzip apollo-portal-1.4.0-github.zip -d apollo-portal-1.4.0-github
6. 啟動專案
在每一個工程的解壓包中,都有一個 scripts 資料夾,這裡面是 Apollo 工程的啟動指令碼。三個工程分別先後啟動:apollo-configservice、apollo-adminservice、apollo-portal,就是分別執行這三個工程下面的 /scripts/startup.sh 指令碼即可,關閉執行的是
7. apollo 客戶端呼叫規則
apollo meta由核心服務統一進行了封裝,各服務只需在pom檔案引入microservice-apollo服務即可。
1.導包
com.wxt microservice-apollo
2.新增配置檔案
新增bootstrap.yml,引入apollo相關配置
app: id: microservice-gateway #從服務端獲取配置的唯一標識apollo: cacheDir: /usr/local/wxt/config-data #本地快取路徑 bootstrap: enabled: true namespaces: application,eureka-gateway #配置項集合
app.id 是應用的唯一身份標識,Apollo客戶端使用這個標識來獲取應用自己的私有Namespace配置。
apollo.cacheDir 為本地環境配置路徑。
apollo.bootstrap.namespaces 獲取遠端配置,多個時逗號分隔。
3.修改啟動項
修改啟動項新增如下註解:
@EnableApolloConfigpublic class MicroserviceGatewayApplication {...........}