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

前言

    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

  • 進入 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 的列值,多個環境以逗號分隔,保存,重啓服務便可
相關文章
相關標籤/搜索