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

www.dotenv.org

看起来不错。接下来,使用您的加密 .env.vault 文件部署您的生产秘密。

部署

首先构建您项目的加密 .env.vault 文件。它会以云不可知的方式安全地加密您的秘密。

npx dotenv-vault@latest build

将它安全地提交到代码库。

git add .env.vault
git commit -am "Build encrypted .env.vault file for deploy"

获取您的生产解密密钥 - 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 吗?

不。它是用来解锁您加密的环境变量的密钥。请务必小心与谁共享此密钥。不要让它泄露。