部署Apollo配置中心
Apollo是什么
Apollo(阿波罗)是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
.Net客户端不依赖任何框架,能够运行于所有.Net运行时环境。
Apollo整体架构如下图:
Apollo配置中心被分为portal,Config Service,Admin Service三个服务
Portal: 提供Apollo配置中心的管理界面,服务对象是开发人员Config Service:提供配置的读取、推送等功能,服务对象是Apollo客户端,该服务包含Eureka,Config Service和Meta Server,他们在同一个JVM进程中。Admin Service:提供配置的修改、发布等功能,服务对象是Apollo Portal管理界面
如果需要Apollo配置中心支持多个环境,Portal管理界面只需要部署一处,Config Service和Admin Service在每一个环境部署一次。
Github地址:https://github.com/apolloconfig/apollo
文档地址:https://www.apolloconfig.com/
环境与依赖
Apollo配置中心支持不同的环境,每个环境互相隔离。Apollo目前支持以下环境:DEV开发环境FAT测试环境,相当于alpha环境(功能测试)UAT集成环境,相当于beta环境(回归测试)PRO生产环境
要安装
Apollo配置中心需要以下:- 依赖
Java 1.8+MySQL 5.6.5+
- 下载
apollo - 数据库文件
- 依赖
IP端口配置
让Apollo配置中心支持两套环境,需要先规划配置Apollo服务的IP和端口:
Portal:127.0.0.1:8070Dev Config Service:127.0.0.1:8071Dev Admin Service:127.0.0.1:8072Fat Config Service:127.0.0.1:8073Fat Admin Service:127.0.0.1:8074
如果两个环境的数据库和准备部署Apollo的服务器不是同一个,可按需配置,配置方式也是相同的。
数据库配置
ApolloPortalDB
- 创建
ApolloPortalDB数据库 - 运行
apolloportaldb.sql - 配置
ServerConfig表中apollo.portal.envs的值,该值表示可支持的环境列表(例:DEV,FAT)
开发环境ApolloConfigDB
- 创建
ApolloConfigDB数据库dev环境 - 运行
apolloconfigdb.sql - 配置
ServerConfig表中eureka.service.url的值,该值就是Config Service的http://IP:Port地址(例:http://127.0.0.1:8071/eureka/)
测试环境ApolloConfigDB_Test
- 创建
ApolloConfigDB_Test数据库作为fat环境 - 运行
apolloconfigdb.sql - 配置
ServerConfig表中eureka.service.url的值,该值就是Config Service的http://IP:Port地址(例:http://127.0.0.1:8073/eureka/)
配置Portal
Portal作为管理界面,只需要部署一次即可。Portal首次登陆的默认账号为apollo,密码为admin。
目录结构
解压apollo-portal-2.2.0-github.zip文件,将会得到以下结构目录:
1 | - apollo-portal-2.2.0-github |
文件配置
apollo-portal.conf配置
portal的日志文件存储位置
1 | ## pid目录 |
config/apollo-env.properties配置
Portal支持的环境
1 | #local.meta=http://localhost:8080 |
config/application-github.properties配置
Portal使用的数据库信息
1 | spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloPortalDB?characterEncoding=utf8 |
scripts/startup.sh配置
Portal的启动设置
1 | ## 配置日志存放位置 |
- 授权
赋予
scripts目录下的sh脚本可执行权限
1 | chmod +x *.sh |
配置Config Service
Config Service提供配置的读取、推送等功能,所以再不同的环境下,需要再次部署该服务。
目录结构
解压apollo-configservice-2.2.0-github文件,将会得到以下结构目录,可修改目录名称以支持不同的环境
1 | - apollo-configservice-2.2.0-github(dev-configservice) |
文件配置
apollo-configservice.conf配置
Config Service的日志文件存储位置
1 | ## pid目录 |
config/application-github.properties配置
Config Service使用的数据库信息
1 | spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8 |
scripts/startup.sh配置
Config Service的启动设置
1 | ## 配置日志存放位置 |
- 授权
赋予
scripts目录下的sh脚本可执行权限
1 | chmod +x *.sh |
本地部署出现的问题
Apollo客户端和Portal会从Config Service获取服务的地址(IP+Port),然后通过服务地址直接访问。而从eureka服务发现的页面会发现,服务地址变成了公网IP,这可能会导致Apollo客户端无法连接上Config Service,所以需要修改startup.sh配置JAVA_OPTS。
1 | # 可以直接找到JAVA_OPTS,在最末尾加上 -Deureka.instance.ip-address=127.0.0.1 |
配置Admin Service
目录结构
解压apollo-adminservice-2.2.0-github文件,将会得到以下结构目录,可修改目录名称以支持不同的环境
1 | - apollo-adminservice-2.2.0-github(dev-adminservice) |
文件配置
apollo-adminservice.conf配置
Admin Service的日志文件存储位置
1 | ## pid目录 |
config/application-github.properties配置
Admin Service使用的数据库信息
1 | spring.datasource.url = jdbc:mysql://127.0.0.1:3306/ApolloConfigDB?characterEncoding=utf8 |
scripts/startup.sh配置
Admin Service的启动设置
1 | ## 配置日志存放位置 |
- 授权
赋予
scripts目录下的sh脚本可执行权限
1 | chmod +x *.sh |
本地部署出现的问题
Apollo客户端和Portal会从Config Service获取服务的地址(IP+Port),然后通过服务地址直接访问。而从eureka服务发现的页面会发现,服务地址变成了公网IP,这可能会导致Apollo客户端无法连接上Config Service,所以需要修改startup.sh配置JAVA_OPTS。
1 | # 可以直接找到JAVA_OPTS,在最末尾加上 -Deureka.instance.ip-address=127.0.0.1 |
部署
Apollo三个服务都需要启动,所以编写脚本启动是比较好的方式。
启动脚本
1 |
|
停止脚本
1 |
|
Systemd自启脚本
1 | [Unit] |

