Che aspetto ha l'installazione di un'applicazione web node.js su un vero server di produzione?

3

Essendo nuovo nel mondo magico di node js, mi chiedo come appare l'installazione di un'applicazione web su un vero server di produzione? Finora tutti i tutorial, creare il file js che è stato avviato da una console ... e il gioco è fatto. Qualcuno ha creato una vera e propria app web mondiale che utilizza il nodo js nel back-end? Puoi descrivere come è configurato e quanto è affidabile questa infrastruttura? Vengo dal mondo di asp.net e php che richiede server web pesanti ... e non posso avere un'idea chiara sulla roba dei nodi.

    
posta joe 04.04.2013 - 15:40
fonte

3 risposte

4

Lavoro su un'applicazione web node.js che non è ancora in produzione, ma eseguiamo un'installazione del server di sviluppo in modo simile a come configurerei la produzione.

È un server Linux (CentOS in particolare, ma qualsiasi distro dovrebbe fare) con un account di servizio dedicato per l'esecuzione dell'applicazione web. La distribuzione è semplice come SCP'in file tarball fino al server e in esecuzione:

$ npm stop <app name>
$ npm install ./<app name>-<version>.tgz
$ npm start <app name>

npm consente di configurare gli script del ciclo di vita tramite package.json , ovvero come npm stop e npm start sono implementati. Per impostazione predefinita, npm start chiama node server.js se c'è un server.js nella directory di primo livello. È possibile definire facilmente il proprio script di avvio tramite package.json.

Utilizziamo il modulo demone all'avvio tramite npm start per poter eseguire l'app in background, totalmente disconnessa, con l'output reindirizzato a un file di registro. L'avvio diretto tramite server.js, tuttavia, salta il passo del daemon in modo da avere un terminale interattivo in fase di sviluppo.

Dato che usiamo npm per il packaging e l'installazione, il codice finisce per vivere sotto $ HOME / node_modules /. E ancora, questo funziona con un account utente dedicato, quindi so esattamente quali moduli sono e non sono disponibili in fase di runtime.

Per sfruttare più CPU, lo script server.js imposterà un worker (tramite il modulo cluster ) per ogni CPU e monitorarli per la morte. Se un lavoratore muore, il processo principale lo riavvia. Ci sono moduli là fuori per dare il via alla tua app e il riavvio automatico se muore, tuttavia, dato che il nostro padrone non lavora se non per far da baby-sitter agli operai, non mi preoccupo di guardare il master. Il gioco di "chi guarda gli osservatori" potrebbe continuare all'infinito.

Quando vai in produzione, ci sono solo altri tre elementi da compilare, cosa che non abbiamo ancora fatto:

  1. Load Balancing, che non fa parte dell'app stessa e non ha nulla a che fare con node.js
  2. Uno script di init per avviare e interrompere il servizio quando viene riavviata la casella del server.
  3. Quando si arresta il servizio per installare un nuovo rilascio, è necessario rimuoverlo dal pool di bilanciamento del carico e quindi reinserirlo.
risposta data 17.09.2013 - 18:54
fonte
0

Utilizza una piattaforma come servizio.

Sono stato schierato con successo a Heroku e Jit.su. Nodester sembra interessante, e ho usato Azure per .NET e, se Node.js è ugualmente valido, anche questa è una buona opzione.

Se vuoi ospitare un'app di nodo sul tuo server, puoi semplicemente eseguire node app.js sul tuo server.

    
risposta data 04.04.2013 - 15:54
fonte
-2

Mi sono imbattuto nell'incarico simile in cui ho chiesto di implementare o creare tre diversi moduli.

  1. Applicazione Web
  2. Applicazione REST
  3. Nodo

Tutte le mie richieste di applicazioni Web puntano al modulo REST che è un'implementazione puramente di servizio web Spring. Questo è prima che node.js entri in scena. Successivamente ho chiesto di aggiungere il livello del nodo tra il modulo web e il modulo REST in modo che tutte le mie richieste di applicazioni Web dovessero passare attraverso il modulo nodo e il nodo lo passasse al modulo REST e viceversa. Ciò è dovuto al fatto di considerare le esigenze aziendali e alcuni requisiti specifici.

Quindi la mia applicazione web sta avendo tutte le implementazioni html statiche che chiamano il modulo node.js attraverso la chiamata jquery ajax e sugli elementi dom di successo html sono pieni di alcuni valori.

Facciamo un esempio Ho un evento clic sul pulsante su cui chiamare jquery ajax deve essere chiamato all'applicazione nodo. Per questo nodo l'applicazione deve essere in esecuzione. Per eseguire l'applicazione node.js utilizzare il seguente comando.

$ node index.js

Dove index.js è il mio punto di partenza principale per il modulo nodo che ha qualche URL per esempio. getContactDetails

$(document).on("click", "#btnClick", function(event) {
      jQuery.ajax({ 
type : 'POST', 
url : "http://nodeserver:port/appurl", 
dataType :"json", 
data : JSON.stringify(someJSON), 
contentType : "application/json;charset=utf-8", 
success : function(data) {
    /*Some code*/},
error :function(data) {
    /*Some code*/}
    });
    });

All'interno del nodo sto dando una chiamata al modulo REST come sotto

requestObj({
            url : restUrl,
            method : "POST",
            headers : { "Content-Type" : "application/json","pubKey":composeJSON},
            body : JSON.stringify(tmp.body)
        },
        function (error, res, body) {
            indexresponseBody = JSON.stringify(JSON.parse(body).message);
        }
    );
    res.writeHead(200, {'content-type':'text/html'});
    res.write("data",indexresponseBody);
    res.end();
    
risposta data 17.09.2013 - 17:13
fonte

Leggi altre domande sui tag