back to top

Hosting Node.js: possibili soluzioni

In questa lezione finale ci limiteremo a dare uno sguardo ad alcune delle possibili soluzioni hosting per pubblicare le applicazioni web realizzate in Node.js. Ci soffermeremo poi su Now, soluzione hosting di Zeit e mostreremo come usarla attraverso qualche semplice esempio. Sono essenzialmente quattro i motivi per cui vedremo come usare Now invece di altre soluzioni hosting:

  • Now è ideale per chi vuole una soluzione estremamente semplice da usare. Permette di pubblicare la propria applicazione eseguendo dei comandi, facili da ricordare, direttamente dalla shell, senza preoccuparsi della gestione e configurazione dei server.
  • È possibile mettere in produzione un’applicazione in pochi semplicissimi passi eseguendo dei comandi all’interno della shell.
  • Now usa HTTP/2.
  • È disponibile un piano gratuito che può essere utilizzato per iniziare a usare il servizio e per pubblicare semplici progetti per hobby, didattica o applicazioni web open source.
Hosting applicazione Node.js su server

Quando si vuole pubblicare un’applicazione realizzata con Node.js bisogna considerare diversi fattori. Sono, inoltre, essenzialmente due le strade che si possono intraprendere:

  • Usare dei servizi o piattaforme che si occupano della manutenzione, configurazione e gestione dei server e che consentono di focalizzarsi al 100% sullo sviluppo dell’applicazione.
  • Occuparsi della configurazione e gestione dei server.

Nel primo caso esistono varie compagnie che offrono la possibilità sia di pubblicare un’applicazione sia di provvedere alla configurazione e gestione del server al posto nostro o mettendo a disposizione degli strumenti estremamente semplici da usare. Alcune di queste sono Cloud66 e nanobox. Un’altra possibilità interessante è offerta da Heroku che, oltre ad offrire un’eccellente documentazione, permette di pubblicare un’applicazione o richiedere di allocare maggiori risorse per la stessa in pochi passi. Inoltre, Heroku si integra alla perfezione con servizi di terze parti, software di controllo versione distribuito e piattaforme CI come Travis CI. Heroku offre un piano gratuito con alcune limitazioni che può essere ideale per chi vuole sperimentare e familiarizzare con il servizio. Uno dei difetti di Heroku e piattaforme simili è che, man mano che si richiede di allocare maggiori risorse o di integrare altri servizi, il prezzo lievita velocemente. Esistono numerosi servizi simili a Heroku, fra i più interessanti vi sono Azure di Microsoft, AWS Elastic Bean Stalk di Amazon, Google Cloud Platform, Open Shift e Clever Cloud.

Chi, invece, preferisse occuparsi interamente della gestione dei server e configurare l’ambiente in cui far girare un’applicazione partendo più o meno da zero, può provare a usare un virtual private server (VPS). Si tratta di una soluzione abbastanza semplice e scalabile che fornisce il giusto compromesso fra costi e libertà di configurazione. Un VPS fornisce il controllo completo all’utente e dà la possibilità di selezionare il sistema operativo da installare, gestire gli utenti, configurare firewall e politiche di sicurezza, inizializzare e gestire i database e così via. Esistono numerose alternative anche in questo caso. Fra queste, Digital Ocean offre delle soluzioni interessanti a prezzi contenuti e mette a disposizione un vasto numero di guide che spiegano come configurare i diversi servizi.

Il consiglio resta comunque quello di cercare maggiori informazioni sulle diverse soluzioni disponibili e magari non elencate in questa lezione e trovare il servizio hosting che meglio si adatta alle proprie esigenze.

Usare Zeit Now per pubblicare un’applicazione Node.js

In questa lezione vedremo, invece, un esempio veloce su come utilizzare Zeit Now per pubblicare un’applicazione. Nel nostro caso ci limiteremo a creare una banalissima applicazione usando i moduli nativi di Node.js. Una volta creato un’account, utilizzeremo il piano hosting gratuito che ha alcune limitazioni tra cui l’impossibilità di usare un proprio dominio. Le nostre applicazioni avranno quindi un indirizzo del tipo nome_del_progetto.now.sh.

Per prima cosa installiamo globalmente Now CLI lanciando il seguente comando:

npm install -g now

Al termine dell’installazione, potremo usare all’interno della shell (è per questo motivo che abbiamo installato Now CLI globalmente usando l’opzione -g) il comando now –version per verificare che non si siano verificati errori.

$ now --version
8.2.5

Creiamo poi una nuova directory, spostiamoci al suo interno e lanciamo il seguente comando per inizializzare il progetto:

npm init

Verrà creato un file package.json con il seguente contenuto (abbiamo deliberatamente lasciato alcuni campi vuoti):

{
  "name": "now_app_deployment",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "author": "",
  "license": "ISC"
}

Creiamo ora un file index.js in cui inseriremo il seguente frammento di codice.

const http = require('http');

const port = process.env.PORT || 3000;

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Il solito Hello World!');
}).listen(port, () => console.log('Server avviato...'));

Modifichiamo quindi il file package.json e aggiungiamo un nuovo script in modo da poter lanciare la nostra applicazione digitando semplicemente npm start.

{
  "name": "now_app_deployment",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js"
  },
  "author": "",
  "license": "ISC"
}

Siamo pronti a pubblicare la nostra applicazione. Per prima cosa effettuiamo il login dalla shell digitando now login e inserendo la nostra mail.

login zeit now attraverso l'uso della shell dei comandi

Dopo aver premuto il tasto INVIO, comparirà un messaggio col quale ci viene suggerito di controllare la casella di posta elettronica dell’indirizzo inserito per completare la procedura di autenticazione.

comando now login in attesa di conferma per completare la procedura di autenticazione

Dovremo ora entrare nella nostra casella di posta elettronica e confermare l’accesso, aprendo nel browser il link presente nella mail che abbiamo ricevuto.

Mail di conferma login zeit now

Cliccando sul link che abbiamo ricevuto via mail, verrà completata la procedura di login. (Possiamo anche eseguire l’accesso al nostro profilo sul sito Zeit.co ma dovremo ovviamente ripetere una procedura simile a quella appena effettuata) Ora possiamo finalmente pubblicare la nostra applicazione.

Conferma avvenuto login zeit now

A questo punto per pubblicare la nostra applicazione, ci basterà lanciare il comando:

now

All’interno della shell verrà mostrato lo stato corrente del processo di pubblicazione. Allo stesso modo, visitando l’indirizzo che ci viene fornito, possiamo vedere, all’interno del browser, quali sono i vari passaggi che vengono eseguiti in tempo reale.

output nella shell del primo upload dei file usando il comando now
output nel browser del primo upload dei file usando il comando now

Sul server verranno installate eventuali dipendenze col comando npm install e verrà poi avviata l’applicazione con npm start.

now primo upload file completato

A processo completato potremo visualizzare la nostra applicazione all’indirizzo che è stato generato. È importante sottolineare che viene creato un indirizzo diverso ogni volta che eseguiamo il comando now. In questo modo avremo a disposizione diverse versioni della nostra applicazione.

Applicazione node nel browser

A questo punto possiamo anche visualizzare il codice sorgente all’interno del browser, basta aggiungere ‘_src’ alla fine dell’indirizzo.

https://nowappdeployment-dmsskwawwg.now.sh/_src

La prima volta che pubblichiamo un nuovo progetto, il processo è più lento. In seguito a modifiche del nostro progetto, possiamo lanciare nuovamente il comando now per aggiornare l’applicazione. In questo caso la procedura sarà più rapida rispetto alla prima pubblicazione.

Apportiamo quindi qualche modifica al nostro progetto e lanciamo nuovamente il comando now. Verrà ripetuto lo stesso procedimento appena visto, ma verrà creata una nuova versione della nostra applicazione consultabile al nuovo indirizzo indicato.

now secondo upload file completato

Possiamo visualizzare le diverse versioni caricate online con il comando now ls

comando now ls per visualizzare le diverse versioni dell'applicazione caricate sul server

Possiamo altresì creare un alias per una versione dell’applicazione. Dal momento che stiamo usando la versione gratuita, potremo solo creare un’alias per il dominio di secondo livello ma continueremo a usare il dominio now.sh. A partire dal piano hosting Premium in su, possiamo registrare un nuovo dominio di primo livello e associarlo alla versione dell’applicazione che preferiamo in modo analogo a quello che vedremo in questa lezione. Bisognerà solo controllare e eventualmente modificare le configurazioni dei record DNS nel pannello di controllo del sito della compagnia da cui abbiamo comprato il dominio stesso. (Zeit permette di comprare un dominio direttamente da linea di comando. In questo modo possiamo saltare il passaggio aggiuntivo della configurazione dei record DNS).

comando now alias

Ora potremo visualizzare l’applicazione digitando semplicemente:

https://nowappdeployment.now.sh
Visualizzazione dell'applicazione Node.js nel browser dopo esecuzione comando now alias

Il comando now alias ls permette poi di visualizzare tutti gli alias creati.

Output comando now alias ls

Per concludere modifichiamo nuovamente il file index.js e package.json come segue.

// file index.js

const http = require('http');

const port = process.env.PORT || 3000;
const lang = process.env.LANG || 'en'; 
const pin  = process.env.SECRET_PIN || '****';

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    if (lang === 'it') {
        res.end('PIN segreto: ' + pin);
    } else {
        res.end('Secret PIN: ' + pin);
    }
}).listen(port, () => console.log('Server avviato...'));

Nel file index.js controlliamo se sono state settate delle variabili d’ambiente. In tal caso mostriamo il valore del PIN segreto (cosa che ovviamente non andrebbe mai fatta in un’applicazione reale) in inglese o in italiano a seconda del valore della costante lang.

// file package.json

{
  "name": "now_app_deployment",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "node index.js",
    "now-start": "node index.js",
    "build": "echo 'esecuzione dello script BUILD'",
    "now-build": "echo 'esecuzione dello script BUILD da parte di NOW'",
    "deploy": "now -e LANG=it -e SECRET_PIN=@secret_pin"
  },
  "author": "",
  "license": "ISC"
}

Nel file package.json abbiamo aggiunto alcuni comandi nuovi. Intanto definiamo sia i comandi start che build, ma aggiungiamo anche now-start e now-build che verranno eseguiti sul server durante la fase di configurazione della nostra applcazione. Abbiamo poi aggiunto il comando deploy che useremo per pubblicare la nostra applicazione. Notate che abbiamo usato il comando now con l’opzione -e. In questo modo possiamo definire delle variabili d’ambiente. In questo caso settiamo il valore di LANG pari alla stringa ‘it’. Per quanto riguarda SECRET_PIN, usiamo una sintassi particolare. Infatti, abbiamo lanciato il comando now secrets add secret_pin 1234 con il quale chiediamo di conservare in maniera protetta il valore di secret_pin a cui faremo poi riferimento nel file package.json attraverso la sintassi @secret_pin. L’uso di questa funzionalità può risultare utile per conservare sul server delle informazioni come dati di accesso a un database o token per usare l’API di servizi di terze parti.

now upload file finale completato

Aprendo il browser all’indirizzo indicato, vedremo l’ultima versione della nostra applicazione.

Versione finale applicazione pubblicata col comando now

Conclusioni

Per questa guida è tutto, spero che sia stata interessante e abbia fornito delle informazioni utili. A questo punto dovreste aver acquisito le conoscenze sufficienti per poter realizzare delle applicazioni in Node.js complete in ogni aspetto. Happy Coding!: D

Pubblicitร