Dynaconf

本文详细介绍了Dynaconf配置管理工具的安装、使用、配置文件结构、参数校验、环境变量切换、秘密管理及Vault集成。通过示例展示了如何在Python项目中高效管理和安全存储敏感信息,确保不同环境下的配置一致性。
摘要由CSDN通过智能技术生成

1.安装

pip install dynaconf

2.进入项目,初始化配置文件

cd xxxx

dynaconf init -f toml  # 推荐使用toml格式配置文件,django推荐yaml格式(toml|yaml|yml|json|ini|py|env)
  • 初始配置文件如下:
. 

├── config.py    # 一个新的dynaconf设置对象实例被初始化和配置

├── .secrets.toml   # 比较敏感的配置信息例如:密码、token等

└── settings.toml   # 项目中要用到的配置信息
  • config.py
from dynaconf import Dynaconf 
settings = Dynaconf(
 	envvar_prefix="DYNACONF",
 	settings_files=['settings.toml',  '.secrets.toml'], 
)
  • .secrets.toml:存放敏感信息,建议在提交仓库前将该文件忽略,仅保留在本地使用
password = "s3cr3t" 

token = "dfgrfg5d4g56ds4gsdf5g74984we5345-" 

message = "This file doesn't go to your pub repo"
  • settings.toml:项目用到的配置参数信息
[default]
version = "1.0.0" 
age = 35 
name = "Bruno" 
DEV_SERVERS = ['127.0.0.1', 'localhost', 'development.com'] 
PORT = 8001 

[development]
name = "xiaoming"
port = 9000

3.在项目中使用

  • Dynaconf settings是一个类似字典的对象,它提供了多种访问变量的方法
from config import settings

print(settings.get('version')
print(settings['version'])
print(settings.version)
      
for key, value in settings.items():
    print(key, value)

4.校验配置文件参数信息

  • 1.在settings.toml文件同级新建文件dynaconf_validators.toml文件
[default]
age = {must_exist=true, gte=0, lte=120}

[development]
name = {must_exist=true}
port = {gte=5000, lte=9000}
  • 2.修改config.py
from dynaconf import Dynaconf

settings = Dynaconf(
    environments=True,  # 此处新增
    envvar_prefix="DYNACONF",
    settings_files=['settings.toml', '.secrets.toml'],
)
  • 3.启动项目前对配置文件进行校验
dynaconf -i config.settings validate

5.针对不同环境使用不同配置文件(即配置文件分层)

  • 1.修改config.py
settings = Dynaconf(environments=True, env="default")  # 指定默认使用default配置
  • 2.settings.toml文件根据section分层
[default] 
name = "" 

[development] 
name = "developer" 

[production] 
name = "admin"
  • 3.使用环境变量切换分层
> 	settings.name == ""  # 根据初始化对象中指定的环境default获取
> 
> export ENV_FOR_DYNACONF=development
>
> ​	settings.name == "developer"

> export ENV_FOR_DYNACONF=production
>
>​	settings.name == "admin"
  • 4.显示声明,切换环境变量
from config import settings


print(settings.current_env)

print(settings.name)

settings.setenv("production")  # 显示切换环境

print(settings.current_env)

print(settings.name)

6.secret

1. .secret.toml文件使用
  • .secret.toml:当environments=True启用时,机密文件,支持所有环境中支持定义设置文件。
password = "sek@987342$"
  • settings.toml
name = "admin"
  • config.py
settings = Dynaconf(
	envvar_prefix="DYNACONF",
	settings_files=['settings.toml', '.secrets.toml']
)
  • 此时settings对象可以同时获取到namepassword配置信息
from config import settings

print(settings.name)  # admin
print(settings.password)  # sek@987342$
  • 忠告:使用.secrets.*文件的原因是能够在提交到存储库时省略此文件,因此推荐的.gitignore应包含.secrets.*行。
2.使用 Vault 服务器,将重要信息放在服务器上
  • 使用docker快速运行一个Vault服务
docker run -d -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' -p 8200:8200 vault
  • dynaconf 中安装对 vault 的支持
pip install dynaconf[vault]
  • dynaconf配置vault认证信息
settings = Dynaconf(
    environment=True,
    vault_enabled=True,
    vault={'url': 'http://localhost:8200', 'token': 'myroot'} # recommended to keep as env var.
)
  • 使用myroot登录http://localhost:8200网络管理员并在/secret/dynaconf/< env >机密数据库下写入密钥
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 在项目中使用,不区分大小写,可以通过from_env显示切换环境
from config import settings

print(settings.password)  # 123@123
print(settings.from_env('developement').PASSWORD)  # abc@abc
  • 也可以使用终端命令行设置配置信息
# writes {'password': 123456} to secret/dynaconf/default
$ dynaconf -i config.settings write vault -s password=123456

# writes {'password': 123456, 'username': 'admin'} to secret/dynaconf/default
$ dynaconf -i config.settings write vault -s password=123456 -s username=admin

# writes {'password': 555555} to secret/dynaconf/development
$ dynaconf -i config.settings write vault -s password=555555  -e development

# writes {'password': 777777, 'username': 'admin'} to secret/dynaconf/production
$ dynaconf -i config.settings write vault -s password=777777 -s username=produser -e production

7. 友情提示

  • 初始化Dynaconf时如果设置了environments=True,则在配置文件中必须存在section分层,反之在配置文件中使用了section,则初始化Dynaconf时必须设置environments=True

8. Dynaconf Cli使用

  • list:查询

    dynaconf -i xview.conf.settings list -e development -k taskflow.celery_log_level | tail -1 | awk '{print $NF}' | sed $'s/\'//g
    
    • -i项目中dynaconf加载路径

      settings = Dynaconf(
      envvar_prefix=“DYNACONF”,
      settings_files=[‘settings.toml’, ‘.secrets.toml’]
      )

    • -e:使用哪个配置层级,即section分层
    • -k:要查询的key
    • 由于list查询返回的内容如下,所以需要对其进行解析

      Working in development environment
      TASKFLOW.CELERY_LOG_LEVEL<str> ‘info’

    • tail -1:取最后一行
    • awk '{print $NF}':取最后一列
    • sed $'s/\'//g:去掉字符串的'号,根据自己需要处理
  • write:写入

    dynaconf -i xview.conf.settings write -e development -v aliyun__password="xxxxx@123" -p /etc/xview/xview-api.toml toml -y
    
    • -i:同上
    • -e:同上
    • -s:添加到.secrets.toml配置文件中
    • -v:要添加的变量信息key=value
    • -p:添加到哪个配置文件中
    • toml:配置文件格式

9.参考文档

Dynaconf 快速入门

10.Dyanconf参考示例

example

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值