一、简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
官方github:https://github.com/ctripcorp/apollo
作者对Apollo对介绍:https://github.com/ctripcorp/apollo/wiki/Apollo%E9%85%8D%E7%BD%AE%E4%B8%AD%E5%BF%83%E4%BB%8B%E7%BB%8D
二、安装部署
基础设施
本次部署环境为DEV(开发环境)、FAT(测试环境)、UAT(预生产)、PRO(生产)
应用服务器:
| 环境 | 服务器 | 服务 | 端口 | 
|---|---|---|---|
| / | 192.168.35.206 | apollo-portal | 9102 | 
| DEV | 192.168.35.207 | apollo-configservice apollo-adminservice  | 
9100 9101  | 
| FAT | 192.168.35.208 | apollo-configservice apollo-adminservice  | 
9100 9101  | 
| UAT | 192.168.35.209 | apollo-configservice apollo-adminservice  | 
9100 9101  | 
| PRO | 192.168.35.210 | apollo-configservice apollo-adminservice  | 
9100 9101  | 
数据库服务器:
| 环境 | 服务器 | 服务 | 数据库 | 端口 | 
|---|---|---|---|---|
| / | 192.168.35.226 | apollo-portal | ApolloPortalDB | 3306 | 
| DEV | 192.168.35.227 | apollo-configservice apollo-adminservice  | 
ApolloConfigDB | 3306 | 
| FAT | 192.168.35.228 | apollo-configservice apollo-adminservice  | 
ApolloConfigDB | 3306 | 
| UAT | 192.168.35.229 | apollo-configservice apollo-adminservice  | 
ApolloConfigDB | 3306 | 
| PRO | 192.168.35.230 | apollo-configservice apollo-adminservice  | 
ApolloConfigDB | 3306 | 
配置
下载代码:
1  | git clone https://github.com/ctripcorp/apollo.git  | 
比较重要的几个项目:
- apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端
 - apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka
 - apollo-portal:提供Web界面供用户管理配置
 - apollo-client:Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能
 

上图简要描述了配置发布的大致过程:
- 用户在Portal操作配置发布
 - Portal调用Admin Service的接口操作发布
 - Admin Service发布配置后,发送ReleaseMessage给各个Config Service
 - Config Service收到ReleaseMessage后,通知对应的客户端
 
数据库初始化:
下面的sql为大写格式,注意数据库的大小写敏感设置
- ApolloPortalDB:执行
apollo\scripts\sql\apolloportaldb.sql - ApolloConfigDB:DEV FAT UAT PRO 环境执行
apollo\scripts\sql\apolloconfigdb.sql 
调整配置并打包:
在Apollo项目中找到目录apollo\scripts\的配置文件build.sh或者build.bat  
- 数据库配置
修改数据库配置,上面的是ApolloConfigDB配置,下面的是ApolloPortalDB配置: 
1  | # apollo config db info 该数据库配置只需要配置一次,不同环境无需修改  | 
- apollo config db info 该数据库配置只需要配置一次,不同环境无需修改
 - apollo portal db info 该数据库依据不同环境配置对应的数据库连接,并且需要多次打
 
- 修改环境调用地址
 
1  | # meta server url, different environments should have different meta server addresses  | 
- 修改数据库数据
 
在DEV FAT UAT PRO 对应的ApolloConfigDB数据库中,找到表ServerConfig中的eureka.service.url配置项:
1  | UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`='http://localhost:9100/eureka/' WHERE `Key`='eureka.service.url';  | 
修改环境配置,在ApolloPortalDB数据库修改表ServerConfig中的apollo.portal.envs:
1  | UPDATE apolloportaldb.serverconfig SET serverconfig.`Value`='dev,fat,uat,pro' WHERE `Key`='apollo.portal.envs';  | 
具体eureka配置,可以查看官网:https://github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97
- 编译、打包
 
1  | ./build.sh  | 
- 该脚本会依次打包
apollo-configservice,apollo-adminservice,apollo-portal和apollo-client。 - 由于
ApolloConfigDB在每个环境都有部署,所以对不同环境的config-service和admin-service需要使用不同的数据库连接信息打不同的包,portal和client只需要打一次包即可 
开始部署
部署程序到对应的服务器
- 部署apollo-configservice
 
将apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh : 
1  | LOG_DIR=/opt/logs/100003171  | 
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.  
- 部署apollo-adminservice
 
将apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh:
1  | LOG_DIR=/opt/logs/100003172  | 
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.  
- 部署apollo-portal
 
将apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh:
1  | LOG_DIR=/opt/logs/100003173  | 
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.  
访问测试
上面部署完成,可以测试
访问不同环境的eureka,查看服务注册情况是否正确:
1  | http://192.168.35.207:9100/  | 
如果可以看到:
1  | 192.168.35.207:apollo-adminservice:9101  | 
两个服务都为UP,正常!
访问客户端:
1  | http://192.168.35.206:9102/  | 
登录,默认用户名密码为:apollo/admin  
新建项目测试。
三、使用配置中心配置信息
- maven引入上面步骤编译打包成功的
apollo-core和apollo-client包: 
1  | <dependency>  | 
- 创建app.properties
 
请确保classpath:/META-INF/app.properties文件存在,并且其中内容为自己的项目名称,而且要保持唯一:
1  | app.id=demo  | 
- 环境变量配置
 
本地开发
如果是本地开发,可以在开发工具添加Environment:
1  | env=DEV  | 
线上环境配置方式:
- 使用Java启动参数添加
java -Denv=YOUR-ENVIRONMENT -jar xxx.jar - 通过操作系统的System Environment
 - 通过配置文件:
对于Mac/Linux,文件位置为/opt/settings/server.properties
对于Windows,文件位置为C:\opt\settings\server.properties 
- 配置apollo-env.properties
 
在项目中引用apollo-core和apollo-client包,在apollo-core包中可以看到apollo-env.properties配置文件,默认配置为打包前配置的信息:
1  | local.meta=http://localhost:8080  | 
如果需要修改或者覆盖的话,在项目的resources从上面复制一个apollo-env.properties文件,修改对应环境信息就可以了
- 启用配置
在启动类添加@EnableApolloConfig注解即可: 
1  | import org.springframework.boot.SpringApplication;  | 
- 测试
 
添加一个测试的类DemoConfiguration,当然配置中心要有下面配置的配置信息:
1  | @Configuration  | 
完成!
四、部署方案
这个图是计划部署的方案,并不是上面写的例子的方案
