Node.js服务器自动启动

时间:2018-01-17 09:12:49

标签: node.js

我是Node.js的新手,但愿意认真尝试。来自PHP的东西似乎有点令人困惑,因为没有index.php,但需要执行启动脚本来启动服务器npm start

这是如何在生产中完成的?有预运行脚本吗?如果服务器由于某种原因关闭怎么办?如何在没有客户端连接问题的情况下自动备份服务器?它是否会自动适用于域名,或者是否也意味着有人必须访问domain.com:3000?

我在想这个错误的方法吗?

4 个答案:

答案 0 :(得分:3)

你问的问题是非常广泛的。让我来说明它是如何运作的。

  

来自PHP的东西看起来有点令人困惑,因为没有   index.php,但需要执行一个启动脚本来激活   服务器npm start。

所以在node.js中我们有一个文件,通过它我们可以启动节点服务器并决定我们想要什么。大多数人使用app.js , server.js , index.js

当您运行npm start时,这意味着您在文件已写入package.json的文件夹中有start: node app.js。当你运行npm start时,它会起火。

  

这是如何在生产中完成的?是否有预运行脚本?

NODE_ENV=production npm start,你可以像这样在节点代码中访问它  process.env.NODE_ENV。通过这种方式,您可以为每个环境添加dev,qa标记。

我建议你看看

http://pm2.keymetrics.io/

What if the server closes for some reason, how do I get it back up automatically without having connection problems for the clients? 

因此,您可以查看https://nodejs.org/api/cluster.html

您可以管理崩溃线程,然后打开另一个线程,因为节点是单线程。 你也可以管理node.js所有类型的错误。这使得node.js捕获所有异常和错误 https://nodejs.org/api/process.html
process.on

  

是否也意味着有人必须去domain.com:3000?

没有。你可以带任何你想要的端口。无论如何80,8080。我建议在node.js应用程序前面使用nginx。但是为了减少兼容性,可以使用简单的节点应用程序。

例如: -

var http = require('http');
var port = 3000 ; // take any 80, 8080

http.createServer(function (request, response) {
    response.writeHead(200, {
        'Content-Type': 'text/plain',
        'Access-Control-Allow-Origin' : '*'
    });
    response.end('Hello World\n');
}).listen(port);

希望得到这个帮助。

答案 1 :(得分:2)

回答第一个问题,还有其他选项可以运行节点应用程序。我建议你开始使用像Nodemon这样的软件包 实际上是为此目的而建的。

回答第二个问题,如果您愿意,可以使用某些容器系统将其用于生产部署。这里有一些选项dockerkubarnetees等等。

您的自动重启事件可由您用于部署的容器管理器或程序包解决。

要重定向80或443端口上要重定向到应用程序的所有请求,您可以尝试使用nginx。

答案 2 :(得分:1)

如果由于某种原因关闭服务器,有些模块可用于自动重启服务器。其中一些是pm2,永远。

答案 3 :(得分:1)

如果不详细说明,您必须非常清楚以下内容:

您的节点网络流程将会消失。是的,没错,当有未被捕获的异常时,它可能会死亡。因此,您需要多个进程进行故障转移,因此有许多技术和库。其中一些是:

  1. 在Web服务器(最常用的nginx)后面的几个节点进程负载均衡
  2. 托管群集的节点进程(https://github.com/Unitech/pm2
  3. 或者(在我看来,这不适合生产)一些进程监视器,如果它死了将重启你的节点web进程: https://github.com/foreverjs/forever