You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在EC2 Linux实例上为PM2管理的Node.js应用设置环境变量

解决EC2 Linux上PM2无法读取环境变量的问题

我之前在EC2上部署Node.js应用时也碰到过一模一样的坑——系统级配置的环境变量死活不被PM2加载,导致应用崩溃提示缺少必要变量。这主要是因为PM2启动的进程默认不会加载bash的配置文件(比如/etc/profile~/.bashrc这些),尤其是当PM2作为服务启动时,它的运行环境和你登录shell的环境完全不同。下面给你几个靠谱的解决方案:

方案1:直接通过PM2传递环境变量(最快捷)

临时启动时传递

如果只是临时测试,可以在启动命令里直接指定环境变量:

pm2 start your-app.js --env USERNAME=your-actual-username

用PM2配置文件持久化(推荐)

创建一个ecosystem.config.js文件,把环境变量写在配置里,这样每次启动都会自动加载:

module.exports = {
  apps: [{
    name: "your-app-name",
    script: "./app.js",
    env: {
      NODE_ENV: "production",
      USERNAME: "your-actual-username" // 这里填你的用户名
    }
  }]
};

然后用这个配置文件启动应用:

pm2 start ecosystem.config.js

方案2:让PM2加载系统级环境变量

如果你的环境变量需要和系统其他进程共享,可以通过修改PM2的systemd服务配置来实现:

  1. 先导出PM2的systemd配置(如果还没做过):
pm2 startup systemd -u ec2-user --hp /home/ec2-user
  1. 编辑生成的systemd服务文件(路径通常是/etc/systemd/system/pm2-ec2-user.service):
    [Service]段落下添加环境变量:
[Service]
Environment="USERNAME=your-actual-username"
  1. 重新加载systemd配置并重启PM2服务:
sudo systemctl daemon-reload
sudo systemctl restart pm2-ec2-user

方案3:验证环境变量是否生效

不管用哪种方法,都可以用下面的命令检查PM2进程是否正确读取到了环境变量:

pm2 show your-app-name

在输出的Environment variables部分,你应该能看到USERNAME和对应的值。如果没看到,说明配置没生效,回到前面的步骤检查。

另外提醒一下:Linux系统里默认的用户名环境变量是USER,但你开发环境用的是USERNAME,所以一定要保持变量名完全一致,别写错大小写!

内容的提问来源于stack exchange,提问作者Victor O'Frank

火山引擎 最新活动