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
对象可以同时获取到name
和password
配置信息
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
:配置文件格式