快速上手
首先我们要安装Dotenvx命令行工具,该工具采用Rust编写,小巧、快速,支持多种平台。
- MacOS:
brew install linux-china/tap/dotenvx-rs
- 脚本安装:
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/linux-china/dotenvx-rs/releases/download/v0.3.1/dotenvx-rs-installer.sh | sh
- Rust安装:
cargo binstall dotenvx-rs
安装完毕后,执行dotenvx --version
命令,查看是否安装成功。
为项目添加dotenvx支持
无论你项目是否已经包含.env
文件,你都可以使用dotenvx init
命令来为项目添加dotenvx支持。
该命令执行后,会在项目目录下创建或者更新.env
文件,在.env
文件会添加Front Matter元数据,
同时增加DOTENV_PUBLIC_KEY
配置项,该变量是用于加密和验证签名的公钥。 .env
文件样例如下:
# ---
# uuid: f7580ac5-0b24-4385-b3ff-819225b687f3
# name: input your name here
# group: demo
# ---
DOTENV_PUBLIC_KEY="02b4972559803fa3c2464e93858f80c3a4c86f046f725329f8975e007b393dc4f0"
# Environment variables. MAKE SURE to ENCRYPT them before committing to source control
HELLO=encrypted:BNexEwjKwt87k9aEgaSng1JY6uW8OkwMYEFTwEy/xyzDrQwQSDIUEXNlcwWi6rnvR1Q60G35NO4NWwhUYAaAON1LOnvMk+tJjTQJaM8DPeX2AJ8IzoTV44FLJsbOiMa77RLrnBv7
此外还会在项目的目录下创建.env.keys
文件,该文件用于存储加密的私钥,样例如下:
# ---
# uuid: 8499c5c3-cee3-4c94-99a4-9c86b2ed5dd9
# name: input your name here
# group: demo
# ---
# Private decryption keys. DO NOT commit to source control
DOTENV_PRIVATE_KEY=9e70188d351c25d0714929205df9b8f4564b6b859966bdae7aef7f752a749d8b
注意: dotenvx会对.env
文件进行加密和签名,安全性高,所以你完全可以放心地将.env
文件提交到git仓库中,
你不需要再使用第三方系统来管理配置,配置和代码存放在一起,维护成本更低,也方便团队成员之间共享配置,同时完成了配置的变更跟踪。
添加并加密配置项
你可以直接编辑.env
文件,然后调用dotenvx encrypt
命令来加密配置项。也可以通过命令行dotenvx set KEY VALUE
来添加配置项。
技巧: 在.env
文件添加复杂的配置项时,如配置项为一个json/yaml文件,或者pem格式的证书等,
你可以使用echo file_name | dotenvx set --encrypt KEY -
命令将该文件加密并保存到.env
文件中,再也不用担心这种多行复杂的配置项值啦。
如果你要查看该配置项的值,使用dotenvx get --format text KEY
命令即可。
解密配置项
.env文件的配置项被加密后,你可以安全地提交到Git仓库中,或者通过微信等IM工具发送给其他人,不用再担心这些IM工具会泄露你的配置项, 或者对方手机可能被黑客或者恶意软件感染,导致配置项泄露,这些都不用担心啦。
那么如何解密这些配置项呢?你可以使用dotenvx decrypt
命令来解密.env
文件中的配置项,默认会读取该目录下的.env.keys
文件,
获取私钥进行解密。 你可以可以通过制定DOTENV_PRIVATE_KEY
环境变量来指定私钥,这种方式通常用在容器部署的环境中。
如何规划和安全地保存你的私钥
私钥(private key)在任何非对称加密中都是非常重要的,它是解密加密数据的关键,所以你需要更加小心地管理它。 dotenvx提供了以下几种方式来管理和保存私钥:
全局秘钥
通过dotenvx init --global
命令来,dotenvx会创建$HOME/.env.keys
文件,该文件会默认保存几种环境对应的秘钥。
如果你不需要为每一个项目都分配特定的私钥,那么你可以使用全局秘钥,这样就不需要为每一个项目创建.env.keys
文件了。
在项目目录下,你只需要执行dotenvx -f .env set KEY VALUE
命令即可,dotenvx会自动使用全局秘钥来加密配置项。
全局秘钥的好处在于使用非常简单,不同的环境有不同的私钥,你只需要在全局秘钥文件中添加对应的私钥即可。 对应小型团队,或者产品线内部,全局秘钥是非常方便的。
注意事项: 考虑到全局秘钥的安全性,如一些恶意软件可能会读取$HOME/.env.keys
文件,你可以考虑在不需要使用这些秘钥时,
使用dotenvx --seal
命令对其进行加密后密封处理,会生成一个.env.keys.aes
文件,使用AES256加密。
一定要记住文件加密的密码,不然真的无法解密了。
项目秘钥
通过dotenvx init
命令来,dotenvx会在项目目录下创建.env.keys
文件,用于管理项目的私钥。
不同的项目环境,如dev, prod等,对应的秘钥也各部相同,这些私钥会存储在.env.keys
文件中。
如果你的项目安全级别要求比较高,那么你可以为每个项目的每一个环境都创建独立的私钥,这样就可以确保每个项目不同环境的配置项都是独立加密的, 可以做到更高的安全性。