代码之家  ›  专栏  ›  技术社区  ›  JavascriptLoser

启动节点。js express服务器即服务

  •  6
  • JavascriptLoser  · 技术社区  · 7 年前

    我目前正在准备一个用于生产的react web应用程序,并已设置centos计算机以使用节点托管该应用程序。js和express。我想自动启动express服务器。

    我的文件结构如下:

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

    一旦react web app在本地开发,它将打包成发行版,然后移动到 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);
    });
    

    这很好,但每次都需要手动启动服务器。我现在想跑步 表示js公司 作为操作系统级别的服务,以便其持久性和在引导/重启时自动启动。

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

    如何做到这一点?

    3 回复  |  直到 7 年前
        1
  •  9
  •   user8120138 user8120138    7 年前

    您可能想使用 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的第一个参数更改为节点包所在的位置。

        2
  •  6
  •   YouneL    7 年前

    您可以使用 pm2 模块,使应用程序在系统引导/重启时启动,并且在应用程序崩溃或被杀死时自动重启应用程序,以保持服务器始终可用。TLDR:

    安装pm2:

    npm install pm2 -g
    

    永远启动应用程序:

    pm2 start app.js
    

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

    pm2 startup systemd
    
        3
  •  1
  •   Elia Weiss    6 年前

    我永远使用

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