Ejecuci贸n de aplicaciones de node con Forever

     

    Introducci贸n

    Para muchas personas, ejecutar su c贸digo en un entorno de producci贸n es una idea tard铆a, y solo escribir el c贸digo es donde est谩 el verdadero desaf铆o. Si bien esto es mayormente cierto en mi experiencia, encontrar una forma confiable y f谩cil de ejecutar su aplicaci贸n puede ser bastante dif铆cil en s铆 mismo.

    Hay algunas cosas que debe tener en cuenta al ejecutar su (s) aplicaci贸n (es).

    • 驴A d贸nde ir谩n la salida / los registros?
    • 驴Qu茅 sucede si la aplicaci贸n falla?
    • 驴C贸mo hago un seguimiento de todos mis procesos de demonio?
    • 驴C贸mo proporciono configuraciones para cada proceso?

    Aqu铆 es donde el node forever paquete es realmente 煤til. Le ayuda a manejar f谩cilmente todos los problemas anteriores y m谩s, que describir茅 en las siguientes secciones.

    驴Qu茅 es Forever?

    forever es una utilidad de l铆nea de comandos para aplicaciones de node escrita completamente en JavaScript. Est谩 destinado a simplificar su vida en un entorno de producci贸n al administrar (iniciar, detener, reiniciar, etc.) los procesos de node y sus configuraciones. Puede usarlo en la l铆nea de comando o mediante programaci贸n (a trav茅s de forever-monitor) dentro de su c贸digo de node.

    Puede especificar estas configuraciones a trav茅s de la l铆nea de comandos o un archivo de configuraci贸n JSON. Personalmente, prefiero el archivo JSON, ya que puede configurar varios procesos de node en un solo archivo, lo que facilita el inicio de todos sus procesos a la vez. De esta manera no dudo en dividir un gran monolito en m煤ltiples servicios independientes, ya que administrarlos ser谩 mucho m谩s f谩cil gracias a utilidades como forever.

    Funciona por debajo corriendo Servidor Flatiron como un proceso de demonio para administrar sus otros procesos de demonio, por lo que si / cuando su c贸digo falla y se bloquea, forever estar谩 all铆 para reiniciarlo autom谩ticamente y, con suerte, evitar el tiempo de inactividad para sus usuarios. Corriendo forever con un servidor Flatiron es una manera f谩cil de mantener la utilidad en funcionamiento mientras se monitorea la entrada del usuario, y gracias a la Complemento CLI esto fue f谩cil para el forever desarrolladores para hacer. Si vas a crear un programa como forever (es decir, un proceso demonio de larga ejecuci贸n que recibe comandos de usuario), entonces le recomiendo que lo haga de esta manera. Har谩 las cosas mucho m谩s f谩ciles.

    La comunicaci贸n entre procesos ocurre a trav茅s de sockets, que es manejada por el alto nivel nssocket biblioteca. Los archivos de socket que permiten volver a abrir la comunicaci贸n entre procesos residen en [forever.root]/socks. Naturalmente, los mensajes entre los procesos se serializan como JSON. Es otra biblioteca 煤til para consultar si alguna vez desea una comunicaci贸n de socket basada en eventos.

    Debo se帽alar, una caracter铆stica importante sobre forever (y otras herramientas de gesti贸n de procesos como esta) es que tambi茅n puede usarlo para aplicaciones que no son de node, como Python, Ruby, etc. -c, o bandera de comando (que ver谩 m谩s adelante), le diremos forever c贸mo ejecutar su aplicaci贸n. Con esto, puede decirle que use cualquier otro int茅rprete para la ejecuci贸n, como Python:

    $ forever start -c python py_script.py
    

    Entonces, incluso si no le gusta Node, o simplemente necesita usar un idioma diferente para un proyecto, tenga en cuenta que esto a煤n es 煤til para usted.

    C贸mo usar Forever

    Ok, pasemos a la parte importante, c贸mo usar realmente la maldita cosa. Comencemos con un ejemplo simple, como iniciar y detener una aplicaci贸n web. Para nuestro ejemplo, iniciaremos y detendremos un servidor Express “hola mundo”:

    // index.js
    
    var express = require('express');
    var app = express();
    
    app.get("https://Pharos.sh.com/", function (req, res) {
      res.send('Hello World!');
    });
    
    var server = app.listen(8080);
    

    Instalar en pc forever con npm install forever -ge inicie el servidor con:

    $ forever start -a index.js
    

    Esto iniciar谩 la aplicaci贸n Express como un proceso en segundo plano. los -a La bandera agrega registros al archivo de registro predeterminado ubicado en foreverdirectorio ra铆z de (~/.forever por defecto en sistemas Unix). No podr谩s start la aplicaci贸n sin este indicador si el archivo de registro ya existe.

    Inspeccione el proceso en ejecuci贸n con forever list:

    info:    Forever processes running
    data:        uid  command                                         script   forever pid   id logfile                        uptime      
    data:    [0] moMB /Users/scott/.nvm/versions/node/v4.1.2/bin/node index.js 21389   21390    /Users/scott/.forever/moMB.log 0:0:0:3.345
    

    Para detener el proceso, simplemente cons煤ltelo por id (21390), uid (moMB), pid (21389), 铆ndice (0) o el nombre del gui贸n (index.js):

    $ forever stop index.js
    

    Si bien esto es bueno, podr铆a ser mejor. index.js no es muy exclusivo de nuestra aplicaci贸n y el PID es dif铆cil de recordar, entonces, 驴por qu茅 darle un nombre mejor? De esa forma no tienes que seguir corriendo forever list para obtener informaci贸n sobre su proceso en ejecuci贸n.

    $ forever start -a --uid myapp index.js
    

    Ahora puedes detenerlo con:

    $ forever stop myapp
    

    Dos argumentos en la l铆nea de comando no son tan malos, pero pueden volverse un poco excesivos cuando comienzas a agregar argumentos para archivos de registro, diferentes ejecutables de node, directorios de trabajo y m谩s. Entonces, en lugar de especificar todo en la l铆nea de comando, puede usar un archivo de configuraci贸n JSON como este:

    {
        // Comments are allowed!
        "uid": "myapp",
        "append": true,
        "watch": true,
        "script": "index.js",
        "sourceDir": "/home/scott/myapp",
        "command": /Users/scott/.nvm/versions/node/v4.1.2/bin/node
    }
    

    Suponiendo que este archivo est谩 en su directorio de trabajo actual y se llama forever.json, util铆celo as铆:

    $ forever start ./forever.json
    

    Como puede ver, incluso puede decir forever qu茅 versi贸n de Node usar, lo cual es realmente conveniente cuando tiene varias aplicaciones en un solo servidor que requieren diferentes versiones (como la bifurcaci贸n io.js).

    [
      {
        // App using Node v0.11.8
        "uid": "myapp1",
        "append": true,
        "watch": true,
        "script": "index.js",
        "sourceDir": "/Users/scott/myapp1",
        "command": "/Users/scott/.nvm/versions/node/v0.11.8/bin/node"
      },
      {
        // App using io.js
        "uid": "myapp2",
        "append": true,
        "watch": true,
        "script": "index.js",
        "sourceDir": "/Users/scott/myapp2",
        "command": "/Users/scott/.nvm/versions/io.js/v2.2.1/bin/node",
        "args": ["--port", "8080"]
      }
    ]
    

    Conclusi贸n

    Hay algunas herramientas para ayudarlo a ejecutar aplicaciones de Node, sobre todo forever y pm2. Prob茅 ambos y pens茅 forever fue un poco m谩s f谩cil de usar (principalmente porque es m谩s simple y tiene menos funciones / opciones de las que preocuparse), mientras que pm2 es m谩s poderoso. Si realmente te sientes ambicioso, puedes probar pm2modo de cl煤ster o API para ayudar a monitorear las m茅tricas sobre su aplicaci贸n en ejecuci贸n

    驴Qu茅 otras configuraciones y usos interesantes tiene para herramientas de gesti贸n de procesos como forever? 隆H谩znoslo saber en los comentarios!

     

    Etiquetas:

    Deja una respuesta

    Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *