Ejecución de aplicaciones de node con Forever

E

 

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!

 

About the author

Ramiro de la Vega

Bienvenido a Pharos.sh

Soy Ramiro de la Vega, Estadounidense con raíces Españolas. Empecé a programar hace casi 20 años cuando era muy jovencito.

Espero que en mi web encuentres la inspiración y ayuda que necesitas para adentrarte en el fantástico mundo de la programación y conseguir tus objetivos por difíciles que sean.

Add comment

Sobre mi

Últimos Post

Etiquetas

Esta web utiliza cookies propias para su correcto funcionamiento. Al hacer clic en el botón Aceptar, aceptas el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Más información
Privacidad