Apollo鏡像服務
基於開源Apollo服務進行相關服務鏡像打包,實際將分發apollo-adminservice
、apollo-configservice
和apollo-portal
這三個鏡像安裝包。
一、 部署安裝
1. config服務
首先我們需要提供對應的配置文件並將其映射到對應的鏡像的目錄下,首先我們
編寫對應的配置文件(application-github.properties):
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
其中需要我們指定對應服務的數據庫,數據庫的初始化語句見根本目錄sql下的apolloconfigdb.sql
文件。並
需要在最終的映射中將對應文件映射到容器內的/apollo-configservice/config/application-github.properties
。
對應的啟動腳本如下所示:
docker run -d -p 8080:8080 --name dev-configservice -v /home/apollo/application-github.properties:/apollo-configservice/config/application-github.properties harbor.vip56.cn/common/apollo-configservice:1.6.2
由於我們這里是采用Docker環境進行部署,如果開發者需要通過外部網絡請求並測試需要設置EUREKA_INSTANCE_IP_ADDRESS
固定注冊到eurake中的
服務IP地址或采用EUREKA_INSTANCE_HOME_PAGE_URL
固定注冊的IP地址與端口,否則將以Docker內部的地址進行注冊,客戶端將無法進行連接。
2. admin服務
同config服務,我們也需要編寫對應的配置文件連接到數據庫(application-github.properties):
# DataSource
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
完成以上配置文件的編寫后就需要將其映射到對應鏡像的路徑下
/apollo-adminservice/config/application-github.properties
,最終我們啟動該服務的腳本類似如下所示:
docker run -d -p 8090:8090 --name dev-adminservice -v /home/apollo/application-github.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
由於config
本身自帶了eureka
服務,所以默認的localhost只有config服務可以注冊進去,而admin
服務無法注冊,
所以我們需要打開ApolloConfigDB.ServerConfig
設置value為eureka.service.url
的值為其他服務可以訪問的地址。
除以上的可設置參數外,用戶也可以根據實際需要調整該表的其他字段值,主要有以下幾個配置:
namespace.lock.switch
:是否限制只能一人修改配置一人發布;
config-service.cache.enabled
:是否緩存已被讀取過的配置,從而加快后續配置讀取;
item.key.length.limit
:限制Key最長長度,默認128;
item.value.length.limit
:限制Value最長長度,默認20000;
3. portal服務
同理也需要配置對應的數據庫連接地址,只是其數據庫的是獨立的需要單獨使用
sql/apolloportaldb.sql
文件進行初始化,然后對配置文件application-github.properties
進行修改即可,對應配置文件內容如下:
# DataSource
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
並且依然需要映射到容器內對應的路徑下/apollo-portal/config/application-github.properties
僅僅完成以上的配置還不足以,因為看板與其他admin
和config
服務不一樣,看板可以統一進心管理
而不需要根據環境進行獨立部署,所以就需要配置對應meta
服務的地址到配置文件apollo-env.properties
中,對應配置文件的內容如下:
local.meta=http://localhost:8080
dev.meta=http://fill-in-dev-meta-server:8080
fat.meta=http://fill-in-fat-meta-server:8080
uat.meta=http://fill-in-uat-meta-server:8080
lpt.meta=${lpt_meta}
pro.meta=http://fill-in-pro-meta-server:8080
用戶根據自己實際需要的環境進行配置即可,完成以上配置后就可以啟動服務了:
docker run -d -p 8070:8070 --name portal -v /home/apollo/application-github.properties:/apollo-portal/config/application-github.properties -v /home/apollo/apollo-env.properties:/apollo-portal/config/apollo-env.properties harbor.vip56.cn/common/apollo-portal:1.6.2
完成以上服務啟動后,我們就可以進入portal
進行進一步的參數設置,當然這里可以通過直接操作
數據庫ApolloPortalDB.ServerConfig
表也可以通過其中自帶的管理員工具-系統參數
進行設置:
apollo.portal.envs
:可支持的環境列表,默認只有Dev
,如果要開啟其他的可以以逗號分隔進行設置(DEV,FAT,UAT,PRO);
apollo.portal.meta.servers
:各環境的Meta服務地址,一般配置文件都已經設置,當然也可以通過這里修改;
organizations
:部門列表,新建的App都需要歸屬具體部門,可以通過這里進行增加;
consumer.token.salt
:用於開放Api的令牌鹽值;
wiki.address
:看板中幫助指向的地址;
role.create-application.enabled
:是否開啟創建項目權限控制,開啟后只有擁有權限的人可以創建項目;
4. 集群架構部署
如果需要集群架構部署建議portal
可以部署一個服務,然后根據實際開發的需求將其中的config
、meta
和admin
服務各自
部署到對應環境的服務器中,當然對應的數據庫也需要各自進行獨立部署。對於存在更高部署要求的建議參考官網文檔
為了方便開發者基於Docker進行集群開發這里將准備對應指令,首先我們需要創建3個ApolloConfigDB數據庫,名字需要各自不一樣。
然后我們接着進行三個獨立環境的服務開發:
- Dev環境
docker run -d -p 8080:8080 --name dev-configservice -v F://dockermap/application-github.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:8080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 8090:8090 --name dev-adminservice -v F://dockermap//application-github.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
docker run -d -p 18080:8080 --name fat-configservice -v F://dockermap/application-github-fat.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:18080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 18090:8090 --name fat-adminservice -v F://dockermap//application-github-fat.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
docker run -d -p 28080:8080 --name pro-configservice -v F://dockermap/application-github-pro.properties:/apollo-configservice/config/application-github.properties -e EUREKA_INSTANCE_HOME_PAGE_URL=192.168.3.6:28080 harbor.vip56.cn/common/apollo-configservice:1.6.2
docker run -d -p 28090:8090 --name pro-adminservice -v F://dockermap//application-github-pro.properties:/apollo-adminservice/config/application-github.properties harbor.vip56.cn/common/apollo-adminservice:1.6.2
二、 .Net Core SDK使用
1. 引用類庫
Install-Package Com.Ctrip.Framework.Apollo.Configuration -Version 2.4.0
2. 配置服務地址
首先我們打開對應環境的appsettings.json
文件然后輸入以下配置內容:
{
"apollo": {
"AppId": "SampleApp",
"Env": "DEV",
"Meta": {
"DEV": "http://192.168.153.156:8080/",
"FAT": "http://192.168.153.156:18080/",
"PRO": "http://192.168.153.156:28080/"
}
}
}
其中Meta
可以根據實際需要的環境進行設置,具體會根據Env
進行切換,從而確保能夠讀取
到正確環境下的參數變量。
3. 代碼初始化
完成以上配置后我們就需要進行代碼初始化操作,首先我們打開Program.cs
文件將方法CreateWebHostBuilder
進行修改,具體修改如下:
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(builder => builder
.AddApollo(builder.Build().GetSection("apollo"))
.AddDefault(ConfigFileFormat.Json)
.AddDefault())
.UseStartup<Startup>();
完成以上配置后我們就可以通過注入IConfiguration
接口實現讀取配置信息,當然實際開發過程中
往往我們需要監聽配置是否發生變化從而使對應服務進行重新注入,這里我們可以直接使用本身自帶的
方式進行監聽,以下是一個代碼示例:
private void ChangeConfig(object x)
{
if (x is IConfiguration subConfig)
{
subConfig.GetReloadToken().RegisterChangeCallback(ChangeConfig, subConfig);
}
Console.WriteLine("config change");
}
var config = context.RequestServices.GetRequiredService<IConfiguration>();
var reloadtoken = config.GetReloadToken();
config.GetReloadToken().RegisterChangeCallback(ChangeConfig, config);
完成以上操作之后我們就可以實現配置從Apollo中進行讀取並且實現根據配置變更進行ReLoad了。
三、 Java SDK使用
盡請期待