簡介
Apollo(阿波羅)是一款可靠的分布式配置管理中心,服務端基于Spring Boot和Spring Cloud開發(fā)矛辕,打包后可以直接運行景描,不需要額外安裝Tomcat等應用容器箩朴。Java客戶端不依賴任何框架,能夠運行于所有Java運行時環(huán)境,同時對Spring/Spring Boot環(huán)境也有較好的支持珍特。
快速安裝
最快速的方式基本上就是基于docker-compose方式安裝届谈,調研期間可以隨意銷毀重建,不用擔心改動到服務器的環(huán)境配置挺智。遷移到正式環(huán)境只需要更改配置文件即可祷愉,也不會因為測試機器環(huán)境不同出現(xiàn)新的問題,這也是為什么我喜歡用這種方式的原因赦颇。
官方也推薦了很多方式安裝:Apollo部署文檔
docker-compose方式安裝
本版本v2.3.0基于2024-10-18的最新版安裝,安裝apollo時通常已經(jīng)安裝好mysql了二鳄,所以docker-compose文件中無mysql的安裝文件。
注意事項:
- mysql8.0版本使用密碼連接時需要配置該參數(shù)媒怯,因為8.0的密碼插件有改動订讼。 allowPublicKeyRetrieval=true
- 根據(jù)官方文檔說明,參數(shù)分割符需要使用&&而不是&
- docker中注冊到eureka時的ip和端口時需要是內網(wǎng)ip而不是docker容器中的地址:需要使用如下方式才能生效扇苞,- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://內網(wǎng)IP:8090"欺殿。
準備工作 - mysql腳本下載與導入
github apollo sql腳本下載 giteeV2.2.0版本sql,可能無法使用
注意事項:sql中創(chuàng)建的庫名為駝峰命名法鳖敷,需要全部改成小寫后再導入脖苏。
- docker-compose文件
version: "3"
services:
apollo-configservice:
container_name: apollo-configservice
image: apolloconfig/apollo-configservice:2.3.0
restart: always
ports:
- "8080:8080"
volumes:
- "/data/docker_data/apollo/logs:/opt/logs"
environment:
- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://內網(wǎng)IP:8080"
- TZ='Asia/Shanghai'
- SERVER_PORT=8080
- EUREKA_INSTANCE_IP_ADDRESS=內網(wǎng)IP
- EUREKA_SERVICE_URL=http://內網(wǎng)IP:8080/eureka/
- SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloconfigdb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqlusername
- SPRING_DATASOURCE_PASSWORD=mysqlpassword
apollo-adminservice:
container_name: apollo-adminservice
image: apolloconfig/apollo-adminservice:2.3.0
restart: always
ports:
- "8090:8090"
depends_on:
- apollo-configservice
volumes:
- "/data/docker_data/apollo/logs:/opt/logs"
environment:
- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://內網(wǎng)IP:8090"
- TZ='Asia/Shanghai'
- SERVER_PORT=8090
- EUREKA_SERVICE_URL=http://內網(wǎng)IP:8080/eureka/
- SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloconfigdb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqlusername
- SPRING_DATASOURCE_PASSWORD=mysqlpassword
apollo-portal:
container_name: apollo-portal
image: apolloconfig/apollo-portal:2.3.0
restart: always
ports:
- "8070:8070"
depends_on:
- apollo-adminservice
volumes:
- "/data/docker_data/apollo/logs:/opt/logs"
environment:
- "JAVA_OPTS=-Ddev_meta=http://內網(wǎng)IP:8080"
- TZ='Asia/Shanghai'
- SERVER_PORT=8070
- APOLLO_PORTAL_ENVS=dev,prod #配置env
- SPRING_DATASOURCE_URL=jdbc:mysql://mysqlip:3306/apolloportaldb?useUnicode=true&&characterEncoding=utf-8&&serverTimezone=Asia/Shanghai&&useSSL=false&&allowPublicKeyRetrieval=true
- SPRING_DATASOURCE_USERNAME=mysqlusername
- SPRING_DATASOURCE_PASSWORD=mysqlpassword
訪問apollo客戶端:http://ip:8070
默認賬戶密碼:
用戶名:apollo
密碼:admin
apollo各組件快速介紹
- Portal是統(tǒng)一門戶,也就是apollo的web配置頁面的服務定踱, apollo客戶端可以通過域名訪問Meta Server獲取Admin Service服務列表(IP+Port)棍潘,而后直接通過IP+Port訪問服務,同時在Portal側會做load balance、錯誤重試亦歉。
- Admin Service提供配置的修改恤浪、發(fā)布等功能,為Apollo Portal(管理界面)提供接口肴楷。
- Config Service提供配置的讀取资锰、推送等功能,服務對象是Apollo客戶端阶祭,同時這個服務也包含了Meta Server和Eureka服務绷杜。官方描述:為了簡化部署,我們實際上會把Config Service濒募、Eureka和Meta Server三個邏輯角色部署在同一個JVM進程中
詳細內容參考:Apollo總體設計
apollo項目使用案例
Apollo使用教程
apollo部署架構
Apollo部署架構
部署多環(huán)境
建議參考官方文檔:單機鞭盟,雙環(huán)境
SpringBoot客戶端集成
以下內容適用于Spring Boot Config Data Loader (Spring Boot 2.4+, Apollo Client 1.9.0+ 推薦) + webClient 擴展
- 配置maven
<dependencies>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client-config-data</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webflux</artifactId>
</dependency>
<dependency>
<groupId>io.projectreactor.netty</groupId>
<artifactId>reactor-netty-http</artifactId>
</dependency>
</dependencies> - 更改SpringBoot項目中的配置文件application.properties/bootstrap.properties
app.id=YOUR-APP-ID
注入非默認application namespace或多個namespace的配置
apollo.client.extension.enabled=true
spring.config.import=apollo://namespace3, apollo://namespace2, apollo://namespace1
將Apollo配置加載提到初始化日志系統(tǒng)之前
apollo.bootstrap.eagerLoad.enabled=true
:::color2 注: <font style="color:rgb(233, 105, 0);background-color:rgb(248, 248, 248);">spring.config.import</font> 是從后往前加載配置的, 而 <font style="color:rgb(233, 105, 0);background-color:rgb(248, 248, 248);">apollo.bootstrap.namespaces</font> 是從前往后加載的, 剛好相反。為了保證和原有邏輯一致, 請顛倒 namespaces 的順序
:::
- AppId的配置方式
這里采用Spring Boot的application.properties文件配置
app.id=YOUR-APP-ID
- apollo-meta-server配置方式
這里才用在java啟動參數(shù)中加入 -Dapollo.meta=http://config-service-url
如果是運行jar文件瑰剃,需要注意格式是
java -Dapollo.meta=http://config-service-url -jar xxx.jar
- 跳過Apollo meta Server的服務發(fā)現(xiàn)齿诉,適用于config Service部署在公有云上。
-Dapollo.config-service=http://config-service-url:port - 通過Java System Property配置ENV (其他方式)
? 可以通過Java的System Property 設置ENV 來指定環(huán)境
? 在Java程序啟動腳本中晌姚,可以指定
java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
- <font style="color:rgb(52, 73, 94);">注意key為全小寫</font>
最后
docker-composer的下載地址:https://gitee.com/sisunwhite/freethinker-docker-compose
作者會不定期分享技術干貨粤剧,歡迎關注公眾號:freethinker_sun
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布!