首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将环境变量通过PM2传递给NextJS

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

Stack Overflow用户
提问于 2019-11-08 17:13:02
回答 3查看 7.8K关注 0票数 5

我有两个package.json脚本,如下所示:

代码语言:javascript
运行
复制
"start": "next start -p $PORT",
"pm2_staging": "pm2 restart ecosystem.config.js --env staging",

还有一个看起来像这样的ecosystem.config.js

代码语言:javascript
运行
复制
module.exports = {
  apps: [
    {
      name: 'test.co.uk',
      script: 'npm',
      args: 'start',
      env_staging: {
        API: 'staging',
        NODE_ENV: 'production',
        PORT: 3001,
      },
    },
  ],
};

然后运行以下命令:

代码语言:javascript
运行
复制
TEST_VAR='test' npm run pm2_staging

我预计会发生以下情况:

重启命令fires

  • ecosystem.config.js触发npm start命令并设置一些环境variables

  • The应用程序启动,所有env都可用,包括TEST_VAR (在原始命令中设置)

实际上,生态系统中的env都是正确设置的,但是TEST_VAR在应用程序中是不可用的。为什么要这样做,如果我不能这样做,我应该如何从CI工具中设置密钥?

EN

回答 3

Stack Overflow用户

发布于 2019-11-30 02:38:35

我今晚也遇到了同样的问题。在查找了所有需要配置的地方之后。env变量需要进入您的ecosystem.config.js中,如下所示。在我的例子中,我把它放在我的服务器的根部。

代码语言:javascript
运行
复制
  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
    }
  }]
};

像这样的package.json

代码语言:javascript
运行
复制
"scripts": {
    "dev": "next",
    "build": "next build",
    "start": "next start -p 8000"
  },
...

执行了这样的任务

代码语言:javascript
运行
复制
#!/bin/bash
cd /var/www/myapp/
git pull && yarn install && yarn build
cd ~/
pm2 start ecosystem.config.js --env production

然后,API_URL将在您的应用程序中在const API_URL = process.env.API_URL中提供。这些urls帮助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/

票数 1
EN

Stack Overflow用户

发布于 2021-01-17 01:51:10

另一个想法是通过以下方式将all -- PM2的env参数传递给服务器。

ecosystem.config.js为:

代码语言:javascript
运行
复制
module.exports = {
    apps: [{
        name: "my-service-1",
        script: "dist/server.js",
        env_production: process.env, // pass all the env params of the container to node
    }],
};
票数 1
EN

Stack Overflow用户

发布于 2021-03-09 05:23:08

@webface

您的示例中的环境变量在Nextjs中不可用。要使客户端和服务器都可用,变量必须以NEXT_PUBLIC (即。NEXT_PUBLIC_API_VERSION)。

这些环境变量必须传递到构建过程中,才能在运行时可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58771074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档