Apollo开源地址:https://github.com/ctripcorp/apollo
安装部署
1、把Apollo源码clone下来
2、添加docker-compose.yml 文件
version: "3"
services:
apollo-configservice: ##容器服务名
container_name: apollo-configservice ##容器名
build: apollo-configservice/src/main/docker/ ##Dockerfile路径
image: apollo-configservice ##镜像名
ports:
- "9080:8080" ##容器端口映射
volumes:
- "/root/mydata/apollo/logs/100003171:/opt/logs/100003171" ##将/opt/logs/100003171目录挂载到宿主机的/Users/mobin/opt/logs/100003171方便在宿主机上查看日志
environment:
- spring_datasource_url=jdbc:mysql:///:3306/ApolloConfigDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=root
apollo-adminservice:
container_name: apollo-adminservice
build: apollo-adminservice/src/main/docker/
image: apollo-adminservice
ports:
- "9090:8090"
depends_on:
- apollo-configservice
volumes:
- "/root/mydata/apollo/logs/100003172:/opt/logs/100003172"
environment:
- spring_datasource_url=jdbc:mysql:///:3306/ApolloConfigDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=root
apollo-portal:
container_name: apollo-portal
build: apollo-portal/src/main/docker/
image: apollo-portal
ports:
- "9070:8070"
depends_on:
- apollo-adminservice
volumes:
- "/root/mydata/logs/apollo/100003173:/opt/logs/100003173"
environment:
- spring_datasource_url=jdbc:mysql:///:3306/ApolloPortalDB?characterEncoding=utf8
- spring_datasource_username=root
- spring_datasource_password=root
3、下载Apollo包
将这三个包分别放到Apollo-adminservice、Apollo-portal、Apollo-configservice的docker包下面(不用解压)
4、修改dockerfile,将如下位置修改成自己下载的版本号,其他不用动
5、执行下图中的两个sql文件,创建数据库,进行初始化
6、将整个项目打包成zip文件上传到Linux系统并执行以下命令
unzip apollo.zip
cd apollo
docker-compose up -d
然后看到以下命令输出,说明创建成功
docker ps -a查看容器状况
如上图所示则为启动成功,如果不成功则输入以下命令查看日志
docker logs 容器id号
7、输入IP跟端口号http:///:9070就可以看到管理界面了
账号:apollo
密码:admin
进去就可以创建项目了 (test-01我创建的)
【注意!】
【注意!】
【注意!】
上面容器启动后可能会报错,我就是在启动容器后报错
进入apollo-portal容器,修改配置文件,看我下图命令找到要修改文件
将下面的IP地址改成宿主机的IP 端口号改成apollo-configservice容器映射的端口
修改数据库ApolloConfigDB的ServerConfig表中的eureka.service.url字段 将IP地址改成宿主机的IP 端口号改成apollo-configservice容器映射的端口
http://IP:9080/eureka/
然后基本就没有问题了,大功告成!!!
测试也说一下吧
pom.xml
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.8.0</version>
</dependency>
properties
# 应用全局唯一的身份标识
app.id=test-01
spring.application.name=provider
# Apollo Meta Server 地址
apollo.meta = http://宿主机IP:9080
# 自定义本地配置文件缓存路径
#apollo.cacheDir = ./config
# 设置在应用启动阶段就加载 Apollo 配置
apollo.bootstrap.enabled=true
# 注入 application namespace
apollo.bootstrap.namespaces=mysql
controller name是Apollo中添加的一个配置
@RestController
public class TestController {
@Value("${name}")
private String gn;
@GetMapping("/")
public String list() {
System.out.println(gn);
return "11" + gn;
}
}
事件监听
@Configuration
public class ApolloConfig {
@Bean
public void config() {
// config instance is singleton for each namespace and is never null
Config config = ConfigService.getAppConfig();
config.addChangeListener(changeEvent -> {
System.out.println("Changes for namespace " + changeEvent.getNamespace());
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
System.out.println(String.format("Found change - key: %s, oldValue: %s, newValue: %s, changeType: %s", change.getPropertyName(), change.getOldValue(), change.getNewValue(), change.getChangeType()));
}
});
}
}