启动 node.js express 服务器作为服务

Posted

技术标签:

【中文标题】启动 node.js express 服务器作为服务【英文标题】:Start node.js express server as a service 【发布时间】:2018-07-17 02:41:45 【问题描述】:

我目前正在准备一个用于生产的 React Web 应用程序,我已经设置了一个 centos 机器来使用 node.js 和 express 来托管该应用程序。我想自动启动快速服务器。

我的文件结构如下:

/opt/
  |__ /express/
       |__ /node_modules/~
       |__ express.js
       |__ /public/
            |__ bundle.js
            |__ styles.css
            |__ index.html

在本地开发 React Web 应用程序后,它会被打包到一个发行版中,然后移动到 public 文件夹中,如上所示。 express.js 然后启动服务器并提供页面:

var path = require('path');
var express = require('express');
var app = express();
var port = 8000;

app.use(express.static('./public'));
app.get('*', (req, res) => 
    res.sendfile(path.resolve(__dirname, 'public/index.html'));
);
app.listen(port, () => 
    console.log('server running on port ' + port);
);

这很好用,但每次都需要我手动启动服务器。我现在想将express.js 作为操作系统级服务运行,以便它在启动/重启时持久并自动启动。

理想情况下,我希望它完全由操作系统管理,而不是我们任何其他 npm 包。

如何做到这一点?

【问题讨论】:

【参考方案1】:

我永远使用

npm install -g forever

sudo forever-service install --script ./bin/www myapp

sudo service myapp

【讨论】:

【参考方案2】:

您可以使用pm2 模块让应用程序在系统启动/重新启动时启动,如果应用程序崩溃或被终止,它也会自动重新启动应用程序,以保持服务器始终可用。 TLDR:

安装 pm2:

npm install pm2 -g

永远启动应用程序:

pm2 start app.js

让应用程序在系统启动/重启时启动:

pm2 startup systemd

【讨论】:

【参考方案3】:

您可能想使用https://en.wikipedia.org/wiki/Systemd

TLDR:

创建文件/lib/systemd/system/<NiceReactApp>.service

现在将服务信息放入文件中,将 之间的内容替换为您的值。

[Unit]
Description=<a nice react web app>

[Service]
Type=simple
User=<TheAccountForThisReactApp>
ExecStart=/usr/bin/node /home/<TheAccountForThisReactApp>/opt/express/express.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

sudo systemctl daemon-reload

sudo systemctl start &lt;NiceReactApp&gt;

如果您使用 nvm 来管理您的节点包,您需要将 ExecStart 的第一个参数更改为您的节点包所在的位置。

【讨论】:

以上是关于启动 node.js express 服务器作为服务的主要内容,如果未能解决你的问题,请参考以下文章

如何在超级终端中停止运行 Node.js (Express) 服务器

Elastic beanstalk 请求上的 Node.js 是 HTTPS,但 express 是作为 HTTP 服务的。这安全吗?

使用 node.js 和 react.js 客户端启动一个 firebase 功能项目

Node.js Express 应用程序处理启动错误

使用 Node JS / Express 提供包含图像的静态 HTML 页面

Docker快速搭建Node.js Express运行环境