
Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景。
我們先拉取源碼,修改maven setting file,構建本地工程同時,我們再來筆者這篇文章。
這篇我們只關注於默認dev環境的啟動配置(比較簡單的配置),其實ApolloPortalDB只需要在生產環境部署一個即可,而ApolloConfigDB需要在每個環境部署一套,如dev、fat、uat和pro分別部署4套ApolloConfigDB。
一、創建數據庫
Apollo服務端共需要兩個數據庫:ApolloPortalDB和ApolloConfigDB,我們把數據庫、表的創建和樣例數據都分別准備了sql文件,只需要導入數據庫即可。
創建ApolloPortalDB
通過MySQL客戶端導入apolloportaldb.sql即可。
創建ApolloConfigDB
通過MySQL客戶端導入apolloconfigdb.sql即可。
二、本地啟動
2.1 啟動Apollo Config Service和Apollo Admin Service
創建運行配置
Main class 配置
com.ctrip.framework.apollo.assembly.ApolloApplication
Vm options 配置
-Dapollo_profile=github
-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
-Dspring.datasource.username=root -Dspring.datasource.password=****** -Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-assembly.log
1、datasource相關配置替換成你自己的數據庫連接信息,注意數據庫是ApolloConfigDB
2、程序默認日志輸出為/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路徑,可以增加logging.file參數,如下:
-Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-assembly.log
Program arguments 配置
--configservice --adminservice
Use classpath of module 配置
apollo-assembly
啟動運行

啟動完后,打開http://localhost:8080可以看到apollo-configservice和apollo-adminservice都已經啟動完成並注冊到Eureka。

2.2 啟動Apollo-Portal
創建運行配置
Main class 配置
com.ctrip.framework.apollo.portal.PortalApplication
Vm options 配置
-Dapollo_profile=github,auth
-Ddev_meta=http://localhost:8080/
-Dserver.port=8070
-Dspring.datasource.url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
-Dspring.datasource.username=root
-Dspring.datasource.password=root@123
-Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-portal.log
1、默認ApolloPortalDB中導入的配置只會展示DEV環境的配置,所以這里配置了dev_meta屬性,如果你希望在本地展示其它環境的配置,需要在這里增加其它環境的meta服務器地址,如fat_meta。
2、程序默認日志輸出為/opt/logs/100003171/apollo-assembly.log,如果需要修改日志文件路徑,可以增加logging.file參數,如下:
-Dlogging.file=/Users/lewis/SourceProjects/apollo/log/apollo-portal.log
Program arguments 配置
--configservice --adminservice
Use classpath of module 配置
apollo-protal
啟動完后,打開http://localhost:8070就可以看到Apollo配置中心界面了。
默認賬號密碼apollo/admin

2.3 接入客戶端
創建運行配置
Main class 配置
com.ctrip.framework.apollo.demo.spring.springBootDemo.SpringBootSampleApplication
Vm options 配置
-Denv=dev
-Ddev_meta=http://localhost:8080
我們先配置dev環境的meta server地址為http://localhost:8080,也就是apollo-configservice的地址。
Use classpath of module 配置
apollo-demo
2.4 服務端配置項
ApolloPortalDB配置

1.apollo.portal.envs - 可支持的環境列表
默認值是dev,如果portal需要管理多個環境的話,以逗號分隔即可(大小寫不敏感),如:
DEV,FAT,UAT,PRO
修改完需要重啟生效。
2.organizations - 部門列表
Portal中新建的App都需要選擇部門,所以需要在這里配置可選的部門信息,樣例如下:
[{"orgId":"TEST1","orgName":"樣例部門1"},{"orgId":"TEST2","orgName":"樣例部門2"}]
ApolloConfigDB配置

配置項統一存儲在ApolloConfigDB.ServerConfig表中,需要注意每個環境的ApolloConfigDB.ServerConfig都需要單獨配置,修改完一分鍾實時生效。
1. eureka.service.url - Eureka服務Url
默認本地就是http://localhost:8080/eureka/
2. namespace.lock.switch - 一次發布只能有一個人修改開關,用於發布審核
這是一個功能開關,如果配置為true的話,那么一次配置發布只能是一個人修改,另一個發布。
3. config-service.cache.enabled - 是否開啟配置緩存
這是一個功能開關,如果配置為true的話,config service會緩存加載過的配置信息,從而加快后續配置獲取性能。
默認為false,開啟前請先評估總配置大小並調整config service內存配置。
4. item.key.length.limit - 配置項 key 最大長度限制
默認配置是128。
5. item.value.length.limit - 配置項 value 最大長度限制
默認配置是20000。
三、開發啟動的常見問題
3.1 本地運行時Portal一直報Env is down.

默認config service啟動在8080端口,admin service啟動在8090端口。請確認這兩個端口是否被其它應用程序占用。
如果還伴有異常信息:org.springframework.web.client.HttpClientErrorException: 405 Method Not Allowed,一般是由於本地啟動了ShadowSocks,因為ShadowSocks默認會占用8090端口。
1.1.0版本增加了系統信息頁面,可以通過管理員工具 -> 系統信息查看當前各個環境的Meta Server以及admin service信息,有助於排查問題。
3.2 啟動注冊Eureka地址錯誤

檢查ApolloConfigDB.ServerConfig表中 eureka.service.url 是否配置正確。
3.3 檢查是否存在沒有配置的環境
java.lang.IllegalArgumentException: Not enough variable values available to expand 'pro_meta'
檢查ApolloPortalDB.ServerConfig表中 apollo.portal.envs 配置項是否都有配置,默認應該只配置dev(不區分大小寫)
3.4 檢查mysql配置版本和驅動
apollo com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known serve
檢查數據庫是否啟動,檢查mysql版本是否符合。具體可以參考
https://github.com/ctripcorp/apollo/issues/1138
問題持續更新。
到這里配置已經可以進行本地聯調測試,如果有任何問題可以留言一起討論。
更多可以參考

