Hosting Node.js e MongoDB

node.js-mongoDbLa maggior parte dei virtual private server (comunemente VPS) presentano configurazioni basate su Apache – MySQL – PHP quindi se si ha la necessità di deployare un’applicazione basata su Node.js bisogna impostare alcune configurazioni che verranno di seguito riportate. Prima di iniziare volevamo far presente che il vps su cui verranno eseguite è un server LAMP (CentOS 6.4 x86-64, Apache 2.2.x, MySQL 5.5.x, PHP 5.4.x ) .

La prima cosa da fare è aggiornare il sistema lanciando il seguente comando da shell:

yum -y update

Una volta eseguiti gli aggiornamenti provvediamo ad installare Node.js ed NPM (Package manager per Node.js)

yum install nodejs
yum install npm

Attenzione, nel caso in cui il package manager yum non riesca a trovare nodejs e npm vuol dire che nel sistema non è stato abilitato il repositiry epel. Nel caso in cui ci sia la necessità di abilitare tale repository occorre eseguire le seguenti istruzioni da shell:

wget http://download.fedoraproject.org/pub/epel/6
/x86_64/epel-release-6-8.noarch.rpm
rpm -ivh epel-release-6-8.noarch.rpm

Per coloro che avessero un altro sistema e volessero installare Node.js tramite il proprio package manager, è possibile far riferimento alla seguente guida:

https://github.com/joyent/node/wiki/Installing-Node.js-via-package-manager

Una volta eseguita l’installazione verifichiamo che Node.js ed il relativo package manager (NPM) siano stati installati correttamente digitando i seguenti comandi da shell:

node -v
npm -v

L’output di questi due comandi restituisce le versioni di Node.js e NPM installate sul sistema, viceversa vuol dire che durante l’installazione qualcosa è andato storto ed in modo particolare bisogna controllare se sono state opportunamente settate le variabili di ambiente per l’esecuzione dei precedenti comandi.
Giunti a questo punto, in una cartella a nostra scelta, creiamo un file e lo chiamiamo app.js, all’interno del quale implementeremo una semplice applicazione Node.js, il classico “Hello World”.

require('http').createServer(function (req, res) {
  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end('Hello <b>World!</b>');
}).listen(3000);

Per avviare la nostra prima app digitiamo il seguente comando da shell e di seguito dal browser inserendo l’url http://miodominio.xxx:3000. Il server risponderà mostrandoci il messaggio “Hello World!”, il che significa che fino a questo punto la configurazione è stata eseguita correttamente.

node PATH/app.js

Node.js consente di creare applicazioni di rete che non per forza debbano essere delle web application, si pensi a sistemi di chat o scambio dati real time, addirittura è possibile creare dei nuovo protocolli di comunicazione, insomma si tratta di una tecnologia estremamente potente che ha basato il suo successo sulla sua estrema semplicità.
Nel caso in cui volessimo sfruttare Node.js per creare web application che risiedono sul vps dobbiamo eseguire delle ulteriori configurazioni. La prima cosa da fare è assicurarsi che sul server web Apache siano caricati i moduli proxy, proxy_http e rewrite, dopo di che nella configurazione del virtual host bisogna aggiungere le seguenti direttive:

ProxyRequests off
 
Order deny,allow
Allow from all
 
 
ProxyPass http://localhost:3000/
ProxyPassReverse http://localhost:3000/

Per chi avesse un vps con hosting gestito tramite Plesk questa configurazione va inserita nel file vhost.conf da creare, se non presente, al seguente PATH /var/www/vhosts/tuodominio.xxx/conf/.
Non resta che riavviare il web server Apache in modo che acquisisca la nuova configurazione e provare a digitare la url del nostro dominio sul browser; dovremmo vedere a video il solito messaggio di “Hello World!” ovviamente questo solo se l’applicazione Node.js precedentemente creata è stata avviata.
In alcuni casi se il server non dovesse ottenere le impostazioni da noi volute vi è la necessità di lanciare il seguente comando e poi procedere al riavvio del servizio web:

/usr/local/psa/admin/bin/httpdmng --reconfigure-domain tuodominio.xxx

Sin qui tutto sembra funzionare bene l’unico problema che potrebbe verificarsi in caso di crash dell’applicazione o riavvio del server è che occorre riavviare manualmente l’applicazione Node.js. Ci sono diverse strade che si possono intraprendere per ovviare a ciò, costruire uno script bash che venga eseguito all’avvio del sistema e che tenga presente i casi di crash e quindi in modo del tutto automatico riavvii la nostra app, oppure affidarsi a strumenti come Forever (https://github.com/nodejitsu/forever) o PM2 (https://github.com/Unitech/pm2) che fanno quanto detto e la cui documentazione si può trovare ai link segnalati.
Con Node.js si possono impiegare la maggior parte di database server oggi presenti sul mercato sia essi SQL che NoSQL, in modo particolare ritengo che una buona accoppiata sia quella Node.js e MongoDB in quanto si possono costruire sistemi che forniscono alte prestazioni e facilmente scalabili. Vediamo come installare MongoDB.
Il primo step è quello di configurare yum creando un file denominato mongodb.repo al seguente path /etc/yum.repos.d/ al cui interno andremo a specificare le impostazioni del repository:

[mongodb]
name=MongoDB Repository
baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64/
gpgcheck=0
enabled=1

Salvato il file si può procedere con l’installazione vera e propria:

yum install mongo-10gen mongo-10gen-server

Maggiori informazioni riguardanti l’installazione di MongoDB si possono trovare al seguente link: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat-centos-or-fedora-linux/
L’ultimo passaggio è testare se il database sia stato correttamente installato quindi da shell digitiamo i seguenti comandi:

mongo
db.test.save( { a: 1 } )
db.test.find()

L’output dei comandi digitati deve essere l’insieme dei documenti presenti nella collection test in questo caso vi è un solo oggetto con una singola proprietà a:1.
Se non vengono visualizzati messaggi di errore siamo pronti ad usare il sistema appena configurato e costruire splendide applicazioni.

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Fornisci il tuo contributo!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *