Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
官方github:https://github.com/ctripcorp/apollo
作者对Apollo对介绍:https://github.com/ctripcorp/apollo/wiki/Apollo配置中心介绍
本次部署环境为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 |
下载代码:
git clone https://github.com/ctripcorp/apollo.git
比较重要的几个项目:
上图简要描述了配置发布的大致过程:
数据库初始化:
下面的sql为大写格式,注意数据库的大小写敏感设置
apollo\scripts\sql\apolloportaldb.sql
apollo\scripts\sql\apolloconfigdb.sql
调整配置并打包:
在Apollo
项目中找到目录apollo\scripts\
的配置文件build.bat
或者build.bat
ApolloConfigDB
配置,下面的是ApolloPortalDB
配置:# apollo config db info 该数据库配置只需要配置一次,不同环境无需修改
apollo_config_db_url=jdbc:mysql://192.168.35.227:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=XXXX
apollo_config_db_password=XXXX
# apollo portal db info 该数据库依据不同环境配置对应的数据库连接,并且需要多次打对应环境的JAR包
apollo_portal_db_url=jdbc:mysql://192.168.35.226:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=XXXX
apollo_portal_db_password=XXXX
# meta server url, different environments should have different meta server addresses
dev_meta=http://192.168.35.207:9100
fat_meta=http://192.168.35.208:9100
uat_meta=http://192.168.35.209:9100
pro_meta=http://192.168.35.210:9100
在DEV FAT UAT PRO 对应的ApolloConfigDB
数据库中,找到表ServerConfig
中的eureka.service.url
配置项:
UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`='http://localhost:9100/eureka/' WHERE `Key`='eureka.service.url';
具体eureka
配置,可以查看官网:https://github.com/ctripcorp/apollo/wiki/分布式部署指南
./build.sh
部署程序到对应的服务器
将apollo-configservice/target/
目录下的apollo-configservice-x.x.x-github.zip
上传到服务器上,解压
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003171
SERVER_PORT=9100
执行scripts/startup.sh
即可
如需停止服务,执行scripts/shutdown.sh.
将apollo-adminservice/target/
目录下的apollo-adminservice-x.x.x-github.zip
上传到服务器上,解压
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003172
SERVER_PORT=9101
执行scripts/startup.sh
即可
如需停止服务,执行scripts/shutdown.sh.
将apollo-portal/target/
目录下的apollo-portal-x.x.x-github.zip
上传到服务器上,解压
修改scripts/startup.sh
:
LOG_DIR=/opt/logs/100003173
SERVER_PORT=9102
执行scripts/startup.sh
即可
如需停止服务,执行scripts/shutdown.sh.
访问测试
上面部署完成,可以测试
访问不同环境的eureka
,查看服务注册情况是否正确:
http://192.168.35.207:9100/
如果可以看到:
192.168.35.207:apollo-adminservice:9101
192.168.35.207:apollo-configservice:9100
两个服务都为UP,正常!
访问客户端:
http://192.168.35.206:9102/
登录,默认用户名密码为:apollo/admin
新建项目测试。
apollo-core
和apollo-client
包:<dependency>
<groupId>com.ctrip.framework.apollogroupId>
<artifactId>apollo-coreartifactId>
<version>0.11.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>com.ctrip.framework.apollogroupId>
<artifactId>apollo-clientartifactId>
<version>0.11.0-SNAPSHOTversion>
dependency>
请确保classpath:/META-INF/app.properties文件存在,并且其中内容为自己的项目名称,而且要保持唯一:
app.id=demo
本地开发
如果是本地开发,可以在开发工具添加Environment:
env=DEV
线上环境配置方式:
java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
在项目中引用apollo-core
和apollo-client
包,在apollo-core
包中可以看到apollo-env.properties
配置文件,默认配置为打包前配置的信息:
local.meta=http://localhost:8080
dev.meta=http://192.168.35.207:9100
fat.meta=http://192.168.35.208:9100
uat.meta=http://192.168.35.209:9100
lpt.meta=${lpt_meta}
pro.meta=http://192.168.35.210:9100
如果需要修改或者覆盖的话,在项目的resources
从上面复制一个apollo-env.properties
文件,修改对应环境信息就可以了
@EnableApolloConfig
注解即可:import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author chihiro.zhang
*/
@EnableApolloConfig
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
添加一个测试的类DemoConfiguration
,当然配置中心要有下面配置的配置信息:
@Configuration
@EnableAutoConfiguration
public class DemoConfiguration {
@Value("${demo}")
private String demo;
}
完成!
这个图是计划部署的方案,并不是上面写的例子的方案