繁体   English   中英

启动node.js将服务器表示为服务

[英]Start node.js express server as a service

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

我的文件结构如下:

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

一旦在本地开发了反应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包。

如何才能做到这一点?

您可能想要使用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 <NiceReactApp>

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

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

安装pm2:

npm install pm2 -g

永远启动应用程序:

pm2 start app.js

获取应用程序以在系统启动/重启时启动:

pm2 startup systemd

我永远使用

npm install -g forever

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

sudo service myapp

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM