Si has llegado hasta aquí es porque seguramente ya conoces algo de nodejs, tienes tu aplicación y no sabes exactamente como publicarla o ponerla en un servidor productivo, bienvenido.
La idea de utilizar forever aplica cuando tenemos un servidor propio donde podemos instalar paquetes y modificar algunos parámetros de configuración. Existen muchas formas de publicar una aplicación de nodejs, algunas de las que conozco aparte de utilizar forever está utilizando nohup o cualquiera de las soliciones hosteadas que ofrece Amazon, Rackspace, Heroku, etc..
Antes que nada, empezaré creando una pequeña aplicación en nodejs a modo de ejemplo.. algo sencillo, solo para ilustrar como funciona, lo guardaré con el nombre de ejemplo.js.
var util = require('util'), http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.write('hello world web') res.end(); }).listen(8001); util.puts('hello world consola :: 8001'); |
Y para iniciar nuestra aplicación, normalmente iniciamos nuestro servidor haciendo esto:
$ node ejemplo.js
hello world consola :: 8001 |
Tradicionalmente si quisieramos ejecutar esta aplicación en background y dejarla ahí funcionando, podríamos utilizar el comando nohup y el carater “&” al final de la línea, esto mantendría vivo el proceso de nodejs inclusive aunque se cierre la sesión de usuario.
$ nohup node ejemplo.js > output.log & |
Lo malo de nohup es que si la aplicación llegase a fallar y provocase una excepción, ese sería el final de la aplicación y tendríamos que volver a ponerla en marcha..
Pues forever hace exactamente lo mismo, pero con la diferencia que puede reiniciar la aplicación ante cualquier tipo de error. Cabe mencionar que existen herramientas específicas para este propósito tales como monit, upstar, daemontools, etc..
Conseguimos forever instalándolo vía npm desde la consola.
[sudo] npm install forever |
Y una vez instalado se tienen 4 parámetros básicos que son las siguientes: start, stop, restart, list, aunque en cada actualización incluyen nuevos:
$ forever help: usage: forever [action] [options] SCRIPT [script-options] help: help: Monitors the script specified in the current process or as a daemon help: help: actions: help: start Start SCRIPT as a daemon help: stop Stop the daemon SCRIPT help: stopall Stop all running forever scripts help: restart Restart the daemon SCRIPT help: restartall Restart all running forever scripts help: list List all running forever scripts |
Y para inicializar nuestro servidor de nodejs con nuestra aplicación
$ forever start ejemplo.js
hello world consola :: 8001 |
Y podemos confirmar que la aplicación ya está funcioando, escribiendo en la consola ps aux | grep ejemplo.js o abriendo un navegador y escribiendo en él http://localhost:8001
$ ps aux | grep ejemplo.js 15395 10:41 0:00 /usr/local/bin/node /usr/local/lib/node_modules/forever/bin/monitor ejemplo.js 15399 10:41 0:01 /usr/local/bin/node /home/jack/Public/ejemplo.js |
Para detener el proceso, una vez teniendo su número único de proceso (PID), utilizando el comando kill lo podemos dar de baja (ojo, porque el proceso que se debe de matar es el de forever):
$ kill 15395 |
Y es todo 😀 , éste es uno de los métodos más fáciles para ejecutar nuestra aplicación de nodejs y ponerla en producción.. quizás en otro post hable un poco sobre como utilizar nginx o apache proxy para dejar de utilizar el puerto 8001 y cambialo por un 80.
Happy Coding!
Hola, buen Post, yo he usado PM2 para correr algunas aplicaciones en producción, en tu opinión y/o experiencia sabrás cual tiene mejor performance el que mencionas o PM2,
Gracias y saludos