Asp.NetCore輕松學-配置服務 apollo 部署實踐


前言

    Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景。

  • 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/分布式部署指南

  • 首先是檢查服務器是否安裝了 Java 環境,在服務器輸入 java -version

  • 可以看到,服務已經安裝,如果沒有安裝,這輸入 yum install java-1.8.0-openjdk(本次使用的服務器為 Centos 7.0)。
數據庫檢查

    官方要求數據庫為 MySQL,版本要求:5.6.5+,我在這里使用了 MariaDB 10.3,效果相同,安裝好數據庫后,下載官方 SQL 文件,執行,創建 apollo 所需的數據庫。數據庫文件一共有兩個

  • ApolloPortalDB 同理,可以看到,數據庫已經成功安裝
安裝服務和 web 管理控制台

    服務一共有 3 個實例,都從這里下載:https://github.com/ctripcorp/apollo/releases,我直接下載作者編譯好的 zip 文件

下面簡單介紹各個服務以及用途

  • 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 中

  • 執行 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

如果輸出看到以上三個服務都輸出信息為,證明服務啟動成功

Waiting for server startup....
Mon Nov 19 11:07:15 CST 2018 Server started in 20 seconds!
  • 通過查看 cat apollo-adminservice-1.1.2/scripts/startup.sh 得知,該服務監聽端口為 8070,打開瀏覽器,輸入地址:http://localhost:8090,看到了如下界面

  • 輸入默認賬號密碼:apollo/admin 登錄 web 控制台進行查看。

  • 為了方便演示,首先創建一個項目 webapplication1

  • 進入 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 的列值,多個環境以逗號分隔,保存,重啟服務即可


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM