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).
Te puede interesar:Paquetes de nodes útiles que quizás no conozca- ¿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 -g
e 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 forever
directorio 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:
Te puede interesar:Ejemplos de Node.js Express: Sitios web renderizados, REST y estáticos{
// 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 pm2
modo 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!