配置中心

在现实的Coding工作中,我们是否会遇到这样的问题,我们本地开发环境会用到一套配置参数和配置文件,测试环境会用到另一套配置参数和配置文件,然而项目打包发布时又会用到一套配置参数和配置文件。由于考虑到信息安全的重要性,生产环境用到的配置参数,例如:数据库IP,用户名和密码,以及第三方账号信息等,这些参数我们理想情况下仅限于有限的人员了解,我们该如何保护这些敏感数据呢?再比如我们每次发布生产环境,我们不想因为错改或者漏改了配置参数,而给我们的发布带来发布失败或者灾难?这个时候我们或许会考虑使用一个统一的配置中心来管理我们项目中所使用的配置参数,并且有相应的权限管理。那么我觉得Apollo应该是我们能够想到的解决方案的一种。

Apollo是携程使用的一种集中管理配置的一个很好的解决方案,它提供一个web界面,很友好的让我们管理我们的配置参数,并且提供配置回滚的特性,我们只需用在web界面用鼠标操作就可以将相应的配置参数回退到上一版本。

Apollo在Github的访问量

Apollo在GitHub开源,通过截图可以看出该项目的关注量和下载量。

下面我们通过在本地部署一个单机版的平台研究下Apollo是如何工作的,如果需要将该项目用于生产环境,则需要将该项目以分布式的方式部署成集群,以提高整个系统的高可用。详细参考官方文档: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版本,确保JDK版本在1.8以上

java -version

java version "1.8.0_221"

Java(TM) SE Runtime Environment (build 1.8.0_221-b11)

Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

二,Apollo需要Mysql数据存储数据,确保Mysql数据库版本在5.6.5以上

SHOW VARIABLES WHERE Variable_name = 'version';

三,从GitHub下载Apollo安装包

git clone https://github.com/nobodyiam/apollo-build-scripts

四,创建数据库和表

cd apollo-build-scripts

mysql -h localhost -u root -p

>输入数据库密码

create database config_portal;

use config_portal;

source sql/apolloportaldb.sql

create database config;

use config;

source sql/apolloconfigdb.sql

五,验证数据库和表是否创建成功

select `Id`, `AppId`, `Name` from config_portal.App;

select `NamespaceId`, `Key`, `Value`, `Comment` from config.Item;

查询结果

查询结果

六,在启动脚本中配置数据库连接信息

vi demo.sh

# apollo config db info

apollo_config_db_url=jdbc:mysql://192.168.0.128:3306/config?characterEncoding=utf8

apollo_config_db_username=root

apollo_config_db_password=root

# apollo portal db info

apollo_portal_db_url=jdbc:mysql://192.168.0.128:3306/config_portal?characterEncoding=utf8

apollo_portal_db_username=root

apollo_portal_db_password=root

七,执行启动脚本

./demo.sh start

Windows new JAVA_HOME is: /c/tools/JDK-8U~1

==== starting service ====

Service logging file is ./service/apollo-service.log

Started [293]

Waiting for config service startup.......

Config service started. You may visit http://localhost:8080 for service status now!

Waiting for admin service startup..

Admin service started

==== starting portal ====

Portal logging file is ./portal/apollo-portal.log

Started [351]

Waiting for portal startup....

Portal started. You can visit http://localhost:8070 now!

出现上述信息则说明这个Apollo启动成功。

八,浏览器地址栏输入:http://localhost:8070访问Apollo Web登录界面,默认账号是apollo/admin

演示结果

到此为止,Apollo单机版的平台已经部署完成。

网络图

下面我们创建一个SpringBoot项目,研究下SpringBoot如何与Apollo整合使用。

一,在STS中新建一个SpringBoot工程,工程结构如下图:

源代码结构

二,将Apollo客户端的依赖加入pom.xml中

maven依赖

三,需要在Apollo配置中心创建一个应用,应用名:my-app,应用ID:123test321,该应用ID必须在Apollo平台中唯一

演示结果

四,将应用ID配置到SpringBoot项目的resources/META-INF/app.properties

# test

app.id=123test321

apollo.meta=http://localhost:8080

env=DEV

五,配置SpringBoot主配置文件application.yml,开启Apollo

apollo:

bootstrap:

enabled: true

# will inject 'application' and 'TEST1.apollo' namespaces in bootstrap phase

namespaces: application

六,我们通过一个简单的Controller来验证是否能够从Apollo拿到最新的配置参数,同时我们通过配置参数来控制Swagger的开启和关闭。

@Slf4j

@RestController

@RequestMapping("/apollo")

public class ConfigController {

@ApolloConfig

private Config config;

@GetMapping("/index/{key}")

@ResponseBody

public String index(@PathVariable("key") String key) {

log.info("request key:{}", key);

return config.getProperty(key, "defaultValue");

}

}

@Configuration

@EnableSwagger2

public class Swagger2Config {

@Value("${swagger.enable:false}")

private boolean enableSwagger;

@Bean

public Docket createRestApi() {

return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).enable(enableSwagger).select()

.apis(RequestHandlerSelectors.basePackage("com.demo.apollo.controller")).paths(PathSelectors.any())

.build();

}

private ApiInfo apiInfo() {

return new ApiInfoBuilder().title("SprintBoot Swagger2 build API docs")

.description("Spring Boot Swagger2 Restful API").contact(new Contact("xiaobaoqiang", "", ""))

.version("1.0").build();

}

}

七,启动SpringBoot项目

演示结果

通过启动日志,我们可以看到SpringBoot已经发现了我们上面部署的Apollo配置服务,并且读取到SpringBoot启动所需要的配置参数,例如:端口号9002

curl -X GET "http://localhost:9002/apollo/index/aa" -H "accept: */*"

test

curl -X GET "http://localhost:9002/apollo/index/cc" -H "accept: */*"

defaultValue

通过以上实践,我们在本地部署了一套最小化的统一配置管理服务,通过Apollo配置中心,我们可以有效的保护敏感的配置参数,并且做到权限管理,保证了我们的数据安全。同时保证了项目在生产环境的安全,不会因为数据账号等关键信息泄露,遭受恶意攻击。

参考:

https://github.com/ctripcorp/apollo

https://github.com/ctripcorp/apollo/wiki/Quick-Start

文章如有不妥之处,欢迎指正!谢谢!

python 携程 apollo_手把手教你使用携程开源框架Apollo(阿波罗)相关推荐

  1. 手把手教你构建WPF官方开源框架源代码

    从去年微软就将 WPF 开源了,差不多现在所有 WPF 的源代码都开源了.在学习框架的时候,我会做一些改动,期望能构建一个自己的版本进行测试.但是作为一个特别大的框架,想要构建跑起来可不是直接在 Vi ...

  2. Python学习教程:手把手教你搭建自己的量化分析数据库

    Python学习教程:手把手教你搭建自己的量化分析数据库 引言: 数据是金融量化分析的重要基础,包括股票历史交易数据.上市公司基本面数据.宏观和行业数据等.随着信息流量的日益膨胀,学会获取.查询和加工 ...

  3. 手把手教你搭建java接口自动化测试框架(四):断言、生成测试报告

    手把手教你搭建java接口自动化测试框架(四):断言.生成测试报告 上一集说到post和Get请求,请求后得到的响应(即接口返回值)是我们想要的吗 比如网站上get接口文档说明 : "dat ...

  4. [github 教程]手把手教你最简单的开源项目托管GitHub入门教程_github 教程

    [github 教程]手把手教你最简单的开源项目托管GitHub入门教程--简介 自从google code关闭了下载服务了之后,GitHub作为了目前最好用的免费 开源 项目托管站点,众多开源项目都 ...

  5. 怎么用python自制计算公式_手把手教你用python制作简易计算器,能够记录你使用的情况...

    话不多说,首先先看效果图,它能够记录你在使用过程中的历史,方便你查看是否有错: 接下来就仔细分析一下是如何制作的: 简易计算器 第一步:导入资源库 在过程中使用到了tkinter这个资源库,win+R ...

  6. python 靶心_手把手教你使用Python实战反欺诈模型|原理+代码

    原标题:手把手教你使用Python实战反欺诈模型|原理+代码 作者 | 萝卜 来源 | 早起Python(ID: zaoqi-python) 本文将基于不平衡数据,使用Python进行 反欺诈模型数据 ...

  7. python global用法_14_手把手教你学Python之函数(下)

    变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...

  8. 如何用python开发游戏_手把手教你用Python完成一个控制台小游戏-阿里云开发者社区...

    很多人想学Python程序设计或者已经了解过一点Python程序设计基础,却没办法开发出一个项目. 今天,通过演示一个简单的控制台小游戏制作,手把手教你如何用Python编写一个游戏程序,即便你是个新 ...

  9. 用python画皇冠_手把手教你用 Python 绘制酷炫的桑基图!

    原标题:手把手教你用 Python 绘制酷炫的桑基图! 作者 | 周志鹏 责编 | 郭 芮 最近,不止一次收到小伙伴的截图追问: "这个图叫什么???" "这个图真好看! ...

最新文章

  1. Bundle捆绑压缩技术
  2. openwrt 安装 ser2net 配置
  3. 【FPGA】FPGA中的缓冲与驱动那些事
  4. 正则 不区分大小写_4.nginx的server_name正则匹配
  5. NYOJ 20 吝啬的国度(深搜)
  6. (3)数据库的建立和数据表的操作
  7. CSS类命名的语义化VS结构化方式
  8. java c c 的应用_javac 简单应用
  9. 简明易懂的call apply
  10. 最新版的SSM框架spring5.0搭建教程(附源码)
  11. Android View 的scrollTo 和 scrollBy方法
  12. Linux下硬盘分区的最佳方案
  13. SPSS 有调节的中介与有中介的调节【SPSS 042期】
  14. vue学习笔记-3-双向数据绑定
  15. 关于Nod的离线升级方案
  16. 金蝶kis专业版公网访问_金蝶KIS远程服务器端和远程客户端配置说明
  17. python因子分析案例_因子分析及python实现(一)
  18. 好听的音乐---飛魚樂園音樂專輯(Orchid Island)
  19. 2021最新Android常用开源库总结,建议收藏
  20. 7.2—查找—Sear Insert Position

热门文章

  1. 注册资金含有外资的公司可以申请IDC许可证吗
  2. 关于串口数据处理(字符转换为十进制数值)
  3. SIM800c收发短信及AT指令
  4. Persecond for Mac(延时摄影视频制作工具)
  5. 海康大华设备RTSP地址格式
  6. 最全BAT大型互联网公司面试题整理,没有之一
  7. Quartusii13.0 bdf文件中元器件名称显示不全解决
  8. Altium如何导入DXF/DWG文件
  9. CG, DCG, NDCG
  10. COCOS 遗留问题