携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
环境准备
centos ==> 7+
mysql ==> 5.7+
java ==> 1.8+
下载程序包地址
源代码地址 : https://github.com/ctripcorp/apollo/
已编译完成程序包 : https://github.com/ctripcorp/apollo/releases
config数据库地址 : https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/configdb/V1.0.0__initialization.sql
portal数据库地址 : https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/portaldb/V1.0.0__initialization.sql
###本次使用已编译完成的程序包
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-adminservice-1.4.0-github.zip
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-configservice-1.4.0-github.zip
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-portal-1.4.0-github.zip
数据库文件使用浏览器复制到本地文件中。
程序接口名称及功能说明
名称 | 功能说明 | 接口服务对象 |
---|---|---|
Portal | 提供Web界面供用户管理配置 | 配置管理员 |
Admin Service | 提供配置管理接口 | Portal |
Config Service | 提供配置获取接口 | Apollo客户端程序 |
Eureka | Config Service和Admin Service会向Eureka注册服务,并保持心跳 | Config和Admin |
Meta Server | Meta Server从Eureka获取Config Service和Admin Service的服务信息 | Portal和Client |
Meta Server和Config Service是在一个JVM进程中
Eureka和Config Service是在一个JVM进程中
部署分布说明
-
Portal
单独使用ApolloPortalDB
库,可以独立部署 -
Config Service
和Admin Service
共用ApolloConfigDB
库,建议部署至同一台服务器。 -
Portal
部署在生产环境的机房,通过它来直接管理FAT、UAT、PRO等环境的配置 -
Config Service
和Admin Service
在每个环境都独立部署,使用独立的数据库(提供给相对应环境的客户端程序调用配置接口)
默认支持环境说明
名称 | 说明 |
---|---|
DEV | 开发环境 |
FAT | 测试环境,相当于alpha环境(功能测试) |
UAT | 集成环境,相当于beta环境(回归测试) |
PRO | 生产环境 |
安装Config Service
和Admin Service
- 导入数据库
mysql -uroot -p -e 'CREATE DATABASE IF NOT EXISTS ApolloConfigDB DEFAULT CHARACTER SET = utf8mb4'
mysql -uroot -p ApolloConfigDB < ApolloConfigDB.sql
- 安装程序
mkdir -p /opt/{apollo-config,apollo-admin}
unzip apollo-adminservice-1.4.0-github.zip -d /opt/apollo-admin/
unzip apollo-configservice-1.4.0-github.zip -d /opt/apollo-config/
- 修改配置文件
vim /opt/apollo-config/config/application-github.properties
######修改config server数据库地址以及用户名密码
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
vim /opt/apollo-admin/config/application-github.properties
######修改admin server数据库地址以及用户名密码
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
- 启动程序
/opt/apollo-config/scripts/startup.sh
/opt/apollo-admin/scripts/startup.sh
- 检查启动情况
- 打开网页
http://10.10.10.10:8080
,查看是否有APOLLO-CONFIGSERVICE
以及APOLLO-ADMINSERVICE
成功注册 - 使用命令
curl -X GET "http://10.10.10.10:8080/eureka/apps"
检查已注册服务
- 打开网页
同一套环境中部署Config Service
和Admin Service
集群
- 修改数据库配置文件
###修改 `ApolloConfigDB`.`ServerConfig`表中 `Value`选项
###将原 http://localhost:8080/eureka/ 修改为内网IP,(Eureka服务Url,多个service以英文逗号分隔)
###例如:
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://10.10.10.10:8080/eureka/,http://10.10.10.11:8080/eureka/' WHERE `Id` = 1
-
部署并启动
- 在10.10.10.10以及10.10.10.11服务器上部署config及admin服务
- 启动config及admin服务
-
检查启动情况
- 打开网页
http://10.10.10.10:8080
以及http://10.10.10.11:8080
,两台程序都服务注册成功即可。 - 使用命令
curl -X GET "http://10.10.10.10:8080/eureka/apps"
检查已注册服务
- 打开网页
安装配置portal
- 导入数据库
mysql -uroot -p -e 'CREATE DATABASE IF NOT EXISTS ApolloPortalDB DEFAULT CHARACTER SET = utf8mb4'
mysql -uroot -p ApolloPortalDB < ApolloPortalDB.sql
- 安装程序
mkdir -p /opt/apollo-portal
unzip apollo-portal-1.4.0-github.zip -d /opt/apollo-portal/
-
修改配置文件
修改数据库配置文件
vim /opt/apollo-portal/config/application-github.properties
######修改portal数据库地址以及用户名密码
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
**修改访问环境配置文件**
vim /opt/apollo-portal/config/apollo-env.properties
######修改各环境的eureka访问地址,仅培训需要的环境,如果eureka配置集群模式,填入地址,使用逗号隔开。(更建议使用域名+负载均衡)
dev.meta=http://10.10.10.10:8080,http://10.10.10.11:8080
**修改数据库配置**
配置统一存储在 ApolloPortalDB
.ServerConfig
表中
###允许支持多环境
`apollo.portal.envs`键值中,如需管理多个环境的话,使用逗号隔开
例如 "DEV,FAT,UAT,PRO"
###修改部门列表信息
`organizations`键值中,按照样例修改可选部门信息
###超级管理官
`superAdmin`键值中,拥有超级管理员权限用户名,如需添加多个,用逗号隔开
- 启动程序
/opt/apollo-portal/scripts/startup.sh
-
访问配置管理页面
访问域名 : http://10.10.10.10:8070
默认用户名 : apollo
默认密码 : admin -
增加配置请查看官方git说明书
https://github.com/ctripcorp/apollo/wiki/Apollo使用指南
https://gitee.com/nobodyiam/apollo/wikis/Apollo使用指南?sort_id=1296981
添加自定义环境
必须使用源码编译
假设需要添加的环境名称为PRE
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java"类,在其中加入
PRE
枚举
public enum Env{
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, PRE, TOOLS, UNKNOWN;
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/EnvUtils.java"类,在其中加入
PRE
枚举的转换逻辑
case "PRO":
case "PROD": //just in case
return Env.PRO;
case "PRE":
return Env.PRE;
case "DEV":
return Env.DEV;
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/internals/LegacyMetaServerProvider.java"类,增加读取
PRE
环境的meta server地址逻辑
domains.put(Env.PRE, getMetaServerAddress(prop, "pre_meta", "pre.meta"));
- 修改"apollo-portal/src/main/resources/apollo-env.properties"配置文件,增加
pre.meta
占位符
pre.meta=${pre_meta}
- 编译打包,获取安装包文件路径
可以根据环境,修改
build.sh
文件中的数据库地址配置
cd scripts
./build.sh
apollo-configservice/target/apollo-configservice-x.x.x-github.zip
apollo-adminservice/target/apollo-adminservice-x.x.x-github.zip
apollo-portal/target/apollo-portal-x.x.x-github.zip