如何为所有PM2应用配置可访问的全局环境变量?
解决PM2全局环境变量无法被应用共用的问题
你的配置结构本身是合理的,但环境变量未生效可从以下几个方向排查解决:
1. 确认应用读取变量的方式
Node.js应用必须通过process.env.<变量名>读取PM2注入的环境变量,例如:
console.log(process.env.TEST); // 正常应输出"TEST"
如果你的应用使用了自定义配置加载逻辑(比如单独读取本地.env文件),需确保逻辑优先读取系统/PM2注入的环境变量。
2. 避免单个应用覆盖全局变量
如果某个apps项内单独定义了env字段,会覆盖顶级全局变量。检查每个应用配置,不要在单个app中重复定义同名变量:
// 错误示例:单个app的env会覆盖全局变量 { "name": "api", "script": "build/index.js", "cwd": "../services/api/", "exec_mode": "fork", "instances": 1, "env": { "TEST": "LOCAL" // 该值会覆盖全局的"TEST" } }
3. 重新加载配置并验证
环境变量修改后,需完全重启PM2进程才能生效:
# 停止所有进程 pm2 delete all # 重新加载配置文件 pm2 start pm2.ecosystem.json
验证变量是否生效:
# 查看指定应用的环境变量 pm2 show api
在输出的「Environment variables」区域,应能看到TEST=TEST和OTHER=OTHER。
4. 全局PM2环境变量(可选)
如果需要让所有PM2管理的应用共用这些变量(无论使用哪个配置文件),可创建PM2全局配置:
- 在用户主目录下创建
~/.pm2/ecosystem.config.js - 写入以下内容:
module.exports = { apps: [], env: { "TEST": "TEST", "OTHER": "OTHER" } }
PM2会自动加载该全局配置,所有应用都会继承这里的环境变量。
内容的提问来源于stack exchange,提问作者SefaUn
相关产品推荐
相关产品推荐

