Node.js: reinicios elegantes y tiempo de actividad del servidor, ¿cómo?

He estado trabajando en una aplicación en tiempo real utilizando Node.js y Socket.io , y me gustaría llevarlo de la etapa de prueba local para probarlo con algunos de nuestros usuarios. El problema es que si cierro la sesión ssh en mi servidor, también detiene el servidor que comencé a usar node app.js

Pensé en usar nohup, pero ocasionalmente obtengo fallas de segmentación u otros errores aleatorios que hacen que el servidor no funcione. Necesito 1) saber cuándo (y, con suerte, por qué) se estrelló mi servidor, de modo que ambos puedan mejorarlo para que se bloquee menos y asegurarme de reiniciarlo. Además, no puedo estar despierto las 24 horas del día, los 7 días de la semana, para reiniciar el servidor, por lo que tener algún tipo de daemon sería maravilloso.

Descubrí que forever disponible a través de npm, pero no es compatible con versiones de Node más recientes que 0.8.x y estoy ejecutando 0.9.1 , y no parece que se mantenga muy bien.

También me topé con la distribution pasada y up , pero la documentación y los ejemplos de cómo crear una aplicación decente al usarlos parecen faltar.

Luego está esta respuesta usando los módulos cluster y os . https://stackoverflow.com/a/10997753/1883464

Pero Node lista el clúster como experimental http://nodejs.org/api/cluster.html

Con la falta de respuestas, ejemplos y discusión sobre cómo mantener los servidores Node en funcionamiento (¡y actualizar su código!) En un entorno de producción real, estoy empezando a sentir que soy la primera persona que desea implementar su aplicación. 😉 De alguna manera, estoy seguro de que hay algunas respuestas comunes a este problema que no he encontrado.

El sistema de inicio provisto por el sistema operativo proporciona muchas ventajas sobre cualquier módulo Node.js. Conectarse al sistema init es la única forma de asegurar que su aplicación se inicie automáticamente después de un reinicio.

Usamos Ubuntu y Upstart con mucho éxito. Upstart reiniciará su aplicación al bloquearse, y puede configurar el ID de usuario / grupo antes de ejecutar su proceso. No se ejecute como raíz .

Escribir archivos de Upstart es un poco Procfile , usamos Node Foreman para generar y exportar automáticamente un conjunto de archivos de Procfile desde nuestras aplicaciones Procfile .

 npm i -g foreman cd MY_APP nf export -o /etc/init 

Esto colocará un conjunto de archivos de sudo start foreman en /etc/init que se puede iniciar y detener con sudo start foreman y sudo stop foreman .

Upstart no es la única solución aquí, y la anterior puede adaptarse para adaptarse a otros sistemas operativos según sea necesario. En Redhat recomiendo mirar en systemd . No recomendaría usar Mac OSX para la producción, pero en un apuro se ha launchd .