Ho scritto un'app Node.js, sto cercando di farlo funzionare su una delle nostre macchine di produzione. Sembra una richiesta abbastanza comune, ma non riesco a trovare una soluzione adeguata. Non ci sono soluzioni consolidate per la distribuzione di app Node.js di produzione?Distribuzione di un server Node.js di produzione
L'app è semplice (< 100 LOC), ma deve essere molto efficiente, affidabile e potrebbe funzionare continuamente per anni senza riavviare. Sta per essere eseguito su un sito grande, con decine di connessioni al secondo. (L'applicazione non è usato come un server web, ha solo un API JSON)
Qui ci sono gli approcci Ho considerato, ma non sono ancora sicuro di:.
Utilizzando un quadro (ad esempio espresso)
Perché l'applicazione deve essere ad alte prestazioni ed è così semplice, l'aggiunta di gonfiarsi sotto forma di un quadro è qualcosa che voglio evitare.
Avvio del server con nohup
Il problema principale è con la gestione delle eccezioni, siamo (ovviamente) non vogliamo l'intero server in crash a causa di un'eccezione. Da quello che ho capito, avvolgere l'intera app in un ciclo try {} catch {}
non sarà di aiuto perché l'interprete Javascript è lasciato in uno stato imprevedibile dopo un'eccezione. È corretto?
Usando qualcosa di simile per sempre
Ho installato sempre in una macchina FreeBSD nostro ed è stato molto buggy. Finì per generare processi infiniti che non potevano essere uccisi da Forever. Ho dovuto eseguire kill -9
per riavviare la mia macchina e non mi sento troppo sicuro di eseguire un'applicazione di produzione su Forever. Sembra anche che Upstart (strumento simile, ma più generico) non verrà eseguito su FreeBSD.
soluzioni hosted (ad es. Heroku, Rackspace, Amazon EC2, etc.)
Questa è probabilmente la soluzione più semplice, ma abbiamo già un dell'hardware serio per il resto dei nostri server web. Per considerazioni finanziarie, non ha senso.
Sicuramente ci deve essere una soluzione consolidata a questo? Mi sto perdendo qualcosa?
upstart è un sostituto per sysvinit su FreeBSD. – chovy
Per la folla del 2014 che legge questo SO. 'Forever' non dovrebbe essere scontato perché ha fallito in questo caso per due anni e numerosi impegni fa. Ho avuto successo eseguendolo per gli ultimi mesi. –
Per la folla del 2015 che legge questo SO. Basta usare [PM2] (http://www.nikola-breznjak.com/blog/nodejs/using-pm2-to-run-your-node-js-apps-like-a-pro/) anziché Forever. – Nikola