Poniendo en marcha un servidor de nodejs con forever

Nodejs

Nodejs

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!

Co-fundador de Qbit Mexhico, usuario de linux, Developer en tecnologías web.. Nicaragüense, centro en basketball, primer centro en rugby y pintor los fines de semana. Ortögrafo y ambientalista psicológico (de escritorio).. ese soy yo!

Si te ha servido compártelo y difunde nuestro blog..

Facebook Twitter LinkedIn Google+ Flickr YouTube Skype 

Compartir en...Tweet about this on TwitterPin on Pinterest0Share on LinkedIn0Share on Google+0Share on Facebook0