使用Dokku在生产中部署NextJS

时间:2017-06-16 20:37:14

标签: npm dokku next.js

我已经设置了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变量会发生变化。

enter image description here

的package.json

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

App.json

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

Procfile

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

我想让它进入生产模式是什么原因?

2 个答案:

答案 0 :(得分:0)

通过设置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"
    }
  }
}

Procfile

web: npm start -- --port $PORT

答案 1 :(得分:0)

根据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 变量,但由于某种原因,这并未反映在应用程序所在的端口中:

next.js output