Skip to main content

使用哪种文件格式存储你的Settings和Secrets?

· 3 min read
Libing Chen
Java程序员,兼全栈、Rust和AI开发

在我们日常开发中,不可缺少地设计到配置和私密信息的管理,主要区别如下:

  • 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格式保存配置,如misemise.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.propertiesapplication.yml,这些都是框架约定的, 但是综合下来,目前.env文件确实是配置和私密信息的最佳选择,这也是12原则推荐的。