前言


    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

* github 地址:https://github.com/ctripcorp/apollo
<https://github.com/ctripcorp/apollo>
* 服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器
* Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持
* .Net客户端不依赖任何框架,能够运行于所有.Net运行时环境
* 以上摘抄自官方文档,该框架目前已达 9000 多个 star,而且目前已经支持了 .netcore 客户端
安装

服务器环境安装检查

    由于本次是按照正式环境来模拟一次部署,所以,按照官方指引,正式环境部署并不建议使用 Quick Start;接下来打开官方“分布式部署”指引文档:
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

<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>

* 首先是检查服务器是否安装了 Java 环境,在服务器输入 java -version


* 可以看到,服务已经安装,如果没有安装,这输入 yum install java-1.8.0-openjdk(本次使用的服务器为 Centos 7.0)。
数据库检查

    官方要求数据库为 MySQL,版本要求:5.6.5+,我在这里使用了 MariaDB 10.3,效果相同,安装好数据库后,下载官方 SQL
文件,执行,创建 apollo 所需的数据库。数据库文件一共有两个

* ApolloPortalDB 地址:
https://github.com/ctripcorp/apollo/blob/master/scripts/sql/apolloportaldb.sql
<https://github.com/ctripcorp/apollo/blob/master/scripts/sql/apolloportaldb.sql>
这个是 Portal 数据库,可以用来做各种环境的统一管理
* ApolloConfigDB 地址:
https://github.com/ctripcorp/apollo/blob/master/scripts/sql/apolloconfigdb.sql
<https://github.com/ctripcorp/apollo/blob/master/scripts/sql/apolloconfigdb.sql>
这是“配置”存储数据库,每个环境应该单独部署一份,比如 开发、测试、产品 环境,应该每个环境部署一份,因为各自环境的配置内容是不同的
* 为了方便,我现在把两个数据库都安装在本地,安装好数据库文件后,进入 ApolloConfigDB 通过执行 SQL 命令,进行检查


* ApolloPortalDB 同理,可以看到,数据库已经成功安装
安装服务和 web 管理控制台

    服务一共有 3 个实例,都从这里下载:https://github.com/ctripcorp/apollo/releases,我直接下载作者编译好的
<https://github.com/ctripcorp/apollo/releases,我直接下载作者编译好的> zip 文件



下面简单介绍各个服务以及用途

* apollo-configservice apollo 配置文件服务,该服务直接对外提供服务,同时需要在 portal
进行元数据注册,下面修改该服务的数据库配置文件。
修改配置文件 /apollo-configservice-1.1.2/config/application-github.properties
为刚才数据库的配置 spring.datasource.url =
jdbc:mysql://127.0.0.1:3406/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root spring.datasource.password = root
* apollo-adminservice-1.1.2 web 管理服务,同样修改其配置文件
apollo-adminservice-1.1.2/config/application-github.properties 为 ApolloConfigDB
数据库的地址,同上。
* apollo-portal-1.1.2 元数据服务,修改配置文件
apollo-portal-1.1.2/config/application-github.properties,注意,这里的数据必须为
ApolloPortalDB ,如下: spring.datasource.url =
jdbc:mysql://127.0.0.1:3406/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root spring.datasource.password = root
* 最后,还需要修改 apollo-portal-1.1.2/config/apollo-env.properties 文件,将
configservice 都注册到 portalservice 中 local.meta=http://localhost:8080
dev.meta=http://172.16.1.220:8080 fat.meta=http://172.16.1.220:8080
uat.meta=http://172.16.1.220:8080 lpt.meta=${lpt_meta}
pro.meta=http://172.16.1.227:8080
启动和修改配置

    在上面做好三个服务端配置后,下面我们就可以逐一的启动各个服务了,各自服务端监听端口都位于 xxx/scripts/startup.sh 中

* 执行 sh apollo-configservice-1.1.2/scripts/startup.sh 启动 config 服务,监听端口默认:8080
* 执行 sh apollo-portal-1.1.2/scripts/startup.sh 启动 portal 服务,监听端口默认:8070
* 执行 sh apollo-adminservice-1.1.2/scripts/startup.sh 启动 admin 服务,监听端口默认:8090
如果输出看到以上三个服务都输出信息为,证明服务启动成功
Waiting for server startup.... Mon Nov 19 11:07:15 CST 2018 Server started in
20 seconds!
* 通过查看 cat apollo-adminservice-1.1.2/scripts/startup.sh 得知,该服务监听端口为
8070,打开浏览器,输入地址:http://localhost:8090,看到了如下界面 <>


* 输入默认账号密码:apollo/admin 登录 web 控制台进行查看。


* 为了方便演示,首先创建一个项目 webapplication1


* 进入 webapplication1,


* 点击左侧按钮“添加Namespace”,创建一个公共的命名空间,取名为:common


* 创建成功,返回项目主页


* 在 dotnet.versin 命名空间下点击“新增配置”按钮,增加一个配置节点


* 创建完成后,可以看到,该节点状态为 “未发布”


* 点击该命名空间下的“发布”按钮,将其进行发布


* 使用以上方法,在默认的命名空间“application” 下也创建一个名为“connectionstring" 的节点,同样将其发布
* 此时,恭喜你,已完成服务器部署发布,接下来,我们通过创建一个 web 应用程序访问该配置服务
客户端访问

* 首先创建 web 项目,完成后在 nuget 包管理器上引用 apollo 的 .netcore 客户端
Com.Ctrip.Framework.Apollo.Configuration


* 打开 Program.cs 文件,将刚才在 apollo 服务上创建的命名空间加入到管道中 public static
IWebHostBuilder CreateWebHostBuilder(string[] args) { var hostBuilder =
WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>()
.ConfigureAppConfiguration((context, builder) => {
builder.AddApollo(builder.Build().GetSection("apollo")) .AddDefault()
.AddNamespace("dotnet.version") .AddNamespace("application"); }); return
hostBuilder; }
* 以上代码中有一个方法 AddApollo ,这里传入了本地配置文件节点
builder.Build().GetSection("apollo"),其配置如下 { "Logging": { "LogLevel": {
"Default": "Warning" } }, "AllowedHosts": "*", "apollo": { "AppId":
"webapplication1", "MetaServer": "http://172.16.1.220:8080" } }
* AppId 对于 我们创建的在 apollo web 控制台上创建的项目ID webapplication1,元数据服务指向 8080 端口,正是
configservice 的监听端口
* 在 HomeController 的操作 Action 中,获取配置节点,并输出到客户端 public IActionResult Index()
{ this.ViewBag.ConnectionString = this.cfg["connectionstring"];
this.ViewBag.LastVersion = this.cfg["last-version"]; return View(); }
* 启动项目,可以看到


* 至此,测试完成
结语

* apollo
项目官方部署指引非常复杂,原因就在于整个官方文档都是大片大片的文字进行铺排,圣人说:看图就会,见字想睡,本文希望通过自己的测试能帮助更多想应用 apollo
配置管理服务的朋友
* 注意,安装完成默认只有 DEV 配置环境,如果需要增加环境,可直接修改数据库 apolloportaldb.serverconfig 表,字段名称为
apollo.portal.envs 的列值,多个环境以逗号分隔,保存,重启服务即可

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信