《springcloud學習》 十八 apollo多環境配置文件管理實現(開發+測試+驗收+生產)

前言

社長,一個愛學習,愛分享的程序猿,始終相信,付出總會有回報的。知識改變命運,學習成就未來。愛拼纔會贏!
程序猿學社的GitHub,已整理成相關技術專刊,歡迎Star:
https://github.com/ITfqyd/cxyxs

要求:有一定的apollo基礎

環境:window作爲搭建環境,linux類似

1.背景

             在項目開發中,我們常用的四個環境,開發(dev  實際上就是本地環境  使用人羣開發),集成環境(sit 使用人羣測試人員),仿真(uat  測試環境,接入真實的數據,進行模擬仿真,使用人羣測試人員),生產(pro  用戶真實使用的環境,也可稱之爲線上環境,使用人羣真實的用戶),這四者是我們開發必不可少的四個環境,實際上,像一些小的公司,會只有兩個環境,就是開發環境+生產環境,這樣很不好,沒有對應的測試,就直接發生產,很容易造成一些大的事故,最主要的是,用戶體驗不好,開發一個軟件產品,不管你的產品再怎麼牛逼,用戶體驗不好,使用的人羣也不會多。

             一般企業常見部署方案:Apollo-adminservice+apollo-configservice,這兩個服務,分別在pro,sit,uat,dev各搭建一套,apollo-portal搭建一套就行。

2.預準備

2.1數據庫準備

https://github.com/nobodyiam/apollo-build-scripts

導入configdb和protaldb這兩個文件夾下面的腳本到mysql服務器。

多複製一個pro環境config配置,用來保存pro環境的config配置。 

默認是dev環境的apolloconfigdb的如下端口改爲8080,pro改爲8082

2.2 端口分配,及修改配置

在單節點已部署的前提上,把apolloconfigdb.sql複製一遍,把數據庫名改一下。一個環境需要一個config對應的db,我這裏兩個環境,所以這裏3個文件,protal不管多少個環境,只需要一個,這裏爲了模擬多環境效果,我們就搭建dev和pro兩個環境。正常環境是多臺機器,一臺機器一個config+admin服務,這裏我們通過本地來模擬。

服務名 Dev環境 Pro環境
apollo-configservice 8080 8082
apollo-adminservice 8090 8091
apollo-portal 8070

    因我在一臺機器上模擬的多環境部署,所以端口不能衝突,需要改一下pro數據庫的配置

 

2.2.1  項目構建

https://github.com/ctripcorp/apollo/tree/master  

啓動build.bat會對項目進行項目構建

如下三個文件夾下項目的target下會多一個zip壓縮文件

 創建一個文件夾/java/apollo    用來系統管理多個環境

創建對應的目錄結構,並解壓zip,形成如下結構

 

 dev環境配置修改

####  D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003171

####  D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx

####  D:\java\apollo\dev\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\scripts\startup.sh

LOG_DIR=/java/apollo/adminservice-dev       ###修改日誌打印目錄
SERVER_PORT=8090                            ###端口




####  D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003172

####  D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx

####  D:\java\apollo\dev\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\scripts\startup.sh

LOG_DIR=/java/apollo/configservice-dev       ###修改日誌打印目錄
SERVER_PORT=8080                            ###端口

pro環境

####  D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003173

####  D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigproDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx

####  D:\java\apollo\pro\adminservice\apollo-adminservice-1.6.0-SNAPSHOT-github\scripts\startup.sh

LOG_DIR=/java/apollo/adminservice-pro       ###修改日誌打印目錄
SERVER_PORT=8091                            ###端口




####  D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003174

####  D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloConfigproDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx

####  D:\java\apollo\pro\configservice\apollo-configservice-1.6.0-SNAPSHOT-github\scripts\startup.sh

LOG_DIR=/java/apollo/configservice-pro       ###修改日誌打印目錄
SERVER_PORT=8082                            ###端口

注意:數據庫多了一個pro

portal配置:

####  D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\app.properties
appId=100003173

####  D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\apollo-env.properties
local.meta=http://localhost:8080
dev.meta=http://localhost:8080
fat.meta=http://someIp:8080
uat.meta=http://anotherIp:8080
lpt.meta=${lpt_meta}
pro.meta=http://localhost:8082


####  D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\config\application-github.properties
spring.datasource.url = jdbc:mysql://XXXXXX:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = xxxx
spring.datasource.password = xxxx

####  D:\java\apollo\portal\apollo-portal-1.6.0-SNAPSHOT-github\scripts\startup.sh

LOG_DIR=/java/apollo/portalLog       ###修改日誌打印目錄
SERVER_PORT=8070                            ###端口

注意:因爲連的阿里雲數據庫,所以數據庫連接是xxx,具體以自己的爲準。

startup.sh

#!/bin/bash

PATH=D:/java/apollo

echo "啓動Dev開發環境apollo服務..."
D:/java/apollo/dev/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/startup.sh 
D:/java/apollo/dev/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/startup.sh 



echo "啓動Pro生產環境apollo服務..."
D:/java/apollo/pro/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/startup.sh 
D:/java/apollo/pro/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/startup.sh 

echo "啓動apollo的protal服務..."
D:/java/apollo/portal/apollo-portal-1.6.0-SNAPSHOT-github/scripts/startup.sh 

stop.sh

#!/bin/bash

PATH=D:/java/apollo/

echo "啓動Dev開發環境apollo服務..."
D:/java/apollo/dev/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh 
D:/java/apollo/dev/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh 

echo "啓動Pro生產環境apollo服務..."
D:/java/apollo/pro/adminservice/apollo-adminservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh 
D:/java/apollo/pro/configservice/apollo-configservice-1.6.0-SNAPSHOT-github/scripts/shutdown.sh 

echo "啓動apollo的protal服務..."
D:/java/apollo/portal/apollo-portal-1.6.0-SNAPSHOT-github/scripts/shutdown.sh 

注意:這兩個腳本無法運行,爲了方便,我每次都是通過這裏copy詳細的路徑,一個個啓動的,希望有人能幫忙補充一下。把window啓動shell腳本的方式補全,嘻嘻。

2.2.2 頁面設置

輸入apollo.portal.envs,設置值爲dev,pro,點擊保存

記得重啓哦,不然配置不生效。

點擊某個項目進入,會有環境缺失的報錯。

 

點擊補缺環境,多了一個pro環境,其他幾個類型,都是類似的操作。

 點擊補缺命名空間

集羣沒有辦法補全,只能手動創建勒,創建一個shtest到pro環境

同步配置:

注意:公有關聯也只能自己手動關聯。 

3.彩蛋有驚喜哦

                 既然,說到多環境部署,博友們都好奇,多環境如何使用,以及怎麼使用的,下來,我來說道說道。

        3.1pom.xml

       <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>1.1.1</version>
        </dependency>

3.2 application.yml

server:
  port: 1111

app:
  id : apollo-test

apollo:
  meta: http://127.0.0.1:8080,http://127.0.0.1:8082
  bootstrap:
    ###啓用apollo配置開關
    enabled: true
    # apollo 使用配置的命名空間,多個以逗號分隔
    namespaces: application,springMQ,TEST3.commom
eureka:
  client:
    register-with-eureka: false
    fetch-registry: false

注意:meta配置兩個eurake的值,8080和8082.   8080是dev環境,8082是pro環境

3.3 controller類

package com.fqyd.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Description:
 * Author: wude
 * Date:  2019/11/26 11:34
 * Modified By:
 */
@RestController
public class TestController {
  @Value("${jdbc.username}")
  private String jdbcUsername;

  @Value("${FILE_NAME}")
  private String helloUsername;

  @Value("${server.zookeeper}")
  private String zk;

  @GetMapping("/hello")
  public String helloApollo(){
    return "hello "+jdbcUsername;
  }

  /**
   * 測試namespacen調用
   * @return
   */
  @GetMapping("/testNamespace")
  public String testNamespace(){
    return "測試testNamespace讀取:"+helloUsername;
  }

  /**
   * 測試調用公有配置
   * @return
   */
  @GetMapping("/testPublic")
  public String testPublic(){
    return "testPublic讀取:"+zk;
  }
}

3.4啓動類

package com.fqyd;

import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@EnableApolloConfig    //啓用apollo配置
@SpringBootApplication
public class ApolloTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApolloTestApplication.class, args);
    }

}

3.5 環境配置

idea開發

-Dapollo.meta=http://localhost:8082

dev配置

pro配置:

 

 

後記

程序猿學社的GitHub,歡迎Star:
https://github.com/ITfqyd/cxyxs
覺得有用,可以點贊,關注,評論,留言四連發。

發佈了275 篇原創文章 · 獲贊 484 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章