Jav*_*ser 5 service centos node.js express
我目前正在准备一个用于生产的React Web应用程序,已经设置了一个centos机器来使用node.js和express托管该应用程序。我想自动启动快递服务器。
我的文件结构如下:
/opt/
|__ /express/
|__ /node_modules/~
|__ express.js
|__ /public/
|__ bundle.js
|__ styles.css
|__ index.html
Run Code Online (Sandbox Code Playgroud)
一旦在本地开发了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);
});
Run Code Online (Sandbox Code Playgroud)
这工作正常,但需要我每次手动启动服务器。我现在想express.js
作为操作系统级别的服务运行,以便其持久性并在启动/重新启动时自动启动。
理想情况下,我希望仅由操作系统而不是其他任何npm软件包来管理。
如何才能做到这一点?
您可以使用pm2模块让应用程序在系统启动/重新启动时启动,如果应用程序崩溃或被终止,它也会自动重新启动应用程序,以保持服务器始终可用。总而言之:
安装pm2:
npm install pm2 -g
Run Code Online (Sandbox Code Playgroud)
永久启动应用程序:
pm2 start app.js
Run Code Online (Sandbox Code Playgroud)
让应用程序在系统启动/重新启动时启动:
pm2 startup systemd
Run Code Online (Sandbox Code Playgroud)
小智 5
您可能要使用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
Run Code Online (Sandbox Code Playgroud)
sudo systemctl daemon-reload
sudo systemctl start <NiceReactApp>
如果使用nvm管理节点程序包,则需要将ExecStart的第一个参数更改为节点程序包所在的位置。
归档时间: |
|
查看次数: |
2621 次 |
最近记录: |