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

标签 node.js express service centos

我目前正在准备一个用于生产的 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 包。

如何做到这一点?

最佳答案

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

简单描述:

创建文件 /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 来管理您的 Node 包,您需要将 ExecStart 的第一个参数更改为您的 Node 包所在的位置。

关于node.js - 将 node.js express 服务器作为服务启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48653117/

相关文章:

node.js - 将私钥存储在静态 Angular 站点上

javascript - 如何在回调函数之外访问 shopify-node-api 请求的结果

javascript - 如何退出 .JS 进程以便它向 AHK 返回 StdOut 值?

reactjs - 如何连接 React 前端和 Express 后端?

javascript - Discord.js 如何使用用户 ID 获取用户昵称

node.js - http header 中的原始 key 始终为 null - CORS 相关

angularjs - 在 View 中看不到我的 html 文件

android - 在服务和 Activity 之间共享数据的最有效方式

java - 当客户端代码运行在多台机器上时,如何保证服务调用的上限?

service - 具有集群 POD 的 Kubernetes 服务处于事件/备用状态