Apollo(阿波罗) 是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
***本文使用docker 快速搭建 Apollo 服务端 版本为1.7.0版本 目的是提供一个对Apollo的初步认识 ,避免踩坑,官方文档对无基础看着有点吃力了 ,如果需要详细介绍文档 移步官方 ***
首先,Apollo 有三个服务:
其中 config 与 admin 是多实例的对应标题中的多环境 , 因此如果单环境只需要各部署一个config,admin,portal ,其中eureka 是在config 中的,因此需要提前启动config ,并在配置项数据库中提供eureka访问地址
需要提前安装好 docker(最好换下国内源) ,最好关闭防火墙(一般部署在内网,默认安全)
我这里的IP是 192.168.203.101 ,数据库 192.168.203.101 3306 root root
docker pull apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-portal:1.7.0-SNAPSHOT
链接: https://pan.baidu.com/s/1wc7srmvwD7xZ9ZUa4h0S7Q 提取码: rv7p
完成后在数据库中把 ApolloConfigDB 中的ServerConfig 的 eureka.service.url
value 改成 http://192.168.203.101:8080/eureka/
对应下面的 config 的eureka地址
需要先启动config,因为eureka在config,需要它提供注册服务 ,然后启动admin 最后启动portal
在启动过程中可能出现eureka 注册失败,需要等eureka启动后就不会了
config
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
admin
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
portal
docker run -p 8070:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-e APOLLO_PORTAL_ENVS=dev \
-e DEV_META=http://192.168.203.101:8080 \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT
也可以启动一个看下日志有没有出错
docker tail -f apollo-cs/apollo-as/apollo-web
输入 http://192.168.203.101:8070/ 验证 初始账号密码 : apollo/admin
官方文档详细介绍各参数含义在这
前面讲到 config 与 admin 是 多实例 ,我们一般应用部署多实例是为了负载,多数都是单一数据源,而Apollo 使用多实例是为了环境隔离,因此需要多个数据源 , 同时如果需要测试与生产环境操作隔离也可以部署多个portal 这样也需要多个portaldb 数据库 ,我们这里使用dev,prod
两个 然后前台一个,具体分布如下:
机器 | config-服务 | admin-服务 | portal-服务 | 数据库 |
---|---|---|---|---|
192.168.203.101 | apollo-cs1 | apollo-as1 | 3306/3307 | |
192.168.203.102 | apollo-cs2 | apollo-as2 | apollo-web |
其中cs1 as1 连接 3306 ,cs2 as2 连接3307 , 同时我们需要在3306与3307的配置项中标明eureka 地址 逗号隔开 , 同时在portal 中 写多个配置环境
如果是从单版本搭建复用,最好把config 重新建一下 , 不然两个configdb 数据不一致会报错
在1.7中 只支持以下环境
com.ctrip.framework.apollo.core.enums.Env
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;
开始操作,在192.168.203.101-102 上面分别启动apollo-cs1 , apollo-cs2
当然 如果 docker 目录未创建需要提前创建并且授权
授权语句:
chcon -Rt svirt_sandbox_file_t /yourdir
在3306 3307 数据库中 ApolloConfigDB.ServerConfig
中的 key=eureka.service.url
修改对应的value
为: http://192.168.203.101:8080/eureka/,http://192.168.203.102:8080/eureka/
# 101 启动
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs1 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
## 102 启动
docker run -p 8080:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs2 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
# 101 启动
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as1 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
# 102 启动
docker run -p 8090:8090 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as2 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
101 已经有两个数据库服务了 ,所以把前台放在102 上面 , 这里与单机改动的点是:
docker run -p 80:8070 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
-e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
-e APOLLO_PORTAL_ENVS=dev,prod \
-e DEV_META=http://192.168.203.101:8080 \
-e PROD_META=http://192.168.203.102:8080 \
-d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT
至此可以访问 http://192.168.203.102/
然后登录进去apollo/admin , 愉快的体验吧