🗒️Apollo配置中心搭建

type
status
slug
date
summary
tags
category
password
icon

常见部署架构

架构解析

实际操作

介绍

notion image
本文以单机多环境作为搭建说明,Apollo的文档非常完善,尽量多看Apollo文档
采用mavne编译源码,修改配置文件,以apollo自带sh脚本启动

服务端部署

注意

在Apollo中存放加密信息后,java Client利用jasypt解密要使用下面版本的,版本太高无法解密;
在apollo issus 中可以找到该问题,如果非要使用jasypt高版本,也有其他网友提供的其他解决方案

maven编译源码

在 ${apollo_home}/scripts/ 目录下执行:

打包后修改配置

1.找到apollo-configservice-2.1.0-SNAPSHOT-github.zip、apollo-portal-2.1.0-SNAPSHOT-github.zip、apollo-adminservice-2.1.0-SNAPSHOT-github.zip,然后解压出来
2.将configservice、adminservice再复制一份(有多少个环境复制多少分),portal只需要一个
4.规划portal和adminservice和configservice的端口
5.在portal的script/startup.sh中修改启动端口、config/application-github.properties修改数据库地址,连接到portal上、/config/apollo-env.properties中配置meat service的地址,也就是其他configservice的地址
6.给adminservice、configservice在script/startup.sh中修改启动端口、config/application-github.properties修改数据库地址

创建数据库

在源码的apollo/scripts/sql路径下,看到config和portal两个sql,portal倒入到portal库,config每个环境一个数据库各自倒入一份

修改数据库配置

每个环境config库的configservice表数据的eureka.service.url行,value设置为configservice的端口地址
portal库的serviceconfig表的apollo.portal.envs行,根据有多少个环境写多少个中间,分割

启动项目

根据configservice——adminservice——potal顺序启动
进入到这些文件的统一上层目录启动

yml转Properties

apollo一般用的都是properties,yml需要转换,这类文件千万不要去找工具网站转换
将yml暂时放入项目根目录下然后执行,非resource

客户端接入

pom配置

yml配置

SpringBoot开启Apollo配置

测试类

调用接口测试
动态更新值后测试
加密后测试解密
加密后修改秘闻测试

服务器项目启动

服务器的安全要比本地的高,本地可以将apollo密钥配置到yml中,apollo中也可以存放其他密钥,服务器环境就需要通过-D注入,参数存放在jenkins、环境变量、直接字符串输入中了,也许是多种组合
其他的信息可以不管,主要是下面这些需要通过-D注入进去
  • spring.profiles.active
  • apollo.meta
  • env
  • apollo.accesskey.secret

本地开发模式

默认apollo配置在本地是有缓存,如果之前连接过可以使用这个配置来启动,该模式也可用于自己需要修改一下配置中心的内容然后测试一下
apollo应该没有nacos如果本地配置,可以本地配置了就覆盖远程配置的选项,只能够通过这种方式来实现
notion image

获取本地配置文件缓存路径的流程

需要手动创建一下目录,不创建也可以,apollo会有地方存储自己的缓存配置
  1. 先获取自定义的路径,有优先顺序
  • 从系统属性中获取 System.getProperty("apollo.cacheDir")
  • 从系统环境变量中获取 Key为“APOLLO_CACHDIR”
  • 从服务配置文件中获取,根据操作系统不同,配置撰写的地址也不同。
      1. SERVER_PROPERTIES_LINUX = "/opt/settings/server.properties";
      1. SERVER_PROPERTIES_WINDOWS = "C:/opt/settings/server.properties";
  1. 如果从自定义方式没有获取到路径配置,则使用默认的路径前缀(根据操作系统不同,路径也不同)"C:\opt\data" , "/opt/data“
注意:在获取完路径后,Apollo会对路径做一定的处理。1.在路径后加上一层路径,文件夹名称为当前应用AppId;2.在上述路径后,Apollo还会加一层文件夹,名称为"/config-cache"。所以,无论配置的路径是什么,最后两层文件夹一定是/{appId}/config-cache。
配置的本地缓存目录,这行也可不配置,不配Apollo有默认值target/classes/config-cache apollo.cacheDir=/opt/data/apollo-config

开放平台

可以通过开放平台对参数增删改调整
整合示例
 
开放平台API

与Nacos对比

Nacos部署简单 还是注册中心 能够本地覆盖远程 但是接口更新好像不行;
Apollo有点重设计上 本地不能够覆盖远程 但是接口可以更新单个配置;

安全

  • portal可以开放外网,其他服务都是内网访问;如果有两套网络,比如公司的线上 预发(张家口)这个可以做一套,公司内部网络再做一套,两套apollo
  • 开启secret访问,客户端访问需要带上密钥
  • 可以使用jasypt对apollo中的关键信息加密
  • 默认情况给某个用户授予某个项目namespace权限,他就可以看到其他环境和namespace权限,这个在apollo参数设置中,将configView.memberOnly.envs设置为pro即可
 

安全性分析

只要能在本地跑
只要生产环境和开发环境有共用内容
只要密钥相同配置
内部都是会知道的,防君子不防小人
 
Java项目就算是加密过后的 代码,能在本地运行,jprofile 按照线程去分析依旧能够破解,这个不太处理。还有就是隐藏自己,包装到开源类上,静默发送本机信息,这种别人通过网络过滤也能进解决。Idea的破解还到处都是,安全知识相对的
Javascript还好,不太好还原,一般都是拷贝方法

jasypt

介绍

一个springBoot配置加解密的包,可以对配置文件有特定前缀后缀【默认前缀:ENC( 后缀:)】的加密字符串中的内容进行解密;
Jasypt可以为Springboot加密的信息很多,主要有:
  • System Property 系统变量
  • Envirnment Property 环境变量
  • Command Line argument 命令行参数
  • Application.properties 应用配置文件
  • Yaml properties 应用配置文件
  • other custom property sources 其它配置文件

引入

配置密钥

当然,这里只是演示,正常我们的密钥放在jenkins凭证中,启动jar包作为参数注入
其他方式:启动jar包参数注入密钥,使用环境变量注入密钥
正确的姿势:代码的各个地方存放一部分、引入的jar包中存放一部分、启动参数一部分,能分散就分散
如果公司项目使用,需要用到第三种正确的姿势

其他自定义操作(很重要)

上面说的是正常操作,满足不了我们的需要,jasypt支持的其他操作;
  • 自定义前缀后缀
  • 自定义加解密(希望换一种方式实现,就用自定义加解密,通过自定义类即成StringEncryptor,实现加解密方式即可)
  • 注意:spring管理的类有加载顺序,优先是配置类,然后其他按照顺序加载,上述自定义操作都是在项目启动的时候处理的,很有可能有的类没有加载,这个时候需要手动注入进去,个人推荐使用构造注入;注意避免出现spring解决不了的循环依赖
上一篇
_reindex 数据迁移|迁移索引
下一篇
Apollo本地缓存文件位置
Loading...
文章列表
王小扬博客
云原生
Git
Elasticsearch
Apollo
产品
Think
生活技巧
软件开发
计算机网络
CI
DB
设计
缓存
Docker
Node
操作系统
Java
大前端
Nestjs
其他
PHP