【问题标题】:Deploy NextJS with Dokku in Production在生产环境中使用 Dokku 部署 NextJS
【发布时间】:2017-11-19 17:23:29
【问题描述】:

我已经设置了 Dokku,并希望将我的基本 NextJs 部署到它。一切正常,除了应用程序在开发模式下运行。

当我在我的 JSX 中输出 NODE_ENV 变量时,它首先是 production,但会更改为 development

const Index = () => (
  <div>
    <Link href="/about">
      <a>About Page</a>
    </Link>
    {process.env.NODE_ENV}
  </div>

这就是我所看到的。 NODE_ENV 变量在页面加载期间发生变化。

package.json

"scripts": {
  "start": "next src",
  "build": "next build src"
},

App.json

{
  "scripts": {
    "dokku": {
      "predeploy": "npm run build"
    }
  }
}

过程文件

web: npm start -- --port $PORT

此外,我为我的 dokku 应用程序设置了两个配置:

dokku config:set my-app NPM_CONFIG_PRODUCTION=false
dokku config:set my-app HOST=0.0.0.0 NODE_ENV=production

为了让它进入生产模式,我缺少什么?

【问题讨论】:

    标签: npm dokku next.js


    【解决方案1】:

    通过设置own express server解决了这个问题。

    package.json

    "scripts": {
      "dev": "node server.js",
      "build": "next build",
      "start": "NODE_ENV=production node server.js"
    },
    

    app.json

    {
      "scripts": {
        "dokku": {
          "predeploy": "npm run build"
        }
      }
    }
    

    过程文件

    web: npm start -- --port $PORT
    

    【讨论】:

      【解决方案2】:

      根据this github issue comment,您需要让应用程序监听 PORT 环境变量。

      但我无法让它工作。有一些示例说明如何让npm-script 使用环境变量,但我现在不想走那条路。 (有关更多信息,请参阅this question。)

      但是,我确实注意到 Next.js 默认侦听端口 3000,而 dokku 在内部使用端口 5000,因此我只需将默认的 npm start 脚本更改为 next -p 5000 即可使其工作,这是我硬编码的Next.js 应用使用端口 5000。

      这暂时有效,但我只用一个干净、最小的项目对其进行了测试,所以不确定是否还有其他障碍。

      此外,Next.js 似乎确实从 .env 文件中获取了 env 变量,但由于某种原因,这并未反映在应用程序所在的端口中:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-06
        • 1970-01-01
        • 2014-11-09
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 2019-09-27
        相关资源
        最近更新 更多