如何在pm2启动Node.js API时读取config.env环境变量?
解决PM2启动Node.js服务无法读取config.env环境变量的问题
你用nodemon时--env-file是nodemon自身支持的参数,但PM2里-- --env-file是把参数传给Node进程,而Node本身不识别这个参数,所以才读不到环境变量。下面给几种可行的解决方式:
方案1:使用PM2配置文件(推荐)
创建ecosystem.config.js配置文件,直接在里面指定环境变量文件路径:
module.exports = { apps: [{ name: 'your-api-service', script: 'server.js', env: { NODE_ENV: 'prod' }, // 关联你的环境变量文件 env_file: './config.env' }] };
然后用配置文件启动服务:
pm2 start ecosystem.config.js
方案2:在代码中主动加载环境变量(通用适配)
安装dotenv包,让Node.js代码自己读取config.env,不管用什么工具启动都能生效:
npm install dotenv --save
在server.js的最顶部添加代码:
require('dotenv').config({ path: './config.env' });
之后PM2启动命令直接用:
pm2 start server.js --env prod
方案3:通过Shell先加载环境变量再启动PM2
用source命令先加载config.env里的变量,再启动PM2:
source config.env && NODE_ENV=prod pm2 start server.js
注意:这种方式要求config.env的格式符合Shell变量定义(比如KEY=VALUE,不要加多余引号)。
内容的提问来源于stack exchange,提问作者Raphael
相关产品推荐
相关产品推荐

