Distribuire gratuitamente il backend di Node.js

Deploy Your Node.js Backend for Free
Deploy Your Node.js Backend for Free

Il deploy del backend della vostra applicazione la rende accessibile agli utenti previsti. Tuttavia, il passaggio da localhost al cloud può essere difficile senza le conoscenze e gli strumenti adeguati.

In questo articolo imparerete a distribuire il vostro backend Node.js su varie piattaforme, ognuna con un livello gratuito o con crediti gratuiti che vi permettono di esplorare prima la loro piattaforma senza i problemi di pagamento.

1. Contenitori Back4app

Back4app è una piattaforma cloud Platform-as-a-Service (PaaS) che consente di creare e ospitare applicazioni web di vari stack attraverso un’interfaccia utente intuitiva, uno strumento CLI dedicato e un agente AI.

La piattaforma offre vari servizi, tra cui una piattaforma Containers-as-a-Service (CaaS) nota come Back4app Containers.

Back4app containers è un servizio CaaS offerto da Back4app che consente di gestire e distribuire le applicazioni web utilizzando i container Docker.

I contenitori Back4app offrono un monitoraggio in tempo reale delle applicazioni con metriche cruciali come CPU, RAM, Bandwith e log delle applicazioni per aiutarvi a identificare i colli di bottiglia e ottimizzare le prestazioni delle applicazioni.

Offre anche distribuzioni automatiche, che non hanno tempi di inattività per gli aggiornamenti. Ciò si ottiene garantendo che i nuovi container siano pronti a funzionare quando si distribuisce un nuovo commit o si modifica la configurazione del container, evitando interruzioni del servizio durante le distribuzioni.

La distribuzione con i container di Back4app è un processo semplice che prevede la connessione del repository GitHub della vostra applicazione (file Docker incluso) all’applicazione Github di Back4app, l’aggiunta delle variabili ambientali e un clic sul pulsante di distribuzione.

Come distribuire il backend Node.js su Back4app Containers?

Per distribuire l’applicazione Node.js sui container di Back4app, è necessario

Dopo aver effettuato l’accesso al proprio account Back4app e aver installato l’app GitHub sul proprio account GitHub, concedere all’app Back4app l’accesso al repository che si desidera distribuire.

Assicurarsi che il repository contenga un file Docker; di seguito è riportato un file Docker di esempio che si può usare per la propria applicazione Node.js:

# Specify base image
FROM node:18-alpine

# Specify working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy source code
COPY . .

# Expose port 8080
EXPOSE 8080

# Run the app
CMD ["npm", "start"]

Quindi, creare una nuova applicazione Back4app facendo clic sul pulsante “NEW APP” nell’angolo in alto a destra dello schermo. Quindi, selezionate l’opzione Containers as a Service, come mostrato nell’immagine sottostante.

Creare una nuova app su Back4app

Selezionate l’applicazione che volete distribuire dall’elenco delle applicazioni a cui avete concesso l’accesso all’applicazione GitHub di Back4app.

Selezionare il repository GitHub

Compilare le variabili ambientali associate all’applicazione e fare clic sul pulsante Crea applicazione.

Riempire le variabili d'ambiente Back4app

Facendo clic sul pulsante Crea app si avvia il processo di distribuzione e si visualizzano i registri di distribuzione in tempo reale per monitorare il processo di distribuzione.

Se si verifica un errore durante il processo di distribuzione, è possibile consentire all’agente AI di Back4app di analizzare gli errori dai registri e offrire possibili soluzioni. In alternativa, è possibile consultare la guida alla risoluzione dei problemi di Back4app.

Una volta distribuita l’applicazione, è possibile accedervi con l’URL live nell’angolo in alto a sinistra della dashboard.

Distribuzione dei contenitori Back4app

Il livello gratuito del contenitore Back4app offre 0,25 CPU, 256 MB di RAM e 100 GB di trasferimento, ideale per lo sviluppo e l’apprendimento. Per le applicazioni di produzione, sarebbe ideale passare a uno dei piani a pagamento disponibili.

2. Render

Render è una piattaforma cloud che fornisce una soluzione platform-as-a-service (PaaS) per la distribuzione di applicazioni web di vari stack di sviluppo, tra cui Node.js.

Con Render, i servizi vengono scalati verso l’alto o verso il basso in base all’utilizzo medio di CPU e/o memoria, eliminando la necessità di prevedere o sovraprovisionare i servizi per servire un traffico elevato.

Render supporta anche i deploy zero downtime, assicurando che l’applicazione non venga mai interrotta, anche quando la build si rompe.

Per ottenere questo risultato, esegue controlli sullo stato di salute ogni volta che si distribuisce una nuova versione dell’applicazione e sostituisce la vecchia versione solo se la nuova versione supera il controllo sullo stato di salute.

Render include anche molte funzionalità, alcune delle quali comprendono ambienti di anteprima, un’API REST dedicata, dischi persistenti, rete privata e molto altro.

La distribuzione dell’applicazione su Render comporta la connessione dell’account GitHub/GitLab alla piattaforma e la configurazione dei dettagli di distribuzione, comprese le variabili ambientali per l’applicazione.

Come distribuire il backend Node.js su Render

Per distribuire la vostra applicazione su Render, avete bisogno di un account attivo; se non ne avete uno, potete registrarvi gratuitamente.

Accedere al proprio account e navigare nella propria dashboard. Nella dashboard, fare clic su “Servizi Web“.

creare un nuovo servizio web

Successivamente, vi verrà chiesto di collegare il vostro account GitHub/GitLab a Render o di fornire un repository Git pubblico.

Collegare GitHub/GitLab a Render

Dopo aver collegato il proprio account GitHub e aver selezionato il repository che si desidera distribuire, si verrà indirizzati a un modulo di configurazione, in cui si dovranno inserire dettagli come il nome dell’applicazione, il comando di compilazione, le variabili ambientali, ecc.

configurare il rendering

Compilate i dettagli richiesti e fate clic sul pulsante “Create Web Service“. In questo modo si avvia il processo di distribuzione e si accede a una schermata in cui è possibile monitorare lo stato di distribuzione e i registri dell’applicazione in tempo reale.

Registri di distribuzione dei rendering

Se si verifica un errore durante la distribuzione, è possibile analizzare l’errore dai registri di distribuzione e risolvere i problemi per una distribuzione corretta.

Il piano gratuito di Render offre 512 MB di RAM e 0,1 CPU per i servizi web. Se la vostra applicazione richiede più risorse, potete considerare i piani a pagamento.

3. Fly

Fly è una piattaforma cloud che fornisce una rete globale di distribuzione delle applicazioni.

Permette di distribuire ed eseguire le applicazioni vicino ai vostri utenti in tutto il mondo sfruttando una rete distribuita di server, riducendo così in modo significativo la latenza e migliorando le prestazioni del vostro server.

Fly offre micro-VM Linux complete note come “Fly Machines”. Le macchine Fly hanno un tempo di avvio relativamente veloce, pari a circa 300ms. Potete anche mettere in pausa le vostre macchine quando sono inattive, assicurandovi di pagare solo i servizi che consumate.

Il deploy dell’applicazione su Fly richiede l’esecuzione di alcuni comandi con lo strumento CLI dedicato.

Come Deployare il Tuo Backend Node.js su Fly?

Per distribuire la vostra applicazione Node.js su Fly, avrete bisogno di:

  • Un account Fly, se non ne avete uno potete registrarvi gratuitamente.
  • Lo strumento a riga di comando flyctl installato sul computer locale.

Se sul sistema non è installato lo strumento flyctl CLI, è possibile installarlo utilizzando il comando seguente:

#macOS/Linux
curl -L https://fly.io/install.sh | sh

#windows
pwsh -Command "iwr https://fly.io/install.ps1 -useb | iex"

Quindi, accedere al proprio account Fly eseguendo il comando seguente:

fly auth login

Eseguendo il comando di cui sopra, si aprirà il browser predefinito e si chiederà di accedere al proprio account Fly.

Dopo aver effettuato l’accesso, navigare nella directory dell’applicazione che si desidera distribuire ed eseguire il comando seguente:

fly launch

Quando si esegue il comando precedente, Fly rileverà automaticamente che si sta cercando di distribuire un’applicazione Node.js e imposterà la distribuzione.

Strumento Fly CLI

Lo strumento CLI mostrerà la configurazione dell’applicazione per l’approvazione dell’utente prima di distribuirla. Se le configurazioni sono soddisfacenti, si può procedere rispondendo “Y” alla richiesta, altrimenti si può rispondere “N”.

Rispondendo a N si aprirà il browser e si accederà a una pagina in cui è possibile configurare l’applicazione al di là della configurazione predefinita fornita da Fly, come mostrato nell’immagine seguente.

Configurazione del volo

Tuttavia, a differenza di altre opzioni trattate in questo articolo, Fly richiede l’aggiunta dei dati della carta prima di distribuire l’applicazione. Tuttavia, non vi verrà addebitato nulla fino a quando non supererete i 5 dollari di risorse.

4. Amazon Web Services (AWS)

Amazon Web Services (AWS) è un fornitore di Infrastructure as a Service (IaaS) che fornisce componenti fondamentali dell’infrastruttura informatica tramite Internet.

AWS consente di creare e gestire ambienti virtualizzati senza dover investire e mantenere hardware fisico.

Tra gli altri fornitori di servizi cloud, AWS offre il maggior numero di funzionalità, dalle tecnologie infrastrutturali come l’informatica e i database alle tecnologie emergenti come l’AI e il ML.

È anche l’ambiente di cloud computing più sicuro disponibile sul mercato, supportato da un’ampia gamma di strumenti per la sicurezza del cloud, con oltre 300 servizi e funzionalità per la sicurezza, la conformità e la governance, nonché il supporto per 143 standard di sicurezza e certificazioni di conformità.

Inoltre, AWS è una piattaforma matura con una comprovata esperienza (17 anni) di affidabilità, sicurezza e prestazioni.

Tuttavia, la distribuzione dell’applicazione su AWS è più complessa rispetto ad altre piattaforme come Back4app e Render.

È possibile ottenere questo risultato in vari modi; tuttavia, questa esercitazione tratterà il più popolare, Amazon Elastic Compute Cloud (Amazon EC2).

Come distribuire il backend Node.js su AWS?

EC2 è un servizio web fornito da Amazon che consente di affittare server virtuali, noti come istanze, nel cloud.

Per creare un’istanza EC2, è necessario disporre di un account AWS; se non lo si possiede, è possibile registrarsi gratuitamente.

Dopo aver effettuato l’accesso al proprio account Amazon, creare un’istanza EC2 (è possibile saltare l’ultimo passaggio dell’articolo collegato in precedenza, che richiede di connettersi all’istanza EC2 utilizzando SSH).

È possibile controllare l’istanza appena creata nella dashboard di EC2 alla voce “istanze”.

Istanza AWS EC2

Quindi, collegarsi all’istanza EC2 utilizzando la Console istanza EC2. Dopo aver seguito i passaggi delle istruzioni sopra riportate, nel browser dovrebbe aprirsi un terminale web.

Console AWS EC2

Quindi, passare all’utente root eseguendo il comando seguente:

sudo su -

Eseguendo il comando sopra riportato, il contesto utente passerà all’utente root con privilegi elevati.

Questo comando, composto da “sudo” per le funzionalità di superutente, “su” per il passaggio a utente e il trattino (“-“), assicura il caricamento delle variabili d’ambiente e delle configurazioni dell’utente root.

Quindi, installare il Node Version Manager (NVM) eseguendo il comando seguente:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

Quindi, attivate NVM nella sessione corrente del terminale eseguendo il comando seguente:

. ~/.nvm/nvm.sh

Quindi, installate Node.js utilizzando NVM eseguendo il comando seguente:

nvm install node

Quindi, installate Git eseguendo il comando seguente:

sudo yum update
sudo yum install git

È possibile confermare che Node.js e Git sono stati installati correttamente sull’istanza EC2 eseguendo il comando seguente:

node -v && git -v

Se l’installazione è andata a buon fine, si dovrebbero vedere i numeri di versione stampati sulla console, come mostrato nell’immagine seguente.

Installazione riuscita di Git e Node.js

Quindi, collegare la chiave SSH di GitHub all’istanza EC2. Dopo aver configurato e aggiunto la chiave SSH, eseguire il comando seguente per clonare il repository nell’istanza EC2:

git clone <YOUR_APPLICATION_URL>

Il comando precedente clona l’applicazione nell’istanza EC2.

AWS: aggiungere github ssh

Passare alla cartella dell’applicazione su EC2 ed eseguire il comando seguente per installare tutte le dipendenze del progetto.

npm install

Quindi, aggiungere le variabili d’ambiente eseguendo il comando seguente:

nano .env

Il comando qui sopra creerà e aprirà un file .env vuoto, copierà le vostre variabili ambientali, le incollerà nel file e premerà control + X, quindi Y per salvare e chiudere il file.

Infine, eseguite lo script di avvio dell’applicazione, che di solito è il comando seguente:

npm start

L’esecuzione del comando precedente dovrebbe avviare l’applicazione. È possibile accedere all’applicazione distribuita utilizzando l’indirizzo DNS pubblico, che si trova nella dashboard dell’istanza.

Il livello gratuito per le istanze EC2 in AWS offre 750 ore mensili per le istanze t2.micro o t3.micro con Linux, RHEL o SLES, a seconda della regione.

Allo stesso modo, per le istanze Windows, offre 750 ore al mese per istanze t2.micro o t3.micro in base alla regione.

Inoltre, indipendentemente dal tipo di istanza, include 750 ore al mese per un indirizzo IPv4 pubblico.

Tuttavia, il livello gratuito è disponibile solo per i nuovi clienti AWS per i 12 mesi successivi alla data di iscrizione ad AWS.

5. DigitalOcean

DigitalOcean è una piattaforma Infrastructure as a Service (IaaS) che offre l’accesso alle macchine virtuali sottostanti che supportano le vostre applicazioni, consentendovi di configurare lo spazio su disco, allocare la memoria e impostare la rete.

DigitalOcean offre diversi prodotti di cloud computing come le droplet, che sono macchine virtuali Linux. Oltre alle droplet, offre un servizio Kubernetes gestito e funzioni serverless.

DigitalOcean offre anche sicurezza di rete con firewall cloud, bilanciatori di carico, un cloud privato virtuale, IP flottanti, DNS, IPv6 e protezione DDoS.

Il deploy dell’applicazione Node.js su DigitalOcean è un processo relativamente semplice rispetto ad altre opzioni IaaS.

Si tratta di creare un Droplet, configurarlo, impostare la macchina virtuale Linux e un reverse proxy adatto alle vostre esigenze.

Distribuire il backend Node.js su una droplet DigitalOcean?

Per distribuire la vostra applicazione Node.js sulla piattaforma avete bisogno di un account DigitalOcean; potete iscrivervi gratuitamente se non ne avete uno.

Quindi, accedere e creare un nuovo progetto (o utilizzare un progetto esistente).

Creare un nuovo progetto DigitalOcean

Nella dashboard del progetto, fare clic sul menu a tendina “Crea” nell’angolo in alto a destra dello schermo e selezionare “Droplet” per creare un nuovo droplet.

Creare una nuova droplet

Quindi, selezionare la regione di distribuzione più vicina a voi per il vostro droplet.

Quindi, selezionare il sistema operativo “Ubuntu” come immagine e “Basic” come tipo di droplet.

Quindi, selezionare le opzioni di CPU preferite.

Selezionare quindi “password” come metodo di autenticazione. In alternativa, è possibile scegliere SSH come metodo di autenticazione.

Infine, selezionare “1” come numero di droplet e assegnargli un nome host.

Dopo aver compilato i dati richiesti, fare clic sul pulsante “Crea Droplet“. In questo modo si viene reindirizzati alla propria dashboard.

Nella dashboard, selezionare la droplet appena creata e lanciare la droplet console, come mostrato nell’immagine seguente.

Avviare la console del droplet

Lanciando la console del droplet si aprirà un terminale web Ubuntu sul browser, come mostrato nell’immagine seguente.

Console droplet di DigitalOcean

Quindi, installare lo script di configurazione di Node.js eseguendo il comando seguente:

curl -sL https://deb.nodesource.com/setup_20.x | sudo -E bash -

Quindi, installare Node.js eseguendo il comando seguente:

apt-get install nodejs -y

Quindi, clonare il repository GitHub usando il comando seguente:

git clone <YOUR_GITHUB_REPOSITORY_LINK>

Installate le dipendenze del progetto eseguendo il comando seguente:

npm install

Quindi, aggiungere le variabili d’ambiente eseguendo il comando seguente:

nano .env

Il comando qui sopra creerà e aprirà un file .env vuoto, copierà le vostre variabili ambientali, le incollerà nel file e premerà control + X, quindi Y per salvare e chiudere il file.

Quindi, installare PM2 per mantenere il server in esecuzione in background:

sudo npm i pm2 -g

Quindi, avviare il server con PM2 eseguendo il comando seguente:

pm2 start main.js

Quindi, eseguire il comando seguente per assicurarsi che il server venga riavviato a ogni riavvio dell’applicazione:

pm2 startup ubuntu

Ora la vostra applicazione è in esecuzione e in ascolto sul vostro droplet (localhost). Per renderla disponibile pubblicamente, si imposterà Nginx come reverse proxy.

Eseguire il comando seguente per installare Nginx:

sudo apt install nginx

Prima di utilizzare Nginx, è necessario regolare Ubuntu ufw (Uncomplicated Firewall) per proteggere l’applicazione e garantire che solo il traffico autorizzato possa raggiungere il server web.

Eseguire il comando seguente per abilitare ufw:

ufw enable

Quindi, eseguire il comando seguente per consentire SSH, HTTP e HTTPS:

ufw allow ssh && ufw allow http && ufw allow https

Il comando precedente abilita il firewall (UFW) sul server Ubuntu a consentire le connessioni in entrata sulle porte 22 (per SSH), 80 (per HTTP) e 443 (per HTTPS).

Quindi, eseguire il comando seguente per aprire il file di configurazione predefinito di Nginx:

sudo nano /etc/nginx/sites-available/default

All’interno del file di configurazione, trovare l’oggetto location e sostituirlo con il blocco di codice sottostante:

location / {
    try_files $uri $uri/ =404;
    proxy_pass http://localhost:5050;#Replace with the port your app is running on
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
}

Nota: Per proxy_pass, è possibile sostituire il valore con qualsiasi porta su cui gira l’applicazione.

Chiudere e salvare il file(control + X, Y, ENTER). Modificando il file di configurazione con il blocco di codice sopra riportato, si imposta il reverse proxy in modo che quando si effettuano richieste alla porta 80 (per HTTP), l’applicazione in esecuzione sulla porta 5050 (o sulla porta predefinita) gestisca le richieste.

Quindi, eseguire il comando seguente per verificare se il file di configurazione di Nginx è impostato correttamente.

sudo nginx -t

Se il file di configurazione è stato impostato correttamente, si dovrebbe ottenere la risposta riportata nell’immagine seguente.

Test Nginx

Infine, riavviare Nginx eseguendo il comando seguente per assicurarsi che le modifiche apportate al file di configurazione abbiano effetto:

sudo service nginx restart

Ora è possibile effettuare richieste alla propria applicazione utilizzando l’indirizzo IPv4 pubblico del droplet.

Il livello gratuito di DigitalOcean offre ai nuovi utenti 200 dollari di crediti per accedere a tutti i servizi disponibili.

Opzioni di distribuzione a confronto

Questo articolo ha trattato cinque opzioni di distribuzione per le applicazioni Node.js. Di seguito è riportato un confronto tabellare di tutte le piattaforme trattate.

PiattaformaCategoriaStrumenti di sviluppoRisorse di livello gratuitoInformazioni sul pagamento
Contenitori Back4appPaaSDocker, App GitHub, Agente AI Back4app.– 0.25 CPU
– 256 MB di RAM
– 100 GB di trasferimento
Non richiesto
RenderPaaSApp GitHub/GitLab, link al repository pubblico– 512 MB di RAM
– 0.1 CPU
Non richiesto
FlyPaaSStrumento Fly CLI5 dollari di risorse/utilizzoRichiesto
Amazon Web Services (AWS)IaaSIstanza AWS EC2– 750 ore al mese di istanze Linux, RHEL o SLES t2.micro o t3.micro.
– 750 ore al mese di istanze Windows t2.micro o t3.micro, a seconda della regione.
– 750 ore al mese di indirizzo IPv4 pubblico.
Richiesto
DigitalOceanIaaSGoccia di Oceano Digitale200 dollari di crediti gratuiti per i nuovi utenti.Richiesto

Nel complesso, le piattaforme PaaS come Back4app, Render e Fly sono le più adatte per le applicazioni che richiedono scalabilità, flessibilità e cicli di sviluppo e distribuzione rapidi.

D’altra parte, le piattaforme IaaS come DigitalOcean e AWS sono più adatte alle applicazioni che richiedono un maggiore controllo sull’infrastruttura sottostante, configurazioni personalizzate e scalabilità senza la necessità di gestire l’hardware fisico.

Conclusione

In questo articolo abbiamo esplorato e imparato come distribuire un’applicazione Node.js utilizzando i container Back4app, Render, Fly, AWS e DigitalOcean.

Ciascuna delle opzioni discusse presenta vantaggi e compromessi. Per le piattaforme PaaS, il processo di distribuzione è più semplice.

Tuttavia, si perde la maggior parte del controllo dell’infrastruttura sottostante. Sulle piattaforme IaaS, il processo di distribuzione è complicato; tuttavia, si ha il pieno controllo dell’infrastruttura sottostante senza disporre di server fisici.

Qualunque sia l’opzione scelta, sarà necessario acquistare e collegare un nome di dominio personalizzato per renderlo veramente accessibile agli utenti.

Se vi è piaciuto questo articolo, imparate anche Come creare un’applicazione web con un database PostgresSQL.


Leave a reply

Your email address will not be published.