使用哪种文件格式存储你的Settings和Secrets?
· 3 min read
在我们日常开发中,不可缺少地设计到配置和私密信息的管理,主要区别如下:
- Settings: 配置信息,以明文方式存在,如应用名称,映射路径,维护人员信息等
- Secrets: 私密信息,如数据库密码,API Key等,这些信息需要加密存储
目前来说,主要有以下几种文件格式来保存这两者信息:
.env
文件: 这是最常见的配置文件格式,也是Twelve-factor App - Config推荐的做法application.properties
文件:Java程序员在熟悉不过啦,应用的基本信息,数据库、Redis、API Key等,这些都可以放在这个文件中YAML
文件:很多云原生应用都会采用YAML文件格式来保存配置和私密信息,在Kubernetes中,ConfigMap和Secret都是YAML格式JSON
文件:很多前端应用和Node.js应用,都会采用JSON格式保存相关的配置TOML
文件:Rust语言的配置文件格式,很多Rust应用都会采用TOML格式保存配置,如mise的mise.toml
文件INI
文件:很多传统的应用,尤其是C/C++应用,都会采用INI格式保存配置
对于Dotenvx采用非对称加密的方案来说,一个典型的配置文件主要包括以下信息:
- Front Matter: 保存元信息,如UUID,group,name,profile等,还包括签名信息
- Public Key: 用于加密配置项的公钥
- Variables: 配置项,key-value格式,value可以是明文,也可以是加密的,也就是同时包括Settings和Secrets
上述的几种文件格式都是能够承载Dotenvx需要的这些信息,但是考量到便捷性,目前来说可能还是.env
文件格式比较好的。
主要是基于以下几个考量:
- 语言的通用性:
.env
目前来说还是最强的,几乎所有的语言都有对应的SDK - 上手成本:
.env
文件格式非常简单,key-value格式,对Dotenvx来说,就是增加注释的front matter和public key部分 - 编辑器支持:也是主流编辑器和IDE都支持
.env
文件格式
但是也不代表.env
就能满足所有的需要,如没有数据格式支持,层级结构比较麻烦,如需要使用__
双下划线自行实现,
这个也是为何Pkl收到很多同学的关注。
当然一些配置项还是和框架密切相关的,如Spring Boot的application.properties
和application.yml
,这些都是框架约定的,
但是综合下来,目前.env
文件确实是配置和私密信息的最佳选择,这也是12原则推荐的。