mise如何集成Dotenvx做环境变量管理?
不少同学在使用mise作为项目开发工具,但是mise的Secret管理有点复杂,当然不少同学可能会选择sops,
可能还不是那么便捷,门槛也比较高一些。那么能否让Dotenvx来管理mise的环境变量呢?
这样既可以做到.env
文件同时可以被mise和应用程序使用,同时关键配置中的敏感数据还是加密的。
那么如何做到这一点呢?
不少同学在使用mise作为项目开发工具,但是mise的Secret管理有点复杂,当然不少同学可能会选择sops,
可能还不是那么便捷,门槛也比较高一些。那么能否让Dotenvx来管理mise的环境变量呢?
这样既可以做到.env
文件同时可以被mise和应用程序使用,同时关键配置中的敏感数据还是加密的。
那么如何做到这一点呢?
ECIES(椭圆曲线集成加密方案)是一个基于椭圆曲线密码学(ECC)的混合加密框架,它将密钥协商、对称加密和消息认证码(MAC)等过程“集成”起来,用于在公钥接收者处对数据进行加密。 ECIES加密方案采用ECC加密(公钥密码系统)+ 密钥派生函数 ( KDF ) + 对称加密算法 + MAC算法。 ECIES本身不是一个具体的算法,而是一个集成的加密框架,提供了多种标准和实现选择,允许用户将不同的椭圆曲线算法、密钥派生函数(KDF)和对称加密算法组合使用,以实现数据加密和解密。
ECIES 的工作原理:
对接过微信支付的同学,应该都知道微信支付的配置还是有点麻烦的,这里以API证书认证模式为例, 来说明一下如何在Spring Boot中集成Dotenvx,保护你的微信支付配置项。
微信支付API证书认真模式,其中一个比较麻烦的就是如何保存和加载RSA私钥。RSA PRIVATE KEY是一个pem格式的文本文件, 通常我们会将其保存为一个文件,然后通过文件路径加载,如果线上部署的话,那么你需要将该文件上传到服务器上,并且保证该文件的权限安全。
pem文本,其实是可以保存到.env
和properties
文件中的,你做好格式转换即可,其实就是添加\n
换行符即可,但是有一个问题,
就是你要保证配置文件的安全性。
借助Dotenvx,我们就可以轻松地处理这个问题,这里假设你已经安装了Dotenvx JetBrains plugin,
我们只需要新建一个application.properties
文件,然后按下macOS: ⌘N
或Windows/Linux: Alt+Insert
快捷键,调出Generate
菜单,然后选择Insert Public Key
,
为当前application.properties
文件添加公钥,然后我们就可以添加加密变量了。
RSA和ECDSA这两者都是非对称加密(公钥密码学)中至关重要的算法,但它们在原理、效率、安全性和应用场景上有着显著的不同。
特性 | RSA | ECDSA |
---|---|---|
数学基础 | 大整数质因数分解的困难性 | 椭圆曲线离散对数问题 (ECDLP) 的困难性 |
密钥类型 | 用于签名和加密(理论上) | 仅用于签名和认证,不能用于加密 |
密钥尺寸 | 大(2048-4096位是当前标准) | 小得多(256-521位提供同等安全) |
性能 | 签名生成慢,验证较快 | 签名生成快,验证速度与RSA相当或略慢 |
计算开销 | 高(处理大整数模幂运算) | 低(在有限域上进行点运算) |
标准化 | 较早,应用极其广泛 | 较新,但已成为现代TLS证书的主流选择 |
典型应用 | 传统Web安全、SSH、邮件加密、数字证书 | 区块链(比特币、以太坊)、现代TLS证书、移动设备 |
Dotenvx JetBrains插件发布了0.1.10版本,该版本增加了一个非常实用的功能:粘贴(paste)即加密(encrypt)。
在实际的开发中,我们经常需要将一些敏感的信息,如数据库密码、API Key等,粘贴到.env
文件中,如果直接粘贴,可能会导致敏感信息泄露的问题,
要知道AI Agent是会监听文件变更的。
Stela是Python生态中一个非常流行的配置管理框架,让管理明文和加密的配置变得非常简单。 Stela的一些设计理念还是非常不错的,主要包括:
这些和Dotenvx的设计也是一致的,profile优先,.env
或者application.properties
文件中,未加密的配置项基本都是非敏感数据,如应用名称等,
而加密的主要是敏感数据,如数据库密码等。
Nacos和Apollo(阿波罗)是国内Java开发人员在开发Spring Cloud应用时,
常用的配置中心和服务注册发现解决方案,当然之前我也是其用户之一,主要是用来管理Spring Cloud应用的配置。
但是伴随着Dotenvx的出现,我们还有必要使用Nacos和Apollo的配置中心功能吗? 当然Nacos和Apollo还有服务注册发现的功能,如Nacos目前非常关注MCP注册发现,
这里我们不讨论花毛一体
的设计和AI的能力,这里我们着重讨论一下配置中心的功能,对于服务注册发现的能力,这个也有很多的候选产品,如Eureka等。
配置(Config)是应用非常核心的部分,也是Spring Cloud的核心部分,很多开发人员都在应用中集成过Config Server,也包括Vault这款KMS产品。
Josh Long在This Week in Spring - September 2nd, 2025推荐了dotenvx-spring-boot, 在文中还有一篇非常好的ppt,就是12-Factor Apps with Spring Boot,
this is really cool - a mechanism to load configuration into Spring Boot using Dotenvx Andrew Fawcett gave a nice talk looking at building 12-factor applications with Spring Boot at Spring I/O 2025.
所以我们来看一下如何在Spring Boot中集成Dotenvx。
Andrew Fawcett的演讲中谈到,12-Factor App的Config配置项,在Spring Boot中也非常容易实践,如下:
至少我个人也是遵循这样的做法,有条件的话就上Vault或者其他Config Server,没有条件的个人项目,就使用.env
文件进行环境变量暴露。
dotenvx-rs非常轻巧,大小目前在4M左右,鉴于使用Rust编写,虽然功能多,但是编译后体积还是比较小巧的, 在Ops运维、脚本集成等方面,优势都非常明显。
但是在日常开发中,大家还是比较喜欢实用SDK方式,如dotenv,基本上都是通过SDK集成的方式来加载配置的。
.env
文件格式非常简单,基本上就是KEY=VALUE
的格式,所以其对应各语言SDK也都非常轻巧,基本上都在20K以下。
但是dotenvx就有些不同啦,除了要解析.env
文件外,还要进行解密操作,所以各语言SDK的体积就大非常多,
这里列举一下各语言Dotenvx SDK的体积,供大家参考:
.env
文件在Node.js和Python等语言中被广泛使用,主要用于存储应用程序的配置参数,如数据库连接信息、API密钥等。
目前dotenvx已经支持这些语言的SDK,可以非常方便地集成dotenvx的加密特性,但是这种方式还是有一些不便之处,
如会让Node.js和Python的项目增加额外的依赖包,导致应用变大,内存消耗增加,这点对Node.js尤为明显,
为了解密一个.env
文件,然后加载为环境变,但是要付出这么多的代价,似乎不太划算。
此外做一些demo项目时,也有些偷懒,还需要增加额外的开发包,还是觉得有点麻烦,那么能否有一种更简单的方式呢?
这个可能就要从语言的SDK着手啦,能否让语言SDK天生就支持dotenvx特性呢?就像一些SDK,天生就支持.env
一样,这样岂不是更方便一些。
那么能否做到让语言SDK天生支持dotenvx呢?从语言层面来说,可能有点麻烦,但是我们可以通过外部的管理工具做到这一点。
目前来说,Python的项目管理工具为uv,不但可以管理Python SDK,虚拟环境,开发包等,基本上涵盖了Python项目的方方面面, 可以说uv是Python社区标准的项目工具。 Node.js也有相关的SDK工具,那就是Volta,Volta可以管理Node.js的版本,工具等。 接下来我们就看一下如何结合uv和Volta来实现让Python和Node.js天生支持dotenvx特性。