在生产中使用 Dokku 部署 NextJS
Deploy NextJS with Dokku in Production
我已经设置了 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"
}
}
}
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
我缺少什么才能使其进入生产模式?
通过设置 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
根据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 变量,但出于某种原因,这并未反映在应用程序所服务的端口中:
我已经设置了 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"
}
}
}
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
我缺少什么才能使其进入生产模式?
通过设置 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
根据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 变量,但出于某种原因,这并未反映在应用程序所服务的端口中: