将Next.js部署到共享主机

时间:2020-06-11 09:45:01

标签: node.js deployment next.js shared-hosting

我需要将Next.js应用程序部署到支持Node.js的共享托管提供程序。 Next.js官方文档说您(仅?)需要在服务器上运行next start(我想通过SSH)。

  1. 我是否仅需要部署build版本,还是需要通过ssh在服务器上运行build命令?
  2. 运行npm start确实是构建准备就绪后我唯一需要做的事情吗?我有点担心服务器由于某种原因而停止运行并且该站点出现故障。我在Google上搜索了很多,发现有人提到使用pm2(请参阅freeCodeCamp上的this文章。)但是不确定Next.js是否在生产中自动重启服务器?

2 个答案:

答案 0 :(得分:2)

您可以在这里找到非常有用的讨论: https://github.com/vercel/next.js/discussions/12234

我发现缺少使用 cPanel 部署到共享主机的信息,所以经过多次反复试验,我希望这对那些正在使用 Nextjs 部署到 自定义服务器 的人有所帮助,因为它在 Vercel 中提到文档,在这种情况下是共享托管。

  1. 构建

根据我在托管服务器上运行 npm run build 的经验,由于共享托管服务器中提供的有限的虚拟内存,有时会导致 build errors。 因此,解决方法很简单,在您的本地机器上执行构建,然后将您机器上创建的 .next 文件夹复制到托管服务器上项目的根文件夹。

  1. 更简单的部署

我不需要“pm2”或“nginx”来运行 Nextjs 项目。这相当简单,只需将 package.json、'server.js' 和 .next 复制到项目的根文件夹中,就可以了。 (参见下面的 server.js 内容)

  1. 服务器启动文件

(您可以将其命名为 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);
  });

答案 1 :(得分:1)

在服务器上,您可以这样做,当然,您应该具有pm2(npm install -g pm2)和nginx的配置,以代理将要运行下一个服务器的端口,例如6060(添加到nginx。 conf / server / location此行:proxy_pass http:// localhost:6060),然后:

  1. 上传源文件夹(页面,公共,src,package.json)-例如,将您的文件夹移动到某个位置 像/ var / www / your-folder
  2. 将其添加:sudo chown -R $ USER:$ USER / var / www / your-folder
  3. cd到您的文件夹并运行: npm -i
  4. 然后编辑package.json并更改“ next start -p your-port”,例如6060
  5. npm运行构建
  6. 运行pm2(在您的文件夹中):pm2 start“ npm run start” --name项目-无论您喜欢什么

要使pm2自动重新启动,请运行:pm2 startup systemd,pm2将产生一行,您应复制该行并运行它。

在共享主机上,现在有很多提供程序支持运行nodejs应用程序,但是我不知道他们是否可以运行nextjs应用程序,例如,在plesk中,您可以通过配置app.js路径和项目文件夹路径,公共文件夹来配置运行nodejs应用程序路径等,但是对于下一个应用程序,您没有要运行的app.js,而是用于启动下一个服务器的脚本。无论如何,您都可以尝试:)

或者您可以简单地转移到vps,它的价格现在相当便宜,并且您可以使用自己的服务器做很多事情(Google Compute Engine提供免费的东西-几乎免费一年)