前言
Apollo(阿波羅)是攜程框架部門研發的分佈式配置中心,可以集中化管理應用不一樣環境、不一樣集羣的配置,配置修改後可以實時推送到應用端,而且具有規範的權限、流程治理等特性,適用於微服務配置管理場景。java
- github 地址:https://github.com/ctripcorp/apollo
- 服務端基於Spring Boot和Spring Cloud開發,打包後能夠直接運行,不須要額外安裝Tomcat等應用容器
- Java客戶端不依賴任何框架,可以運行於全部Java運行時環境,同時對Spring/Spring Boot環境也有較好的支持
- .Net客戶端不依賴任何框架,可以運行於全部.Net運行時環境
- 以上摘抄自官方文檔,該框架目前已達 9000 多個 star,並且目前已經支持了 .netcore 客戶端
安裝
服務器環境安裝檢查
因爲本次是按照正式環境來模擬一次部署,因此,按照官方指引,正式環境部署並不建議使用 Quick Start;接下來打開官方「分佈式部署」指引文檔:https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97mysql
- 首先是檢查服務器是否安裝了 Java 環境,在服務器輸入 java -version

- 能夠看到,服務已經安裝,若是沒有安裝,這輸入 yum install java-1.8.0-openjdk(本次使用的服務器爲 Centos 7.0)。
數據庫檢查
官方要求數據庫爲 MySQL,版本要求:5.6.5+,我在這裏使用了 MariaDB 10.3,效果相同,安裝好數據庫後,下載官方 SQL 文件,執行,建立 apollo 所需的數據庫。數據庫文件一共有兩個git

- ApolloPortalDB 同理,能夠看到,數據庫已經成功安裝
安裝服務和 web 管理控制檯
服務一共有 3 個實例,都從這裏下載:https://github.com/ctripcorp/apollo/releases,我直接下載做者編譯好的 zip 文件github

下面簡單介紹各個服務以及用途web
- apollo-configservice apollo 配置文件服務,該服務直接對外提供服務,同時須要在 portal 進行元數據註冊,下面修改該服務的數據庫配置文件。
修改配置文件 /apollo-configservice-1.1.2/config/application-github.properties 爲剛纔數據庫的配置
spring.datasource.url = jdbc:mysql://127.0.0.1:3406/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
- apollo-adminservice-1.1.2 web 管理服務,一樣修改其配置文件 apollo-adminservice-1.1.2/config/application-github.properties 爲 ApolloConfigDB 數據庫的地址,同上。
- apollo-portal-1.1.2 元數據服務,修改配置文件 apollo-portal-1.1.2/config/application-github.properties,注意,這裏的數據必須爲 ApolloPortalDB ,以下:
spring.datasource.url = jdbc:mysql://127.0.0.1:3406/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
- 最後,還須要修改 apollo-portal-1.1.2/config/apollo-env.properties 文件,將 configservice 都註冊到 portalservice 中
local.meta=http://localhost:8080
dev.meta=http://172.16.1.220:8080
fat.meta=http://172.16.1.220:8080
uat.meta=http://172.16.1.220:8080
lpt.meta=${lpt_meta}
pro.meta=http://172.16.1.227:8080
啓動和修改配置
在上面作好三個服務端配置後,下面咱們就能夠逐一的啓動各個服務了,各自服務端監聽端口都位於 xxx/scripts/startup.sh 中spring
- 執行 sh apollo-configservice-1.1.2/scripts/startup.sh 啓動 config 服務,監聽端口默認:8080
- 執行 sh apollo-portal-1.1.2/scripts/startup.sh 啓動 portal 服務,監聽端口默認:8070
- 執行 sh apollo-adminservice-1.1.2/scripts/startup.sh 啓動 admin 服務,監聽端口默認:8090
若是輸出看到以上三個服務都輸出信息爲,證實服務啓動成功sql
Waiting for server startup....
Mon Nov 19 11:07:15 CST 2018 Server started in 20 seconds!

- 輸入默認帳號密碼:apollo/admin 登陸 web 控制檯進行查看。

- 爲了方便演示,首先建立一個項目 webapplication1


- 點擊左側按鈕「添加Namespace」,建立一個公共的命名空間,取名爲:common


- 在 dotnet.versin 命名空間下點擊「新增配置」按鈕,增長一個配置節點



- 使用以上方法,在默認的命名空間「application」 下也建立一個名爲「connectionstring" 的節點,一樣將其發佈
- 此時,恭喜你,已完成服務器部署發佈,接下來,咱們經過建立一個 web 應用程序訪問該配置服務
客戶端訪問
- 首先建立 web 項目,完成後在 nuget 包管理器上引用 apollo 的 .netcore 客戶端 Com.Ctrip.Framework.Apollo.Configuration

- 打開 Program.cs 文件,將剛纔在 apollo 服務上建立的命名空間加入到管道中
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
var hostBuilder = WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((context, builder) =>
{
builder.AddApollo(builder.Build().GetSection("apollo"))
.AddDefault()
.AddNamespace("dotnet.version")
.AddNamespace("application");
});
return hostBuilder;
}
- 以上代碼中有一個方法 AddApollo ,這裏傳入了本地配置文件節點 builder.Build().GetSection("apollo"),其配置以下
{
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*",
"apollo": {
"AppId": "webapplication1",
"MetaServer": "http://172.16.1.220:8080"
}
}
- AppId 對於 咱們建立的在 apollo web 控制檯上建立的項目ID webapplication1,元數據服務指向 8080 端口,正是 configservice 的監聽端口
- 在 HomeController 的操做 Action 中,獲取配置節點,並輸出到客戶端
public IActionResult Index()
{
this.ViewBag.ConnectionString = this.cfg["connectionstring"];
this.ViewBag.LastVersion = this.cfg["last-version"];
return View();
}

結語
- apollo 項目官方部署指引很是複雜,緣由就在於整個官方文檔都是大片大片的文字進行鋪排,聖人說:看圖就會,見字想睡,本文但願經過本身的測試能幫助更多想應用 apollo 配置管理服務的朋友
- 注意,安裝完成默認只有 DEV 配置環境,若是須要增長環境,可直接修改數據庫 apolloportaldb.serverconfig 表,字段名稱爲 apollo.portal.envs 的列值,多個環境以逗號分隔,保存,重啓服務便可