前言
社長,一個愛學習,愛分享的程序猿,始終相信,付出總會有回報的。知識改變命運,學習成就未來。愛拼纔會贏!
程序猿學社的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
覺得有用,可以點贊,關注,評論,留言四連發。