Come creare e fare il deployment di un'app Node.js

Creare un'applicazione Node.js è solo la prima fase del ciclo di vita dello sviluppo software; è nel renderla accessibile, performante e resiliente in un ambiente di produzione che la distribuzione delle applicazioni diventa fondamentale. Il deployment di applicazioni web moderne comporta la selezione di un'architettura che corrisponda al profilo di traffico, alla fase del ciclo di vita e al budget delle risorse.

Che tu stia lanciando un prototipo full stack assistito dall'AI o facendo il deployment di un servizio di backend di produzione, gli ambienti cloud moderni offrono sia percorsi automatizzati che containerizzati. Questa guida illustra i concetti fondamentali dell'architettura web di Node.js, esplora le principali considerazioni sul deployment e spiega passo passo come creare un'app Node.js e farne il deployment su un'infrastruttura gestita utilizzando le quote del livello senza costi.

Qual è il runtime di Node.js?

Node.js è un ambiente di runtime JavaScript open source e multipiattaforma basato sul motore JavaScript Chrome V8. Consente a JavaScript di essere eseguito lato server al di fuori del browser web, permettendo ai tecnici di scrivere codebase full stack unificati utilizzando un singolo linguaggio di programmazione.

A differenza dei tradizionali server web multithread che generano un thread isolato del sistema operativo per ogni connessione simultanea, Node.js opera su un modello I/O non bloccante, single-thread e basato su eventi. Questa architettura rende Node.js una soluzione agile ed efficiente per la gestione di migliaia di connessioni simultanee, come API RESTful, messaggistica in tempo reale, servizi di streaming e orchestratori di agenti AI.

Deployment di Node.js tradizionale vs. piattaforme di container serverless

Quando ci si prepara a fare il deployment di un backend Node.js, selezionare l'ambiente di computing più adatto influisce direttamente sull'overhead di manutenzione, sulla velocità della scalabilità e sull'efficienza dei costi.

Funzionalità

Macchine virtuali (IaaS/VPS)

Hosting PaaS/buildpack

Container serverless moderni

Gestione dell'infrastruttura

Applicazione manuale di patch al sistema operativo, gestione del firewall e aggiornamenti del runtime

Livello di piattaforma completamente gestito con vincoli di runtime del fornitore

Infrastruttura completamente gestita; zero gestione del sistema operativo

Meccanismo di scalabilità

Scalabilità automatica delle VM basata su metriche (l'avvio delle istanze richiede alcuni minuti)

Scalabilità automatica in base al numero di istanze o ai limiti dei worker

Scalabilità automatica istantanea basata sulle richieste, inclusa la scalabilità fino a zero

Formato della pacchettizzazione

File sorgente non elaborati, servizi systemd o gestori di processi PM2

Integrazione del repository tramite git push con buildpack automatizzati.

Immagini container OCI/Docker standard

Profilo dei costi di inattività

Fatturazione 24 ore su 24, 7 giorni su 7, indipendentemente dal traffico HTTP in entrata

Spesso richiede un prezzo minimo per l'istanza di base.

Fatturazione rigorosamente al secondo durante l'elaborazione delle richieste attive

Portabilità

Elevata portabilità, ma alto rischio di deriva dell'ambiente

Bassa portabilità; vincolo alle convenzioni della piattaforma

Elevata portabilità; esegue container identici in qualsiasi ambiente

Funzionalità

Macchine virtuali (IaaS/VPS)

Hosting PaaS/buildpack

Container serverless moderni

Gestione dell'infrastruttura

Applicazione manuale di patch al sistema operativo, gestione del firewall e aggiornamenti del runtime

Livello di piattaforma completamente gestito con vincoli di runtime del fornitore

Infrastruttura completamente gestita; zero gestione del sistema operativo

Meccanismo di scalabilità

Scalabilità automatica delle VM basata su metriche (l'avvio delle istanze richiede alcuni minuti)

Scalabilità automatica in base al numero di istanze o ai limiti dei worker

Scalabilità automatica istantanea basata sulle richieste, inclusa la scalabilità fino a zero

Formato della pacchettizzazione

File sorgente non elaborati, servizi systemd o gestori di processi PM2

Integrazione del repository tramite git push con buildpack automatizzati.

Immagini container OCI/Docker standard

Profilo dei costi di inattività

Fatturazione 24 ore su 24, 7 giorni su 7, indipendentemente dal traffico HTTP in entrata

Spesso richiede un prezzo minimo per l'istanza di base.

Fatturazione rigorosamente al secondo durante l'elaborazione delle richieste attive

Portabilità

Elevata portabilità, ma alto rischio di deriva dell'ambiente

Bassa portabilità; vincolo alle convenzioni della piattaforma

Elevata portabilità; esegue container identici in qualsiasi ambiente

Considerazioni chiave per la creazione di un'app Node.js

Lo sviluppo di un'applicazione Node.js pronta per la produzione richiede l'adozione di pattern architetturali che prevengano i colli di bottiglia e garantiscano l'uptime:

  • Stato dell'applicazione stateless: le moderne piattaforme serverless avviano e arrestano dinamicamente le istanze dei container in risposta al traffico in entrata. Evita di salvare lo stato della sessione utente, i file multimediali caricati o le code in background nella memoria del container locale o nei percorsi del disco locale, poiché i file scritti sui dischi temporanei del container scompaiono in caso di un nuovo deployment o scale down. Utilizza servizi gestiti dedicati come Cloud Firestore, Cloud SQL per PostgreSQL o Cloud Storage per lo stato persistente.
  • Isolamento delle variabili di ambiente e dei secret: impostare chiavi API, credenziali di database o chiavi segrete come hardcoded nel controllo del codice sorgente crea vulnerabilità critiche per la sicurezza. Isola sempre le configurazioni di runtime nelle variabili di ambiente (process.env) e inseriscile in modo sicuro a livello di runtime del container.
  • Associazione delle porte e probe di integrità: gli ambienti container serverless instradano il traffico HTTP inserendo una porta di destinazione predefinita, ad esempio la variabile di ambiente PORT (in genere la porta 8080). Il tuo server Node.js deve rimanere in ascolto in modo dinamico su process.env.PORT || 8080 per superare i controlli di integrità e idoneità.
  • Arresto normale e intercettazione dei segnali: le applicazioni Node.js devono intercettare i segnali del sistema operativo SIGTERM e SIGINT. Quando un gestore della scalabilità automatica dell'infrastruttura avvia uno scale down, la gestione di questi segnali garantisce che l'elaborazione delle richieste HTTP esistenti venga completata prima della chiusura delle connessioni al database e della terminazione del container.

Come creare e fare il deployment di un'app Node.js

Puoi creare ed eseguire il deployment di un'applicazione Node.js utilizzando due workflow principali: Prototipazione rapida assistita dall'AI (non è richiesta la configurazione locale) o Deployment standard basato su container (per codebase esistenti).

Percorso A: prototipazione rapida, ad esempio la modalità di creazione di AI Studio e lo Starter Tier (provisioning senza costi)

Per la prototipazione rapida e le applicazioni di AI, la modalità di creazione di Google AI Studio consente agli sviluppatori di descrivere architetture Node.js full stack in linguaggio naturale e di eseguirne il deployment su Cloud Run senza strumenti a riga di comando locali o configurazioni di fatturazione obbligatorie.

Passaggio 1: inizializza l'applicazione in modalità di creazione

  1. Vai a Google AI Studio e passa alla modalità Build.
  2. Inserisci il prompt dell'applicazione che descrive la logica di business e l'interfaccia frontend richieste (ad esempio, "Crea una dashboard di monitoraggio dell'inventario con un backend Node.js e una gestione persistente delle attività").
  3. L'agente integrato genererà i file dell'applicazione, configurerà i percorsi del server, installerà le dipendenze npm pertinenti e avvierà un'anteprima interattiva.

Passaggio 2: configura i dati e l'autenticazione integrati

  • Per l'archiviazione permanente: quando il prompt richiede l'archiviazione dei dati, abilita Cloud Firestore o Cloud SQL per PostgreSQL (Developer Edition). AI Studio crea automaticamente lo schema, i modelli e i file di connessione client.
  • Per l'identità utente: attiva Firebase Authentication per abilitare i flussi di Accedi con Google preconfigurati senza impostare manualmente gestori di reindirizzamento OAuth separati.

Passaggio 3: pubblica su Cloud Run gestito

  1. Fai clic su Pubblica > Inizia > Pubblica app nell'interfaccia superiore.
  2. Seleziona la regione di deployment che preferisci.
  3. Fornisci un URL personalizzato <user-defined>.ai.studio per la tua applicazione e pubblicala.
  4. La piattaforma pacchettizza il container, esegue il provisioning del calcolo sottostante e fornisce un URL di produzione HTTPS <user-defined>.ai.studio attivo in pochi secondi.

Percorso B: deployment di un'applicazione Node.js personalizzata come Docker e Cloud Run

Per codebase preesistenti e microservizi personalizzati, pacchettizza la tua applicazione Node.js in un container conforme a OCI ed esegui il deployment direttamente in Cloud Run.

Passaggio 1: struttura il codice del server Node.js

Crea un server HTTP minimo utilizzando Express, Fastify o librerie Node.js standard (index.js):

  • JavaScript
Caricamento in corso...

 Nota: Cloud Run inserisce automaticamente la variabile di ambiente PORT in fase di runtime. Il fallback || 8080 nel codice riportato sopra è incluso principalmente per facilitare i test locali sulla tua macchina prima del deployment.

Passaggio 2: crea un Dockerfile multifase sicuro

Pacchettizza la tua applicazione utilizzando una build multifase per garantire un'immagine di produzione minima e sicura.

Best practice: crea un file .dockerignore nella directory root e aggiungi node_modules e .env. In questo modo, i file di sviluppo locali non vengono raggruppati accidentalmente nell'immagine container, mantenendola pulita e sicura.

Crea un file denominato Dockerfile nella directory root:

  • Dockerfile
Caricamento in corso...

Passaggio 3: esegui il deployment in Cloud Run

Esegui il deployment utilizzando Google Cloud CLI dalla cartella principale locale. Se vuoi, puoi anche creare un URL personalizzato nel formato <user-defined>.cloud.run per la tua applicazione:

  • Bash
Caricamento in corso...

Per mappare un dominio personalizzato in un secondo momento, utilizza:

  • Bash
Caricamento in corso...

Meccanismi di determinazione dei prezzi per il livello senza costi e lo Starter Tier

Comprendere il funzionamento delle allocazioni senza costi ti consente di creare prototipi e scalare la tua applicazione Node.js in modo prevedibile:

Tipo di livello

Quote di computing e risorse

Requisiti / limiti

Starter Tier Google Cloud (prototipazione)

• Cloud Run: fino a due applicazioni web attive

• Cloud Firestore: 1 GiB di spazio di archiviazione, 50.000 letture al giorno, 40.000 scritture al giorno

• Cloud SQL: PostgreSQL Developer Edition (scalabilità fino a zero)

• Firebase Auth: Accedi con Google incluso

• Account Google valido

• Non è necessaria una carta di credito o un account di fatturazione

• Blocco di una singola regione di deployment

Livello senza costi standard di Google Cloud (account standard)

• Cloud Run: 2 milioni di richieste al mese, 180.000 vCPU al secondo al mese, 360.000 GiB al secondo al mese, 1 GB di traffico di rete in uscita dal Nord America al mese

• Accesso a un credito di benvenuto di 300 $ per i primi 90 giorni



• Account di fatturazione Cloud collegato

• Accesso completo alle API della piattaforma in tutte le regioni

Tipo di livello

Quote di computing e risorse

Requisiti / limiti

Starter Tier Google Cloud (prototipazione)

• Cloud Run: fino a due applicazioni web attive

• Cloud Firestore: 1 GiB di spazio di archiviazione, 50.000 letture al giorno, 40.000 scritture al giorno

• Cloud SQL: PostgreSQL Developer Edition (scalabilità fino a zero)

• Firebase Auth: Accedi con Google incluso

• Account Google valido

• Non è necessaria una carta di credito o un account di fatturazione

• Blocco di una singola regione di deployment

Livello senza costi standard di Google Cloud (account standard)

• Cloud Run: 2 milioni di richieste al mese, 180.000 vCPU al secondo al mese, 360.000 GiB al secondo al mese, 1 GB di traffico di rete in uscita dal Nord America al mese

• Accesso a un credito di benvenuto di 300 $ per i primi 90 giorni



• Account di fatturazione Cloud collegato

• Accesso completo alle API della piattaforma in tutte le regioni

Risolvi le tue sfide aziendali con Google Cloud

I nuovi clienti ricevono 300 $ di crediti senza costi da spendere su Google Cloud.
Parla con un esperto delle vendite di Google Cloud per discutere della tua sfida unica in modo più dettagliato.

Best practice per l'esecuzione di Node.js in ambienti serverless

  1. Ottimizza gli avvii a freddo con dipendenze snelle: rimuovi i pacchetti di sviluppo inutilizzati (npm prune --production) e raggruppa il codice del server utilizzando moderni tree-shaker di moduli (come esbuild o tsup) per ridurre le dimensioni delle immagini e accelerare l'inizializzazione dei container.
  2. Configura i valori massimi delle istanze: quando passi da una sandbox a un progetto di produzione live, specifica una soglia di contemporaneità e imposta --max-instances (ad esempio, --max-instances 5) per assicurarti che i picchi di traffico imprevisti non superino i budget operativi target.
  3. Rendi persistenti i log in modo strutturato: trasmetti i log in streaming a stdout e stderr utilizzando il formato JSON strutturato. I sistemi di logging gestiti analizzano automaticamente gli oggetti JSON, consentendoti di filtrare in base a codici di stato HTTP, livelli di gravità e latenza di esecuzione.
  4. Utilizza i controlli di integrità nativi: implementa probe di endpoint HTTP chiari (ad esempio, /healthz) che verifichino la connettività del database downstream prima di segnalare l'idoneità ai proxy di routing in entrata.

Fai il prossimo passo

Inizia a creare su Google Cloud con 300 $ di crediti senza costi e oltre 20 prodotti sempre senza costi.

Google Cloud