介绍
Python读取配置参数通常使用处理yaml, conf配置文件和env环境变量,这种配置方式比较方便本地加载,在微服务分布式部署时对这些配置需要集中管理,并支持热更新则引入了Apollo Apollo(阿波罗) 是一款可靠的分布式配置管理中心,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行 Apollo的优点如下:- 部署简单
- 灰度发布
- 版本发布管理
- 提供开放平台API
- 客户端配置信息监控
- 配置修改实时生效(热发布)
- 权限管理、发布审核、操作审计
- 统一管理不同环境、不同集群的配置
安装部署
我们采用 Docker-Compose 方式来启动 Apollo ,参考Github项目 apollo-quick-start 中给出的介绍,可以方便地在本地启动 Apollo 。 下载 docker-compose.yml 和 sql 文件夹 到本地目录- docker-quick-start
- docker-compose.yml
- sql
- apolloconfigdb.sql
- apolloportaldb.sql如果使用的是 arm 架构的机器,例如 mac m1,需要下载docker-compose-arm64.yml
docker-compose -f docker-compose-arm64.yml up -d如果是其他架构的机器,如x86,则直接启动
docker-compose up -d启动成功后,会默认启动一个MySQL数据库端口映射为13306,和一个apollo服务端,在浏览器中输入本地网址localhost:8070打开Apollo配置页面,账号apollo,密码admin
使用
参考 使用指南- 创建应用
- 新增配置(客户端需要使用的配置变量和值)
- 发布配置
- 管理秘钥并启用秘钥
- 客户端连接apollo读取配置
pip install apollo-client==2.1.2使用python读取apollo中以上配置
# -*- coding: utf-8 -*- from pyapollo.apollo_client import ApolloClient app_id = "128" config_server_url = "http://192.168.110.128:8090" authorization = "f3ea9013c53b468bb749eb586a41a74a" cache_file_path = 'my_apollo_config' env = 'DEV' namespace = 'application' cluster = 'default' client = ApolloClient( app_id=app_id, cluster=cluster, config_server_url=config_server_url, authorization=authorization, # cache_file_path=cache_file_path, env=env ) client.start() # print(client.__dict__) # get config from apollo MINIO_SECRET_KEY = client.get_value(key="MINIO_SECRET_KEY", default_val="*", namespace=namespace) MINIO_ACCESS_KEY = client.get_value(key="MINIO_ACCESS_KEY", default_val="**", namespace=namespace) MINIO_URL = client.get_value(key="MINIO_URL", default_val="***", namespace=namespace) timeout = client.get_value(key="timeout", default_val="*****", namespace=namespace) qc_dict = client.get_value(key="qc_dict", default_val="*****", namespace=namespace) is_delete = client.get_value(key="is_delete", default_val="*****", namespace=namespace) a = client.get_value(key="a", default_val="*****", namespace=namespace) print(MINIO_SECRET_KEY, type(MINIO_SECRET_KEY)) print(MINIO_ACCESS_KEY, type(MINIO_ACCESS_KEY)) print(MINIO_URL, type(MINIO_URL)) print(qc_dict, type(qc_dict)) print(timeout, type(timeout)) print(is_delete, type(is_delete)) print(a, type(a))结果输出:
admin <class 'str'> admin123 <class 'str'> 192.168.110.237:9000 <class 'str'> { "a":"qqqq", "b":123456 } <class 'str'> 10 <class 'str'> false <class 'str'> ***** <class 'str'>
从apollo中读取的配置与通过使用os.getenv()方式获取环境变量方式值类型相同,都是字符串类型
项目中应用
项目中不是在启动项目时docker-compose文件中配置的变量如镜像号和部署路径等,在项目中使用的环境变量值可以使用apollo来集中管理处理 比如如下docker-compose文件中environment中的可以使用apollo来替换version: '3' services: data_manage: image: ${DATA_MANAGE_IMAGE} restart: always container_name: data_manage ports: - "8802:8000" environment: POSTGRES_HOST: ${POSTGRES_HOST} POSTGRES_PORT: ${POSTGRES_PORT} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} REDIS_HOST: ${REDIS_HOST} REDIS_PORT: ${REDIS_PORT} PYENV: ${PYENV} volumes: - /etc/localtime:/etc/localtime - ${DEPLOY_DIR}/logs/datamanage:/app/DataManage/logs
在项目中使用pyapollo模块连接apollo服务端,在需要读取某个配置值直接从apollo中获取该配置 需要使用分布式部署apollo服务端以保证服务高可用稳定性,否则apollo宕时影像整个项目无法使用 标签:Apollo,MINIO,配置管理,配置,namespace,client,工具,apollo,POSTGRES From: https://www.cnblogs.com/Mr-shen/p/18245537