PM2 如何配置 Node.js 应用的环境变量

阅读时长 6 分钟读完

在开发 Node.js 应用过程中,我们经常需要设置一些环境变量,比如数据库连接信息、端口号等等。而在生产环境下,为了保护这些敏感信息,我们通常会将它们保存在环境变量中,而不是硬编码在代码中。因此,如何在不同的环境中设置不同的环境变量就成了非常重要的问题。

这时候,我们就需要使用 PM2 来管理 Node.js 应用的环境变量。PM2 是一个流行的进程管理工具,可以用来启动、停止、重启、监控 Node.js 应用。它的特点是可以在生产环境下运行应用,并且可以配置多个不同的环境。

配置环境变量

在使用 PM2 管理 Node.js 应用之前,我们需要先了解一下 PM2 的环境变量配置。

.env 文件

我们可以在项目根目录下新建一个名为 .env 的文件,用来存放环境变量。这个文件一般不会被提交到 Git 中,以保护敏感信息。示例如下:

应用代码中使用环境变量

在应用代码中,我们可以使用 process.env 对象来访问环境变量。示例如下:

使用 cross-env 设置环境变量

在本地开发环境中,我们可以使用 cross-env 库来设置环境变量。

首先,安装 cross-env:

然后,在 package.json 文件中,修改启动命令:

在这个例子中,我们将 NODE_ENV 环境变量设置为 "production"。这个命令会在控制台输出 "NODE_ENV=production node app.js",然后使用 cross-env 来设置环境变量。

在 PM2 中配置环境变量

了解了环境变量的配置后,我们来看一下如何在 PM2 中配置环境变量。

设置环境变量值

在命令行中,我们可以使用 --env 参数来设置环境变量。示例如下:

这个命令会在启动应用时将 NODE_ENV 环境变量设置为 "production"。如果我们没有设置 --env 参数,那么 PM2 默认会将环境变量设置为 "development"。

在 ecosystem.config.js 文件中配置环境变量

在生产环境下,我们可能需要配置多个环境变量,这时候一个一个地在命令行中输入就不太方便了。可以使用 PM2 的配置文件来管理环境变量。配置文件是一个 JavaScript 文件,可以使用 CommonJS 或 ES6 的模块语法,通常命名为 ecosystem.config.js

首先,在 ecosystem.config.js 文件中定义一个 env 对象,用来存放环境变量的值:

-- -------------------- ---- -------
-------------- - -
  ----- --
    ----- --------
    ------- -----------
    ---- -
      --------- -------------
      -------- ------------
      -------- -----
      ------------ -------
      ------------ ---------
    --
  ---
--

在这个例子中,我们将 NODE_ENV 环境变量设置为 "production",并定义了四个数据库连接相关的环境变量。

然后,在命令行中使用 pm2 start 命令启动应用时,可以将 ecosystem.config.js 文件传递给 --env 参数来应用这些环境变量的值:

使用 .env 文件配置环境变量

如果我们使用 .env 文件配置了环境变量,可以在 ecosystem.config.js 文件中引入 dotenv 来自动载入这些变量。示例如下:

-- -------------------- ---- -------
-------------------------- ----- ------ ---

-------------- - -
  ----- --
    ----- --------
    ------- -----------
    ---- -
      --------- -------------
      -------- --------------------
      -------- --------------------
      ------------ ------------------------
      ------------ ------------------------
    --
  ---
--

在这个例子中,我们首先引入了 dotenv 库,并加载 .env 文件中的环境变量。然后,我们将引入的环境变量分别保存在应用的 env 对象中。

使用 PM2 的 ecosystem.config.js 中的脚本文件来定义环境变量

如果我们需要在 ecosystem.config.js 中动态生成环境变量,可以在 env 对象中使用一个脚本文件来定义这些变量。示例如下:

-- -------------------- ---- -------
-------------- - -
  ----- --
    ----- --------
    ------- -----------
    ---- -
      --------- -------------
      ------------- -- -- --------------------------------------------------------------------------------------------------------------------------------
    --
  ---
--

在这个例子中,我们定义了一个 DATABASE_URL 环境变量,它的值由一个函数返回,这个函数会将其他环境变量拼接起来。

这个例子中的环境变量是使用 PostgreSQL 配置,它需要以下环境变量:

总结

在使用 PM2 管理 Node.js 应用时,设置环境变量是非常重要的一个工作。通过本文,我们了解到了如何在不同的环境中设置不同的环境变量,并使用 PM2 的 --env 参数或 ecosystem.config.js 文件来配置这些变量。无论是在本地开发环境中还是在生产环境下,掌握这些技能都是非常有用的。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645cc1e5968c7c53b0f37419

纠错
反馈