如何使用 Passenger 部署 Next.js 应用程序?

How to deploy Next.js app with Passenger?

我是开发新手,我正在尝试部署我的第一个应用程序(假设名称是 testing)。
我想通过使用 Passenger 来部署我的 Next.js React 应用程序(这是 Dreamhost 包含和要求的,所以我没有安装它并且我在服务器的终端上没有 passenger 命令)但是我不知道该怎么做。

据我所知,Passenger 正在寻找 app.js 来启动应用程序,因此,在我的服务器上,在我的域文件夹中,应该有一个 app.js (testing.com/app.js).
但是 Next.js 没有明确的 app.js,我只有一个 _app.js 在我的 pages 文件夹里做了一些小改动,所以我不知道如何连接它们。

我还想知道一旦我配置了 app.js,我是否需要 运行 node app.js
testing.com/app.js的代码好像我的网站会做出相应的改变,就像下面的代码:

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(80);

如果我 运行 node app.js 列出到端口 3000,它适用于 httphttps 仍然会显示类似 We're sorry, but something went wrong. 的内容。
如果我不 运行 node app.js 或者我设置监听 80 端口,我只能得到 We're sorry, but something went wrong..

如有任何帮助,我们将不胜感激。

我强烈建议阅读 how to deploy a node.js app using passenger

至于端口问题...

由于您没有显示任何错误日志,我假设问题是您没有 root 访问权限。任何低于 1024 的端口都需要 root 权限才能使用。

只需 运行 sudo node app.js 并且您应该能够侦听低于 1024 的端口。

您不需要安装 Passenger 或 运行 node app.js。 App.js 通过 Passenger 自动执行。但是你需要在你的 dreamhost 上安装 NVM 和 nodejs。可以在以下位置找到有关安装节点的完整说明:https://help.dreamhost.com/hc/en-us/articles/360029083351-Installing-a-custom-version-of-NVM-and-Node-js

然后确保您已为您的域启用 Passenger & Node.js:https://help.dreamhost.com/hc/en-us/articles/216635318-Enabling-Passenger-for-Node-js

经过上面的操作你终于可以开始了。确保您的域具有以下目录结构:

application directory
  |
  +-- app.js
  |
  +-- .htaccess
  |
  +-- public/
  |
  +-- tmp/

您的 app.js 文件可能如下所示

var http = require("http");
http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World. This page is running Node.js version: ");
  response.write(process.version);
  response.end();
}).listen(80);

您的 .htaccess 文件可能如下所示

#path to nodejs version installed
PassengerNodejs [PUT IN YOUR PATH TO YOUR INSTALLATION OF NODE JS]

#error reporting
PassengerFriendlyErrorPages on

现在和任何时候你改变你的配置,你将需要命令 Passenger 重新启动你的 nodejs 应用程序。这可以在您的应用程序目录中完成

touch tmp/restart.txt

您的 node.js 应用程序在您的域上应该像“Hello world”一样。如果仍然没有,那么您将需要检查日志,然后向 Dreamhost 支持人员发送电子邮件。我第一次进行此设置时,Dreamhost 必须解决他们方面的问题。

但是关于Next.Js。这可能更棘手,因为您只能触发 app.js。 Next.js 坐在目录呼叫 pages 中。不幸的是,我仍在寻找解决方法。