Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
上图简要描述了 Apollo 的总体设计,我们可以从下往上看:
1.1 Java Apollo服务端:1.8+ Apollo客户端:1.7+
1.2 MySQL 版本要求:5.6.5+
方式1:直接下载安装包,GitHub地址:https://github.com/ctripcorp/apollo/releases,Apollo服务端安装包共有3个:apollo-configservice, apollo-adminservice, apollo-portal。
方式2:下载源码,自己打包。GitHub地址:https://github.com/ctripcorp/apollo
学习建议使用直接下载安装包:
这里我们下载的是1.6.1版本的安装包
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB
获取建库脚本:刚才下载的是1.6.1的安装包,所以这里也要获取1.6.1版本的建库脚本。
打开apollo源码:https://github.com/ctripcorp/apollo
分支切换到1.6.1 并进入script/sql目录
这里两个就是建库脚本,执行
数据库创建已创建成功,解压这三个安装包.
配置数库地址:
1、在apollo-adminservice-1.6.1-github和apollo-configservice-1.6.1-github 的 config/application-github.properties 中配置数据地址:ApolloConfigDB数据库的访问地址:
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root 数据
spring.datasource.password = hong10086
2、在apollo-portal-1.6.1-github的 config/application-github.properties 中配置数据地址:ApolloPortalDB数据库的访问地址:
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = hong10086
这三个安装包的启动顺序是configservice在adminservice 前启动,portal是管理界面这里最后启动。启动和关闭的脚步分别在三个安装包的script文件夹中。
启动 configservice:
异常1:
日志输出目录没有权限,解决方法 1、赋予目录的执行权限;2、修改日志的输出目录,在startup.sh 中就可以修改。
我的是mac,直接手动创建了一个/opt目录
查看日志 eureka server启动成功:
以同样的方法启动adminservice、portal。
服务检查:
三个服务启动完成后 在浏览器中输入portal 的访问地址http://localhost:8070 用户名:apollo 密码: admin
点击右侧的“管理员工具” -> “系统信息” 出现了异常
这里的意思就是potal 管理平台无法访问 meta server ,meta server的配置地址是http://fill-in-dev-meta-server:8080,显然本地是不存在着个地址的。meta server 简单理解就是这里的eureka 的地址,eureka是在configservice中,所以这里应该配置confgservice地址 http://localhost:8080
在eureka中我们可以发现configservice、adminservice已经注册完成了。
如何指定potal中的 meta server地址?
打开:apollo-portal-1.6.1-github/config/apollo-env.properties
可以看出一个potal可以指定多个meta server地址,通过环境来区分这里默认有de、fat、uat、pro四个环境 。
本次只改dev环境的地址:将dev.meta=http://fill-in-dev-meta-server:8080改成dev.meta=http://localhost:8080
保存后重启potal
再次验证:
再次打开apollo的系统信息页面,可以发现configservice、adminservice已经可以被发现了。
2.3.1创建一个项目:
部门和人员都可以自定义:
1、自定义的部门:
在“管理员工具”->“系统参数”中设置。
这里不仅可以设置部门,还可以设置 ApolloPortalDB.ServerConfig表中的所有数据,如果已存在配置项则会覆盖,否则会创建配置项。配置更新后,一分钟后自动生效。
ApolloPortalDB.ServerConfig表:
2、添加用户:
在“管理员工具”->“户名管理”中设置。
“新建配置” name=王二 然后 “发布”
java客户端读取配置:
引入jar包:
com.ctrip.framework.apollo
apollo-client
1.4.0
读取配置:
public class Test {
public static void main(String[] args) throws Exception {
while (true) {
Config config = ConfigService.getAppConfig();
String key = "name";
String defaultValue = "";
String value = config.getProperty(key, defaultValue);
System.out.println("name = " + value);
TimeUnit.SECONDS.sleep(5);
}
}
}
java客户端代码编写完成,这时要向apollo读取配置,apollo上有许多环境,每个环境又有许多应用。因此要告诉客户端读取那个环境下的那个应用。告诉的方式有很多这里使用最简单的
这是启动客户端便可以读取配置了:
java客户端配置环境(MetaServer)、应用(AppId
)的其他方式:
配置应用(AppId
):
AppId是应用的身份信息,是从服务端获取配置的一个重要信息。有以下几种方式设置,按照优先级从高到低分别为:
1、System Property
Apollo 0.7.0+支持通过System Property传入app.id信息,如 :-Dapp.id=YOUR-APP-ID
2、操作系统的System Environment
Apollo 1.4.0+支持通过操作系统的System Environment APP_ID来传入app.id信息,如:APP_ID=YOUR-APP-ID
3、Spring Boot application.properties
Apollo 1.0.0+支持通过Spring Boot的application.properties文件配置,如 :app.id=YOUR-APP-ID,该配置方式不适用于多个war包部署在同一个tomcat的使用场景
4、app.properties
确保classpath:/META-INF/app.properties文件存在,并且其中内容形如:app.id=YOUR-APP-ID
配置环境(MetaServer)
Apollo支持应用在不同的环境有不同的配置,所以需要在运行提供给Apollo客户端当前环境的Apollo Meta Server信息。默认情况下,meta server和config service是部署在同一个JVM进程,所以meta server的地址就是config service的地址。
有以下几种方式设置,,按照优先级从高到低分别为:
1、通过Java System Property apollo.meta
可以通过Java的System Property apollo.meta来指定
在Java程序启动脚本中,可以指定-Dapollo.meta=http://config-service-url
如果是运行jar文件,需要注意格式是java -Dapollo.meta=http://config-service-url -jar xxx.jar
也可以通过程序指定,如System.setProperty("apollo.meta", "http://config-service-url");
2、通过Spring Boot的配置文件
可以在Spring Boot的application.properties或bootstrap.properties中指定apollo.meta=http://config-service-url
该配置方式不适用于多个war包部署在同一个tomcat的使用场景
3、通过操作系统的System EnvironmentAPOLLO_META
可以通过操作系统的System Environment APOLLO_META来指定
注意key为全大写,且中间是_分隔
4、通过server.properties配置文件
可以在server.properties配置文件中指定apollo.meta=http://config-service-url
对于Mac/Linux,文件位置为/opt/settings/server.properties
对于Windows,文件位置为C:\opt\settings\server.properties
5、通过app.properties配置文件
可以在classpath:/META-INF/app.properties指定apollo.meta=http://config-service-url
6、通过Java system property ${env}_meta
如果当前env是dev,那么用户可以配置-Ddev_meta=http://config-service-url
使用该配置方式,那么就必须要正确配置Environment,详见1.2.4.1 Environment
7、通过操作系统的System Environment ${ENV}_META (1.2.0版本开始支持)
如果当前env是dev,那么用户可以配置操作系统的System Environment DEV_META=http://config-service-url
注意key为全大写 使用该配置方式,那么就必须要正确配置Environment,详见1.2.4.1 Environment
8、通过apollo-env.properties文件
用户也可以创建一个apollo-env.properties,放在程序的classpath下,或者放在spring boot应用的config目录下
使用该配置方式,那么就必须要正确配置Environment,详见1.2.4.1 Environment
文件内容形如:
dev.meta=http://1.1.1.1:8080
fat.meta=http://apollo.fat.xxx.com
uat.meta=http://apollo.uat.xxx.com
pro.meta=http://apollo.xx