前言

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

  • github 地址: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/分布式部署指南

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

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

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

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

    服务一共有 3 个实例,都从这里下载: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 的列值,多个环境以逗号分隔,保存,重启服务即可

Asp.NetCore轻松学-配置服务 apollo 部署实践的更多相关文章

  1. 目录---Asp.NETCore轻松学系列【目录】

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  2. 【目录】Asp.NETCore轻松学系列

    随笔分类 - Asp.NETCore轻松学系列 Asp.NETCore轻松学系列阅读指引目录 摘要: 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进 ...

  3. Asp.NETCore轻松学系列阅读指引目录

    前言 耗时两个多月,坚持写这个入门系列文章,就是想给后来者更好更快的上手体验,这个系列可以说是从入门到进阶,适合没有 .NETCore 编程经验到小白同学,也适合从 .NET Framework 迁移 ...

  4. Asp.NetCore轻松学-使用Supervisor进行托管部署

    前言 上一篇文章 Asp.NetCore轻松学-部署到 Linux 进行托管 介绍了如何在 Centos 上部署自托管的 .NET Core 应用程序,接下来的内容就是介绍如何使用第三方任务管理程序来 ...

  5. Asp.NetCore轻松学-部署到 Linux 进行托管

    前言 上一篇文章介绍了如何将开发好的 Asp.Net Core 应用程序部署到 IIS,且学习了进程内托管和进程外托管的区别:接下来就要说说应用 Asp.Net Core 的特性(跨平台),将 .Ne ...

  6. Asp.NetCore轻松学-部署到 IIS 进行托管

    前言 经过一段时间的学习,终于来到了部署服务这个环节,.NetCore 的部署方式非常的灵活多样,但是其万变不离其宗,所有的 Asp.NetCore 程序都基于端口的侦听,在部署的时候仅需要配置侦听地 ...

  7. Asp.NetCore轻松学-使用Docker进行容器化托管

    前言 没有 docker 部署的程序是不完整的,在写了 IIS/Centos/Supervisor 3篇托管介绍文章后,终于来到了容器化部署,博客园里面有关于 docker 部署的文章比比皆是,作为硬 ...

  8. Asp.NetCore轻松学-实现一个轻量级高可复用的RabbitMQ客户端

    前言 本示例通过对服务订阅的封装.隐藏细节实现.统一配置.自动重连.异常处理等各个方面来打造一个简单易用的 RabbitMQ 工厂:本文适合适合有一定 RabbitMQ 使用经验的读者阅读,如果你还没 ...

  9. Asp.NetCore轻松学-业务重点-实现一个简单的手机号码验证

    前言     本文纯干货,直接拿走使用,不用付费.在业务开发中,手机号码验证是我们常常需要面对的问题,目前市场上各种各样的手机号码验证方式,比如正则表达式等等,本文结合实际业务场景,在业务级别对手机号 ...

随机推荐

  1. 配置teredo,启用ipv6,xx-net

    最近使用XX-NET科学上网 ,提示要配置使用IPv6.根据github的上win10配置ipv6方式(https://github.com/XX-net/XX-Net/wiki/IPv6-Win10 ...

  2. js 数据加载loading封装

    <!-- 模态框(Modal) --> <div class="modal fade" id="qst_loading" tabindex=& ...

  3. VirtualBox不能为虚拟电脑打开一个新任务——The VirtualBox kernel modules do not match this version of VirtualBox

    本文由荒原之梦原创,原文链接:http://zhaokaifeng.com/?p=608 一.问题产生的环境 物理机操作系统:Ubuntu 17.10 (Ubuntu版本查看命令: cat /etc/ ...

  4. YII框架CGridView sql有条件分页实现

    $SQL="SELECT * FROM {{user}} WHERE `typeff`=2 order by create_time desc"; $SQL_count=" ...

  5. mysql物理备份基本操作

    Ⅰ.xtrabackup介绍 xtrabackup只能备份innodb引擎的数据,不能备份表结构,percona开源的,强烈推荐最新版本(旧版本bug多) innobackupex可以备份myisam ...

  6. tkinter中checkbutton多选框控件和variable用法(六)

    checkbutton控件 简单的实现多选: import tkinter wuya = tkinter.Tk() wuya.title("wuya") wuya.geometry ...

  7. Java 学习笔记 (五) Java Compile\Build\Make的区别

    以下内容引自: http://blog.51cto.com/lavasoft/436216 Compile.Make和Build的区别 原创leizhimin2010-11-30 11:30:20评论 ...

  8. ANSI 和 UNICODE 的函数对应表

    ANSI        UNICODE           通用(char.h)    (wchar.h)        (tchar.h) char         wchar_t         ...

  9. CentOS7.3上部署简单的网站(Tomcat)

    本文转载自:沙师弟专栏 https://blog.csdn.net/u014597198/article/details/79649219 [ 感谢郭大大 ] 服务器版本:CentOS 7.3 64 ...

  10. 关于” 记一次logback传输日志到logstash根据自定义设置动态创建ElasticSearch索引” 这篇博客相关的优化采坑记录

    之前写过一篇博客是关于记录日志的简单方式的   主要就是  应用->redis->logstash->elasticsearch 整个流程的配置方法和过程的 虽然我们部分线上应用使用 ...