如何使用dotenvx实现开发环境与线上环境等价?
· 2 min read
在软件开发12要素之开发环境与线上环境等价一篇中, 我们可以得知要尽可能的保持开发,预发布,线上环境相同,但是要做到这一点,困难还不小。
从以往经验来看,开发环境(即开发人员的本地部署)和线上环境(外部用户访问的真实部署)之间存在着很多差异,
其中一个非常重要的差异就是配置。在开发人员的本地部署环境中,我们通常会使用本地的配置文件,如.env或者application.properties,
鉴于开发环境的配置私密性要求不高,如root用户名,123456为密码,这些关系也不大,所以这些文件都是直接提交到git仓库中。
但是线上环境就不一样啦,我们并不能将线上环境的私密信息直接写到文件中,我们需要借助Config Server或者秘钥管理系统, 从远程服务中获取配置,然后转换为本地配置文件或者环境变量,或者注入到应用的框架中,如Spring Cloud等, 这样就可以保证线上环境的一定安全性,同时也能保证应用的正常启动。
上述的情况,就是不同环境割裂的原因,也是为何尽量保持环境相同的难点。要想做到各个环境的差异最小,我们看一下dotenvx如何做到的。
dotenvx采用非对称加密机制,也就是不同的环境的配置使用不同的秘钥,那么区分不同的环境,只需要不同的钥匙即可,其他的都不用关心。 不同的环境的配置,私密数据都会被加密,然后提交到git仓库,你不再担心存储的问题,配置变更版本的问题,当然也不同担心安全的问题。
当应用部署到不同的环境时,我们只需要设置APP_ENV和DOTENVX_PRIVATE_KEY_XXX这两个环境变量,其他的完全不用关注,
环境的统一性就非常容易保证,环境的切换只需要更改一把钥匙。