dotenv-vault
快速入门 ⚡️
使用此快速入门指南,以 dotenv-vault 方式同步、管理和部署您的秘密。
初始设置
根据您选择的语言,在您的应用程序中安装必要的库。
npm install dotenv --save
编写应用程序代码。
// index.js
require('dotenv').config()
const PORT = process.env.PORT || 3000
const http = require('http')
const server = http.createServer((req, res) => {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end(`Hello ${process.env.HELLO}`)
})
server.listen(PORT, () => {
console.log(`Server running on port:${PORT}/`)
})
创建您的 .env
文件。
.env
# .env
HELLO="World"
运行您的应用程序。
node index.js
# visit https://127.0.0.1:3000
如果看到“Hello World”,则表示成功。
接下来,同步您的 .env
文件。
同步
推送和拉取您的 .env
文件的更改。首先创建您的项目的 env 保险库并对其进行身份验证。
npx dotenv-vault@latest new
npx dotenv-vault@latest login
安全地推送和拉取您的 .env 文件。
npx dotenv-vault@latest push
npx dotenv-vault@latest pull
就是这样!您已同步我们的 .env
文件。接下来,配置您的生产秘密。
管理
打开生产环境以编辑生产 HELLO
值。
npx dotenv-vault@latest open production
编辑 HELLO
值,以便您的生产秘密将呈现为 Hello production
。
看起来不错。接下来,使用您的加密 .env.vault
文件部署您的生产秘密。
部署
首先构建您项目的加密 .env.vault
文件。它会以云不可知的方式安全地加密您的秘密。
npx dotenv-vault@latest build
将它安全地提交到代码库。
git add .env.vault
git commit -am "Build encrypted .env.vault file for deploy"
是的,将 .env.vault
文件提交到代码库是安全和推荐的做法。它包含您环境秘密的 AES-256 GCM 加密密码,这些密码使用环境 DOTENV_KEY
进行即时解密。
获取您的生产解密密钥 - DOTENV_KEY
- 以解密您的 .env.vault
文件。
npx dotenv-vault@latest keys production
这将输出您的生产 DOTENV_KEY
。使用该 DOTENV_KEY
以生产模式运行您的应用程序。
DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production' node index.js
# visit https://127.0.0.1:3000
如果看到日志消息 Loading env from encrypted .env.vault
,则表示运行正常。
$ hello-world: DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production' node index.js
[[email protected]][INFO] Loading env from encrypted .env.vault
Example app listening on port 3000
就是这样!DOTENV_KEY
会解密 .env.vault
的生产内容,并在您的运行进程中及时注入其秘密。
结论
恭喜!现在您了解了 .env.vault
的工作原理。这比将您的秘密同步到第三方更安全,因为第三方可能会泄露您的秘密。 CircleiCi 不久前就发生了秘密泄露事件。.env.vault
可以保护您免受此类泄露。攻击者必须同时获得您的 DOTENV_KEY
和您的代码库。这要困难得多。
此外,您现在拥有一个易于管理的单一事实来源。在 UI 中进行更改,运行构建命令,然后重新部署。减少处理秘密的时间,更多地投入代码编写。
剩下的就是设置生产服务器上的 DOTENV_KEY
并部署您的代码。
例如,在 heroku 上,它就像下面这样简单
$ heroku config:set DOTENV_KEY='dotenv://:[email protected]/vault/.env.vault?environment=production'
常见问题
如果 DOTENV_KEY
未设置会发生什么?
它会优雅地回退到从您的 .env
文件中加载。这是开发的默认行为,以便您可以专注于编辑您的 .env
文件,并在准备好部署这些环境变量更改时再保存 build
命令。
我应该提交我的 .env
文件吗?
不。我们强烈建议您不要将您的 .env
文件提交到版本控制。它应该只包含环境特定的值,例如数据库密码或 API 密钥。您的生产数据库应该与您的开发数据库具有不同的密码。
我应该提交我的 .env.vault
文件吗?
是的。这样做是安全和推荐的做法。它包含您的加密环境和您的保险库标识符。
我可以共享 DOTENV_KEY
吗?
不。它是用来解锁您加密的环境变量的密钥。请务必小心与谁共享此密钥。不要让它泄露。