🗒️Apollo配置中心搭建

type
status
slug
date
tags
summary
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解决不了的循环依赖
上一篇
Apollo本地缓存文件位置
下一篇
Linux Github Token 长期使用
Loading...
文章列表
王小扬博客
Git
AI
产品
film
AI Code
Java
其他
计算机网络
DB
云原生
Node
Docker
操作系统
Elasticsearch
Apollo
Nestjs
Think
大前端
PHP
软件开发
设计
生活技巧
CI
缓存