通过 PM2 将环境变量传递给 NextJS

Coo*_*oop 5 shell npm pm2 next.js

我有 2 个package.json看起来像这样的脚本:

"start": "next start -p $PORT",
"pm2_staging": "pm2 restart ecosystem.config.js --env staging",
Run Code Online (Sandbox Code Playgroud)

而一个ecosystem.config.js看起来像这样:

module.exports = {
  apps: [
    {
      name: 'test.co.uk',
      script: 'npm',
      args: 'start',
      env_staging: {
        API: 'staging',
        NODE_ENV: 'production',
        PORT: 3001,
      },
    },
  ],
};
Run Code Online (Sandbox Code Playgroud)

然后我运行以下命令:

TEST_VAR='test' npm run pm2_staging
Run Code Online (Sandbox Code Playgroud)

我希望发生以下情况:

  • PM2 重启命令触发
  • ecosystem.config.js触发npm start命令并设置一些环境变量
  • 应用程序启动并且所有环境变量都可用,包括TEST_VAR(在原始命令中设置)

实际发生的是生态系统中的所有环境变量都已正确设置,但 TEST_VAR 在应用程序中不可用。为什么会这样,如果我不能这样做,我该如何从 CI 工具设置密钥?

web*_*ace 2

今晚我遇到了同样的问题。在查看了每个地方后,我发现了所需的配置。环境变量需要像下面一样放入ecosystem.config.js。就我而言,我将其放在服务器的根目录下

  module.exports = {
  apps : [{
    name: 'nextjs',
    script: 'yarn',
    args:"start",
    cwd:"/var/www/myapp/",
    instances: 2,
    autorestart: true,
    watch: false,
    max_memory_restart: '1G',
    env: {
      NODE_ENV: 'development'
    },
    env_production: {
      NODE_ENV: 'production',
      API_URL: 'YOUR ENV URL',
      PORT:8000
    }
  }]
};
Run Code Online (Sandbox Code Playgroud)

package.json像这样

"scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start -p 8000"
  },
...
Run Code Online (Sandbox Code Playgroud)

并执行了这样的事情

#!/bin/bash
cd /var/www/myapp/
git pull && yarn install && yarn build
cd ~/
pm2 start ecosystem.config.js --env production
Run Code Online (Sandbox Code Playgroud)

然后就API_URL可以在const API_URL = process.env.API_URL您的应用程序中使用。这些网址有帮助 https://willandskill.se/en/setup-a-next-js-project-with-pm2-nginx-and-yarn-on-ubuntu-18-04/ https://pm2.keymetrics.io /docs/usage/application-declaration/