简介 Apollo(阿波罗)是一款可靠的分布式配置管理中心,服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
快速安装 最快速的方式基本上就是基于docker-compose方式安装,调研期间可以随意销毁重建,不用担心改动到服务器的环境配置。迁移到正式环境只需要更改配置文件即可,也不会因为测试机器环境不同出现新的问题,这也是为什么我喜欢用这种方式的原因。
官方也推荐了很多方式安装:Apollo部署文档
docker-compose方式安装 本版本v2.3.0基于2024-10-18的最新版安装,安装apollo时通常已经安装好mysql了,所以docker-compose文件中无mysql的安装文件。
注意事项:
- mysql8.0版本使用密码连接时需要配置该参数,因为8.0的密码插件有改动。 allowPublicKeyRetrieval=true
- 根据官方文档说明,参数分割符需要使用&&而不是&
- docker中注册到eureka时的ip和端口时需要是内网ip而不是docker容器中的地址:需要使用如下方式才能生效,- "JAVA_OPTS=-Deureka.instance.homePageUrl=http://内网IP:8090"。 准备工作
- mysql脚本下载与导入 github apollo sql脚本下载 giteeV2.2.0版本sql,可能无法使用
注意事项:sql中创建的库名为驼峰命名法,需要全部改成小写后再导入。
- 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://内网IP:8080" - TZ='Asia/Shanghai' - SERVER_PORT=8080 - EUREKA_INSTANCE_IP_ADDRESS=内网IP - EUREKA_SERVICE_URL=http://内网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://内网IP:8090" - TZ='Asia/Shanghai' - SERVER_PORT=8090 - EUREKA_SERVICE_URL=http://内网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://内网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是统一门户,也就是apollo的web配置页面的服务, apollo客户端可以通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试。
- Admin Service提供配置的修改、发布等功能,为Apollo Portal(管理界面)提供接口。
- Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端,同时这个服务也包含了Meta Server和Eureka服务。官方描述:为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中 详细内容参考:Apollo总体设计
apollo项目使用案例 Apollo使用教程
apollo部署架构 Apollo部署架构
部署多环境 建议参考官方文档:单机,双环境
SpringBoot客户端集成 以下内容适用于Spring Boot Config Data Loader (Spring Boot 2.4+, Apollo Client 1.9.0+ 推荐) + webClient 扩展
- 配置maven com.ctrip.framework.apollo apollo-client-config-data 2.3.0 org.springframework spring-webflux io.projectreactor.netty reactor-netty-http
:::
- AppId的配置方式 这里采用Spring Boot的application.properties文件配置
app.id=YOUR-APP-ID
- apollo-meta-server配置方式 这里才用在java启动参数中加入 -Dapollo.meta=http://config-service-url
如果是运行jar文件,需要注意格式是
java -Dapollo.meta=http://config-service-url -jar xxx.jar
- 跳过Apollo meta Server的服务发现,适用于config Service部署在公有云上。 -Dapollo.config-service=http://config-service-url:port
- 通过Java System Property配置ENV (其他方式) • 可以通过Java的System Property 设置ENV 来指定环境 • 在Java程序启动脚本中,可以指定 java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
- 注意key为全小写 最后 docker-composer的下载地址:gitee.com/sisunwhite/…
作者会不定期分享技术干货,欢迎关注公众号:freethinker_sun
本文由博客一文多发平台 OpenWrite 发布!