J'ai écrit une application Node.js, je cherche à la faire fonctionner sur une de nos machines de production. Cela semble être une demande assez courante, mais je n'arrive pas à trouver une solution adéquate. N'y a-t-il pas de solutions établies pour déployer des applications Node.js de production ?
L'application est simple (<100 LOC), mais elle doit être très efficace, fiable et pouvoir fonctionner en continu pendant des années sans redémarrage. Elle sera exécutée sur un grand site, avec des dizaines de connexions par seconde. (l'application n'est pas utilisée comme un serveur web, elle a seulement une API JSON)
Voici les approches que j'ai envisagées mais dont je ne suis toujours pas sûr :
Utilisation d'un cadre (ex. Express)
Étant donné que l'application doit être très performante et qu'elle est très simple, je veux éviter d'ajouter du superflu sous la forme d'un framework.
Démarrer le serveur avec nohup
Le principal problème ici concerne la gestion des exceptions. Nous ne voulons (évidemment) pas que le serveur entier se bloque à cause d'une exception. D'après ce que j'ai compris, le fait d'envelopper l'ensemble de l'application dans un fichier de type try {} catch {}
ne sera d'aucune utilité car l'interpréteur Javascript est laissé dans un état imprévisible après une exception. Est-ce exact ?
En utilisant quelque chose comme Forever
J'ai installé Forever sur une de nos machines FreeBSD et il était très bogué. Il a fini par engendrer des processus sans fin qui ne pouvaient pas être tués par Forever. Je devais lancer kill -9
pour récupérer ma machine et je ne me sens pas très confiant pour faire tourner une application de production sur Forever. Il semble également que Upstart (outil similaire, mais plus générique) ne fonctionne pas sur FreeBSD.
Solutions hébergées (par exemple Heroku, Rackspace, Amazon EC2, etc.)
C'est probablement la solution la plus simple, mais nous avons déjà un matériel sérieux pour le reste de nos serveurs web. Pour des considérations financières, cela n'a pas de sens.
Il doit bien y avoir une solution établie à ce problème ? Est-ce que quelque chose m'échappe ?