Apollo配置中心笔记
apollo的quick start
参考官方文档一步步走就行,默认密码是apollo admin。
apollo的架构
https://mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ 官方推荐架构讲解 有这一个就够了

-
首先apollo的配置数据是存在ConfigDB中的,apollo的用户权限等管理数据是存在Portal数据库中的。
-
AdminService和CofigService是服务的提供方。其中AdminService主要通过数据的配置的管理、修改和发布,主要服务于Portal的,而ConfigService则是主要提供配置的查询和推送,主要服务于Client的
-
Client:客户端,即一个个的应用,从apollo中读取配置
-
Portal:apollo配置的管理者,发布和修改配置
-
Eureka:AdminService和CofigService本身是分布式部署的,由eureka进行服务的注册和发现
-
MetaServer: 由于Eureka本身是java开发的,为了兼容其他语言,在Eureka上有封装了一层MetaServer,通过http调用的形式进行服务的发现。
-
Nginx LB:担任网关的作用,Client和Portal都是通过Nginx LB来访问Meta Server
apollo的分布式部署
官方文档提供的可以docker容器部署和直接jar包部署,下面记录使用docker文件部署的,具体的jar包部署参考官方文档即可
创建镜像
1.7.1以后会默认上传docker镜像,所以自己创建镜像,下面是自己配置镜像的方式
-
根据源码创建镜像
-
在github上下载1.7.1版本的源码(使用github加速器插件)
-
执行.\scripts\build.bat 编译源码,需要配置maven的环境变量和JDK的环境变量 ,获取pollo-configservice-1.9.0-SNAPSHOT-github.zip、apollo-adminservice-1.9.0-SNAPSHOT-github.zip、apollo-portal-1.9.0-SNAPSHOT-github.zip
-
将源码中的dockerfile和zip包复制到linux系统中
-
![]()
-
创建 镜像docker build -f protal-service-dockerfile -t apollo-protalservice:1.9.0 .
-
-
拉取镜像:
-
docker pull apolloconfig/apollo-configservice:1.7.1
-
docker pull apolloconfig/apollo-adminservice:1.7.1
-
docker pull apolloconfig/apollo-portal:1.7.1
-
部署
部署包含config-service、admin-service、protal-service三个服务,其中config-service、admin-service是注册到ApolloConfigDB的ServerConfig的eureka地址上的。Portal则是一个单独的管理服务,可以同时访问多个环境的配置信息,所以Portal只配置一个生产环境的即可。需要通过PortalConfigDB的ServerConfig里的apollo.portal.envs进行配置,而且还需要修改器metaServer的地址。下面就部署两个环境,一个dev的,一个pro的。
开发环境
mysql数据库
docker run -p 10301:3306 --name mysql -v /docker/pro/mysql5.7/conf:/etc/mysql/conf.d -v /docker/pro/mysql5.7/logs:/logs -v /docker/pro/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32

config-service
docker run -p 10002:8080 -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10002/ -d -v /docker/dev/apollo-config-1.7.1/logs:/opt/logs --name apollo-config-dev apolloconfig/apollo-configservice:1.7.1
#SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址 #SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名 #SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码
#EUREKA_INSTANCE_HOMEPAGEURL:对于的注册到eureka上的IP地址和端口
admin-service
docker run -p 10003:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -d -v /docker/dev/apollo-admin-1.7.1/logs:/opt/logs --name apollo-admin-dev apolloconfig/apollo-adminservice:1.7.1 #SPRING_DATASOURCE_URL: 对应环境ApolloConfigDB的地址 #SPRING_DATASOURCE_USERNAME: 对应环境ApolloConfigDB的用户名 #SPRING_DATASOURCE_PASSWORD: 对应环境ApolloConfigDB的密码
生产环境
mysql数据库
docker run -p 10001:3306 --name mysql -v /docker/mysql5.7/conf:/etc/mysql/conf.d -v /docker/mysql5.7/logs:/logs -v /docker/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7.32

config-service
docker run -p 10302:8080 -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10301/ApolloConfigDB?characterEncoding=utf8" -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 -e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10302/ -d -v /docker/pro/apollo-config-1.7.1/logs:/opt/logs --name apollo-config-dev apolloconfig/apollo-configservice:1.7.1
admin-service
docker run -p 10003:8090 \ -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10001/ApolloConfigDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -d -v /docker/dev/apollo-admin-1.7.1/logs:/opt/logs --name apollo-admin-dev apolloconfig/apollo-adminservice:1.7.1
portal-service
docker run -p 10304:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.81.4:10301/ApolloPortalDB?characterEncoding=utf8" \ -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=123456 \ -e APOLLO_PORTAL_ENVS=dev,pro \ -e DEV_META=192.168.81.4:10002 -e PRO_META=192.168.81.4:10302 \ -d -v /docker/pro/apollo-portal-1.7.1/logs:/opt/logs --name apollo-portal apolloconfig/apollo-portal:1.7.1
apollo整合spring-boot
https://www.cnblogs.com/huanchupkblog/p/10509427.html
https://blog.csdn.net/weixin_36171229/article/details/82056234 解决config-service的ip和端口问题
-
添加apollo客户端的依赖
<dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.4.0</version> </dependency>
-
启动类配置@EnableApolloConfig
-
修改配置文件
server:
port: 8001
spring:
application:
name: product-service
#Apollo 配置
app:
id: product-service #应用ID,对应于apollo里的应用id
apollo:
cacheDir: /opt/data/ #配置本地配置缓存目录
cluster: default #指定使用哪个集群的配置
meta: http://192.168.81.4:10002 #DEV环境配置中心地址
autoUpdateInjectedSpringProperties: true #是否开启 Spring 参数自动更新
bootstrap:
enabled: true #是否开启 Apollo
namespaces: application #设置 Namespace
eagerLoad:
enabled: true #将 Apollo 加载提到初始化日志系统之前
-
服务启动时修改配置参数,设置其读取哪个环境的配置

-
启动后读取config-service的地址错误问题:config-service在注册到eureka时没有设置ip和端口号,所以使用了默认的ip和端口。在启动config-service容器时添加参数-e EUREKA_INSTANCE_HOMEPAGEURL=http://192.168.81.4:10002/即可。


浙公网安备 33010602011771号