部署 Next.js 到共享主机
Deploy Next.js to Shared Hosting
我需要将 Next.js 应用程序部署到支持 Node.js 的共享主机提供商。官方 Next.js 文档说您(仅?)需要在服务器上 运行 next start
(我猜是通过 SSH)。
- 我只需要部署
build
版本还是需要通过 ssh 运行 服务器上的构建命令?
- 运行ning
npm start
真的是构建准备就绪后我唯一需要做的事情吗?我有点担心服务器会因某种原因停止运行,网站会宕机。我在谷歌上搜索了很多,发现有人提到使用 pm2
(指的是 freeCodeCamp 上的 this 文章。)但不确定 Next.js 是否会在生产时自动重启服务器?
在服务器上,你可以这样做,当然你应该有 pm2 (npm install -g pm2) 和配置 nginx 代理传递你的下一个服务器将 运行 的端口,例如6060(添加到nginx.conf/server/location这一行:proxy_pass http://localhost:6060)然后:
- 上传源文件夹(页面,public,src,package.json)-例如你的文件夹到某个地方
喜欢 /var/www/your-folder
- chown:sudo chown -R $USER:$USER /var/www/your-folder
- cd 到您的文件夹并 运行:
npm -i
- 然后编辑 package.json 并更改“next start -p your-port”,例如 6060
- npm 运行 构建
- 运行 pm2(在你的文件夹中):pm2 start "npm 运行 start" --name project-whatever-you-like
为了让 pm2 自动重启你 运行: pm2 startup systemd ,pm2 会生成一行,你应该复制该行并 运行 它。
在共享主机上有很多提供商现在支持 运行ning nodejs 应用程序,但我不知道他们是否可以 运行 nextjs 应用程序,例如在 plesk 中你可以配置为 运行 nodejs 应用程序通过配置 app.js 路径和项目文件夹路径,public 文件夹路径等,但是对于下一个应用程序,你没有 app.js 到 运行,而是一个脚本来启动下一个服务器。无论如何你可以试试:)
或者你可以简单地移动到 vps,它的价格现在很便宜,你可以用你自己的服务器做很多事情(Google Compute Engine 正在提供免费的东西 -几乎免费一年)
您可以在此处找到非常有帮助的讨论:
https://github.com/vercel/next.js/discussions/12234
我发现缺少使用 cPanel 部署到共享主机的信息,所以在多次尝试和错误之后,我希望这对那些在部署到 自定义服务器 时遇到困难的人有所帮助正如 Vercel 文档中提到的那样,在本例中为共享主机。
- 建造
根据我在托管服务器上 运行ning npm run build
的经验,由于提供的 有限虚拟内存 有时会导致 build errors
在共享托管服务器中。
因此,一个简单的解决方法是,在本地计算机上执行构建,然后将在您的计算机上创建的 .next
文件夹复制到托管服务器上项目的根文件夹中。
- 更简单的部署
我不需要 'pm2' 也不需要 'nginx' 到 运行 Nextjs 项目。这相当简单,只需将 package.json
、'server.js' 和 .next
复制到项目的根文件夹中,就可以开始了。 (见下文server.js内容)
- 服务器启动文件
(您可以将其命名为 server.js 或 app.js 或 index.js 或任何您想要的名称,只要它与您在 cPanel 中对 Node 应用程序的定义一致即可)。
这是服务器启动文件所需的最少代码:
const { createServer } = require("http");
const { parse } = require("url");
const next = require("next");
const dev = process.env.NODE_ENV !== "production";
const port = !dev ? process.env.PORT : 3000;
// Create the Express-Next App
const app = next({ dev });
const handle = app.getRequestHandler();
app
.prepare()
.then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;
handle(req, res, parsedUrl);
console.log("pathname", pathname);
}).listen(port, (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
在您的 package.json 文件中,您可以创建:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"export": "yarn build && next export"
},
和运行:
纱出口
然后,在 out 文件夹中,您可以通过 filezila 传递所有文件,如上图
到主机上的文件夹
我需要将 Next.js 应用程序部署到支持 Node.js 的共享主机提供商。官方 Next.js 文档说您(仅?)需要在服务器上 运行 next start
(我猜是通过 SSH)。
- 我只需要部署
build
版本还是需要通过 ssh 运行 服务器上的构建命令? - 运行ning
npm start
真的是构建准备就绪后我唯一需要做的事情吗?我有点担心服务器会因某种原因停止运行,网站会宕机。我在谷歌上搜索了很多,发现有人提到使用pm2
(指的是 freeCodeCamp 上的 this 文章。)但不确定 Next.js 是否会在生产时自动重启服务器?
在服务器上,你可以这样做,当然你应该有 pm2 (npm install -g pm2) 和配置 nginx 代理传递你的下一个服务器将 运行 的端口,例如6060(添加到nginx.conf/server/location这一行:proxy_pass http://localhost:6060)然后:
- 上传源文件夹(页面,public,src,package.json)-例如你的文件夹到某个地方 喜欢 /var/www/your-folder
- chown:sudo chown -R $USER:$USER /var/www/your-folder
- cd 到您的文件夹并 运行: npm -i
- 然后编辑 package.json 并更改“next start -p your-port”,例如 6060
- npm 运行 构建
- 运行 pm2(在你的文件夹中):pm2 start "npm 运行 start" --name project-whatever-you-like
为了让 pm2 自动重启你 运行: pm2 startup systemd ,pm2 会生成一行,你应该复制该行并 运行 它。
在共享主机上有很多提供商现在支持 运行ning nodejs 应用程序,但我不知道他们是否可以 运行 nextjs 应用程序,例如在 plesk 中你可以配置为 运行 nodejs 应用程序通过配置 app.js 路径和项目文件夹路径,public 文件夹路径等,但是对于下一个应用程序,你没有 app.js 到 运行,而是一个脚本来启动下一个服务器。无论如何你可以试试:)
或者你可以简单地移动到 vps,它的价格现在很便宜,你可以用你自己的服务器做很多事情(Google Compute Engine 正在提供免费的东西 -几乎免费一年)
您可以在此处找到非常有帮助的讨论: https://github.com/vercel/next.js/discussions/12234
我发现缺少使用 cPanel 部署到共享主机的信息,所以在多次尝试和错误之后,我希望这对那些在部署到 自定义服务器 时遇到困难的人有所帮助正如 Vercel 文档中提到的那样,在本例中为共享主机。
- 建造
根据我在托管服务器上 运行ning npm run build
的经验,由于提供的 有限虚拟内存 有时会导致 build errors
在共享托管服务器中。
因此,一个简单的解决方法是,在本地计算机上执行构建,然后将在您的计算机上创建的 .next
文件夹复制到托管服务器上项目的根文件夹中。
- 更简单的部署
我不需要 'pm2' 也不需要 'nginx' 到 运行 Nextjs 项目。这相当简单,只需将 package.json
、'server.js' 和 .next
复制到项目的根文件夹中,就可以开始了。 (见下文server.js内容)
- 服务器启动文件
(您可以将其命名为 server.js 或 app.js 或 index.js 或任何您想要的名称,只要它与您在 cPanel 中对 Node 应用程序的定义一致即可)。 这是服务器启动文件所需的最少代码:
const { createServer } = require("http");
const { parse } = require("url");
const next = require("next");
const dev = process.env.NODE_ENV !== "production";
const port = !dev ? process.env.PORT : 3000;
// Create the Express-Next App
const app = next({ dev });
const handle = app.getRequestHandler();
app
.prepare()
.then(() => {
createServer((req, res) => {
const parsedUrl = parse(req.url, true);
const { pathname, query } = parsedUrl;
handle(req, res, parsedUrl);
console.log("pathname", pathname);
}).listen(port, (err) => {
if (err) throw err;
console.log(`> Ready on http://localhost:${port}`);
});
})
.catch((ex) => {
console.error(ex.stack);
process.exit(1);
});
在您的 package.json 文件中,您可以创建:
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"lint": "next lint",
"export": "yarn build && next export"
},
和运行:
纱出口
然后,在 out 文件夹中,您可以通过 filezila 传递所有文件,如上图
到主机上的文件夹