Node.js: redémarrages gracieux et temps de fonctionnement du serveur, comment?

J'ai travaillé sur une application en temps réel à l'aide de Node.js et Socket.io , et j'aimerais le prendre à l'étape de test local pour le tester avec certains de nos utilisateurs. Le problème est que si je ferme la session ssh à mon serveur, il arrête aussi le serveur que j'ai commencé à utiliser l'application node app.js

J'ai pensé à l'utilisation de nohup, mais j'ai parfois des fautes de segmentation ou d'autres erreurs aléatoires qui abaissent le serveur. J'ai besoin de 1) savoir quand (et j'espère pourquoi) mon serveur s'est écrasé afin que je puisse tous les deux travailler pour l'améliorer pour réduire moins et assurez-vous de le redémarrer. En outre, je ne peux pas être éveillé 24 heures sur 24 et 7 jours pour redémarrer le serveur moi-même, donc avoir une sorte de daemon serait charmant.

J'ai trouvé forever disponible via npm, mais il n'est pas compatible avec les versions de Node plus récentes que 0.8.x et je suis en cours d'exécution 0.9.1 , et il ne semble pas qu'il soit bien entretenu.

Je suis également passé par la distribution et la up , mais la documentation et les exemples de construction d'une application décente qui les utilise semblent manquer.

Ensuite, il y a cette réponse en utilisant les modules cluster et os . Https://stackoverflow.com/a/10997753/1883464

Mais Node répertorie le cluster comme expérimental http://nodejs.org/api/cluster.html

Avec le manque de réponses, d'exemples et de discussions sur la mise en service des serveurs Node (et la mise à jour de leur code!) Dans un environnement de production réel, je commence à me sentir comme étant la première personne à vouloir prendre son application en déploiement 😉 D'une certaine manière, je suis sûr qu'il y a des réponses communes à ce problème que je n'ai pas trouvé.

Le système d'init fourni par le système offre de nombreux avantages par rapport à tout module Node.js. La connexion au système d'initialisation est la seule façon d'assurer que votre application démarre automatiquement après un redémarrage.

Nous utilisons Ubuntu et Upstart avec beaucoup de succès. Upstart redémarre votre application en cas de panne et peut définir l'identifiant utilisateur / le groupe avant d'exécuter votre processus. Ne pas exécuter en tant que racine .

L'écriture de fichiers Upstart est un peu douloureuse, nous utilisons Node Foreman pour générer et exporter automatiquement un ensemble de fichiers upstart à partir de nos Procfile applications.

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

Cela placera un ensemble de fichiers upstart dans /etc/init qui peut être démarré et arrêté avec le sudo start foreman et sudo stop foreman .

Upstart n'est pas la seule solution ici, et ce qui précède peut être adapté aux autres systèmes d'exploitation au besoin. Sur Redhat, je recommande de regarder systemd . Je ne recommanderais pas d'utiliser Mac OSX pour la production, mais dans un pincement, il a été launchd .