发布于 2026-01-05 5 阅读
0

How to manage secrets and configs using dotenv in Node.js and Docker What is dotenv? Why should I use dotenv? How to setup dotenv in my project? Use dotenv-safe Use in Docker

如何在 Node.js 和 Docker 中使用 dotenv 管理密钥和配置

这是什么dotenv

我为什么要使用dotenv

如何dotenv在我的项目中进行设置?

使用dotenv-safe

在 Docker 中使用

这是什么dotenv

这是一个 JavaScript 包,它可以KEY=VALUE.env文件中读取数据(示例如下),并将每一对数据设置为环境变量。

// 1. Create a .env file:
DB_ADMIN_USERNAME=techbos
DB_ADMIN_PASSWORD=Pa$$w0rd

// 2. In your node app, load dotenv to read .env and set env variables when app starts
require('dotenv').config();

// 3. You can now use the env variables in your app
connectDatabase({
  username: process.env.DB_ADMIN_USERNAME, //techbos
  password: process.env.DB_ADMIN_PASSWORD, // Pa$$w0rd
});

我为什么要使用dotenv

dotenv它允许您将密钥与源代码分离。这在协作环境(例如工作或开源项目)中非常有用,因为您可能不想与他人共享数据库登录凭据。您可以共享源代码,同时允许其他人创建自己的.env文件。

它还可用于动态配置应用程序,而无需更改源代码。例如,您可以DB_URL为本地开发设置开发数据库。或者,如果您想在本地开发时将日志打印到控制台,但在生产环境中不打印,您可以这样做:

// .env file
ENV=dev

// in your app
if (process.env.ENV === 'dev') console.log(...);

对于部署到数百甚至数千个实例的实际应用程序,使用dotenv(或使用其他类似技术)可以让所有实例共享相同的源代码,同时每个实例都有不同的.env文件,以便它们可以使用不同的配置,例如连接到不同的数据库或将日志写入不同的端点。

如何dotenv在我的项目中进行设置?

1. dotenvNode.js 中的预加载

启动你的 Node 应用时,它会dotenv预加载 dotenv,这样你甚至不需要在源代码中引入 dotenv。

// use this
node -r dotenv/config index.js
// instead of
require('dotenv').config();

2. 添加.env.gitignore

永远不要.env在源代码控制系统中共享文件。相反,应该创建一个单独的私有仓库来存储你自己的.env文件,同时与他人共享其余的源代码。

//.gitignore
.env

3..env想创建多少个就创建多少个

通常会有多个.env文件。例如,一个用于开发环境,一个用于测试环境,一个用于生产环境。检出源代码后,复制.env适用于您环境的文件,然后启动应用程序。

3. 启动你的应用

// E.g., use with babel-node for local development
nodemon --exec babel-node -r node_modules/dotenv/config src/index.js
// E.g., run with node in production
node -r dotenv/config src/index.js

4. 在 Docker 中运行

// Dockerfile
CMD node -r dotenv/config ./build/index.js

使用dotenv-safe

一个很好的替代方案dotenvdotenv-safe,它与基本相同,dotenv区别在于它允许你创建.env.example文件。这有两个目的:

  1. 它允许你在示例文件中指定所有必需的环境变量。运行时,该软件包会检查.env文件是否定义了所有必需的变量,如果没有,则会抛出异常。
  2. 您可以.env.example与他人共享该文件,以便每个人都知道需要哪些环境变量。

在 Docker 中使用

在某些情况下,将.env文件构建到 Docker 镜像中被认为是一种不好的做法,因为如果镜像与他人共享,则密钥可能会泄露。

为了解决这个问题,你可以.env在运行时将文件映射到 Docker 容器中:

volumes:
  - /local/file/path/to/.env:/app/.env

另一种方法是使用env_fileDocker 选项。您可以在这里阅读更多信息。

文章来源:https://dev.to/getd/how-to-manage-secrets-and-configs-using-dotenv-in-node-js-and-docker-2214