如何与Passenger一起部署Next.js应用程序?

问题描述

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

据我所知,乘客正在寻找app.js来启动应用程序,因此,在我的服务器上,我的域文件夹中应该有一个app.jstesting.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

关于端口问题...

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

只需运行sudo node app.js,您就可以侦听1024以下的端口。

,

您不需要安装Passenger或运行node app.js。 App.js通过旅客自动执行。但是,您将需要在dreamhost上安装NVM和nodejs。有关安装节点的完整说明,请参见:https://help.dreamhost.com/hc/en-us/articles/360029083351-Installing-a-custom-version-of-NVM-and-Node-js

然后确保已为您的域启用{Password&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应用程序应如何在您的域上“打招呼”。如果仍然没有,则需要检查日志,然后给Dreamhost支持小组发送电子邮件。我第一次进行此设置时,Dreamhost必须修复一些问题。

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