前言
apollo(阿波罗)是携程开源的分布式配置管理中心。
本文主要介绍其基于 docker-compose 的部署安装和一些使用的经验
特点
成熟,稳定
支持管理多环境/多集群/多命名空间的配置
配置修改发布实时(1s)通知到应用程序
支持权限控制、配置继承,版本管理,灰度发布,使用监控等
官方提供了 。net/java/go 的 sdk 以及 http 接口
国产中文,文档友好,大厂背书,使用方案成熟
使用简单,支持 docker , k8s,官方也提供多种高可用方案参考
使用情况
目前在微服务项目中做为配置中心,表现稳定,体验良好
内存情况:新安装启动在 100m 左右,工作中实际 20 项目,80 客户端使用时,三个服务占 1.5g 左右
测试环境和生产环境分开,安全及避免错误操作
为什么选择 apollo:稳定&简单,虽然比不上 nacos 的性能,也没有服务发现功能,但是稳定啊!!!
在我自己部署前,会觉得这个东西好难,好重,好麻烦。写这篇文章的时候的感受只有两个字:牛*
实践
准备
当前版本:v2.1
apollo-db:mysql 5.6.6+ 数据库
默认端口:3306
依赖两个数据库:apolloportaldb,apolloconfigdb
默认账号/密码:apollo/admin
apollo-configservice:config service 提供配置的读取、推送等功能。
默认端口:8080
应用程序端连接到此服务使用
apollo-adminservice: admin service 提供配置的修改、发布等功能
默认端口:8090
管理界面使用此服务
apollo-portal:portal 提供 web 界面用来管理配置
默认端口:8070
web 管理界面
默认账号/密码:apollo/admin
deureka:提供服务注册和发现
config service 和 admin service 会向 eureka 注册服务,并保持心跳
在 admin service 需要指定 eureka.service.url
服务配置方式的优先级从高到低分别为:系统参数>环境变量>外部配置文件
使用 docker compose 安装
本篇文章基于 docker v24 及 docker compose v2,安装可以参考之前的文章
配置说明
挂载了日志文件到。/logs 目录
固定了镜像版本 mysql v5.7 , apollo v2.1.0
指定 mysql 账号密码: root devops666 ,修改了端口映射 13306:3306
挂载 mysql 数据,初始化脚本文件夹 。/initsql(v2.1 脚本)
apollo 服务中使用服务名 apollo-db 连接 mysql:spring_datasource_url:'...apollo-db:3306/...'
设置先启动数据库:depends_on:apollo-db
apollo-configservice 服务中指定向 deureka(apollo 服务发现组件)注册的地址:http://192.168.123.214:8080
apollo-adminservice 服务中指定向 deureka 注册的服务地址:http://192.168.123.214:809
apollo-adminservice 服务需指定 deureka 服务地址:-deureka.service.url=``http://192.168.123.214:8080/eureka/
指定网络:devopsnetwork (docker network create devopsnetwork)
web 管理端默认账号密码:apollo admin,登录后修改!!!
配置文件 compose.yml
准备好 compose.yml 及 。/initsql/初始化脚本,修改其中的 ip
拷贝到服务器
然后运行docker compose up -d即可
version: '3.1' services: # apollo数据库 apollo-db: image: mysql:5.7 container_name: apollo_db_5_7 restart: always environment: tz: asia/shanghai mysql_root_password: 'devops666' ports: - 13306:3306 volumes: - ./initsql:/docker-entrypoint-initdb.d - ./data:/var/lib/mysql networks: - devopsnetwork # apollo 服务发现注册中心 apollo-configservice: container_name: apollo_configservice_2_1 image: apolloconfig/apollo-configservice:2.1.0 restart: always depends_on: - apollo-db environment: spring_datasource_url: 'jdbc//apollo-db:3306/apolloconfigdb?characterencoding=utf8' spring_datasource_username: 'root' spring_datasource_password: 'devops666' java_opts: -deureka.instance.homepageurl=http://192.168.123.214:8080 # eureka_instance_home_page_url: http://192.168.123.214:8080 # eureka_instance_prefer_ip_address: false volumes: - ./logs:/opt/logs ports: - 8080:8080 networks: - devopsnetwork #核心接口服务 apollo-adminservice: container_name: apollo_adminservice_2_1 image: apolloconfig/apollo-adminservice:2.1.0 restart: always environment: spring_datasource_url: 'jdbc//apollo-db:3306/apolloconfigdb?characterencoding=utf8' spring_datasource_username: 'root' spring_datasource_password: 'devops666' java_opts: -deureka.instance.homepageurl=http://192.168.123.214:8090 -deureka.service.url=http://192.168.123.214:8080/eureka/ depends_on: - apollo-db ports: - 8090:8090 volumes: - ./logs/:/opt/logs networks: - devopsnetwork apollo-portal: image: apolloconfig/apollo-portal:2.1.0 container_name: apollo_portal_2_1 restart: always environment: spring_datasource_url: 'jdbc//apollo-db:3306/apolloportaldb?characterencoding=utf8' spring_datasource_username: 'root' spring_datasource_password: 'devops666' apollo_portal_envs: 'dev' dev_meta: 'http://192.168.123.214:8080' # 默认账号 apollo admin depends_on: - apollo-db ports: - 8070:8070 volumes: - ./logs/:/opt/logs networks: - devopsnetwork networks: devopsnetwork: external: true ``` 部署成功
部署机器ip:192.168.123.214
使用 k8s 安装
跟着官方文档一步步来即可,helm 的文件可以从 apolloconfig/apollo-helm-chart 获取,这里只分享下步骤和些注意的地方
初始化数据库
可以使用已有或者部署 mysql 服务,并创建 apollo 专门的账号密码
执行 apollo 对应版本的 v2.1 默认初始化脚本 创建 apolloconfigdb,apolloportaldb
生产环境 记得修改 serverconfig 表的 环境和组织apollo.portal.envs:pro organizations:[{orgid:xxx,orgname:xxx公司}]
使用 helm 添加 apollo repo
安装 apollo-service
安装 apollo-portal
k8s 使用
可以将 apollo 相关配置存储到 k8s 的 configmap 中方便 k8s 服务中使用
使用
.net sdk
官方:com.ctrip.framework.apollo.configuration
添加包:com.ctrip.framework.apollo.configuration
appsetting.json 中添加 apollo 配置
metaserver:apollo 服务地址,系统信息中也可以查看到
appid:应用 id
namespaces:命名空间默认是 application
获取参数注册:可以是配置,也可以是从环境变量中
builder.configuration.addapollo(builder.configuration.getsection(apollo));
注入 iconfiguration 使用即可
连接配置
apollo: { metaserver: http://192.168.123.214:8080, appid: devops.test, namespaces: [ application ] }
demo 示例
dotnet v7.0
var builder = webapplication.createbuilder(args)builder.configuration.addapollo(builder.configuration.getsection(apollo))app.mapget(/config, context =>{ context.response.headers[content-type] = text/html //配置服务 var configservice = context.requestservices.getrequiredservice() string? key = context.request.query[key] if (string.isnullorwhitespace(key)) { return context.response.writeasync(获取配置:/config?key=test); } var value = configservice[key]; return context.response.writeasync(value undefined);}); 完整 demo 示例 :github 地址
踩过的坑
数据库配置连接,使用服务名,而不是容器名
-deureka.instance.homepageurl 和 -deureka.service.url 参数一开始没有理解到是做什么的,只知道配置健康检查失败,看了文档才理解到是 deureka.instance.homepageurl 是注册的服务地址,-deureka.service.url 是注册中心的接口地址
后语
时间充裕的情况最好是过一遍文档,知道是怎么设计的,遇到问题真会一头雾水。
英国医学教育平台FundamentalVR增加了眼科手术培训项目
VDA全场应变测量仪,助力材料测试研发
Realme的智能手表可能会威胁到小米的各种优惠
最后的顶级旗舰机Mate 40:背水一战的华为将去何方?
苹果13promax256价格多少
基于Docker-Compose的Apollo部署安装与使用
合适的电源可以简化汽车ECU设计
英伟达将在下周正式发布RTX 3060 Ti显卡
年尾季iPhone销量能达7400万部?iPhone7 Plus成香饽饽
自动驾驶又有纠纷案,自动驾驶赛道为什么会是这样子?
新致态PC005 Active系列正式上架,高性能疾速启航
损坏的器件不要丢,要做失效分析!
灵动微电子的MCU产品MM32F系列介绍
VS-10-C-2-3倾角传感器的基本常识
台积电28nm工艺量产十年依然受追捧
能实现现代化物流企业管理的智慧物流方案
单相交流电机的使用与噪音测试的说明
头戴式蓝牙耳机哪款比较好用,高清音质蓝牙耳机的推荐
陶景文分享华为数字化转型实践方案
LED智能车灯关于ADB与AFS光学设计