Introduzione a Node.js su Compute Engine


Questo tutorial mostra come iniziare a utilizzare Compute Engine. Segui questo tutorial eseguendo il deployment di un'app web Hello World Node.js in Compute Engine. Per iniziare a utilizzare App Engine, consulta l'ambiente standard di App Engine.

Obiettivi

  • Utilizza Cloud Shell per scaricare ed eseguire il deployment di un'app di esempio Hello World.
  • Eseguire il deployment di un'app Hello World di esempio in una singola istanza di Compute Engine.

Costi

In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:

Per generare una stima dei costi in base all'utilizzo previsto, utilizza il Calcolatore prezzi. I nuovi utenti di Google Cloud possono essere idonei a una prova senza costi aggiuntivi.

Prima di iniziare

  1. Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
  2. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  3. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  4. Attiva l'API Compute Engine.

    Abilita l'API

  5. Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.

    Vai al selettore progetti

  6. Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.

  7. Attiva l'API Compute Engine.

    Abilita l'API

  8. Nella console Google Cloud, apri l'app in Cloud Shell.

    Vai a Cloud Shell

    Cloud Shell fornisce l'accesso tramite riga di comando alle tue risorse cloud direttamente dal browser.

  9. Se accetti di clonare il repository, fai clic su Conferma per scaricare il codice di esempio e passare alla directory dell'app.

  10. In Cloud Shell, configura gcloud CLI in modo da utilizzare il tuo nuovo progetto Google Cloud:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID
    

Esegui l'app in Cloud Shell

Se hai fatto clic su Vai a Cloud Shell nella sezione precedente, Cloud Shell ha clonato il repository nodejs-getting-started nella tua istanza. Dopo l'avvio dell'istanza, la directory di lavoro è ~/cloudshell_open/nodejs-getting-started/gce. Se non ti trovi in questa directory, segui i passaggi descritti in Prima di iniziare.

  1. Installa le dipendenze:

    npm install
    
  2. Eseguire l'applicazione:

    npm start
    
  3. In Cloud Shell, fai clic su Anteprima web , e seleziona Anteprima sulla porta 8080. Compare una nuova finestra in cui viene eseguita l'app.

Per arrestare il server web locale premi CTRL+C.

Configurare Cloud Source Repositories

  1. Abilitare l'API Cloud Source Repositories.

    Abilita l'API Cloud Source Repositories

  2. Nella console Google Cloud, vai a Cloud Source Repositories.

    Vai a Cloud Source Repositories

  3. Seleziona Aggiungi repository.

    Seleziona Aggiungi repository.

  4. Seleziona Crea nuovo repository e fai clic su Continua.

  5. Nel campo Nome repository, inserisci new-repo.

  6. Nel campo Progetto, inserisci l'ID del progetto che hai creato o selezionato per questo tutorial, quindi fai clic su Continua.

  7. Seleziona Clona il tuo repository in un repository Git locale.

  8. In Cloud Shell, torna alla directory principale e clona il repository seguendo le istruzioni nella scheda Google Cloud SDK e tieni aperta questa scheda.

    segui le istruzioni per clonare il tuo repository in un repository Git locale

  9. Prima di completare il passaggio finale seguendo le istruzioni, copia la tua app nel nuovo repository in Cloud Shell:

    cd new-repo
    cp ../cloudshell_open/nodejs-getting-started/gce/app.js app.js
    cp ../cloudshell_open/nodejs-getting-started/gce/package.json package.json
    
  10. Segui le istruzioni rimanenti nella scheda Google Cloud SDK per eseguire il commit delle modifiche nel repository. Verifica di aver aggiunto il codice al repository aggiornando il browser e verificando che il codice sia stato aggiunto al repository new-repo.

Esegui il deployment su una singola istanza

Questa sezione illustra come eseguire una singola istanza della tua app su Compute Engine.

Deployment a istanza singola.

Da Cloud Shell, puoi eseguire il deployment in una singola macchina virtuale (VM) di istanza Compute Engine che esegue la tua app.

Usa uno script di avvio per inizializzare un'istanza

Hai bisogno di un modo per indicare all'istanza di scaricare ed eseguire il codice. Un'istanza può avere uno script di avvio che viene eseguito ogni volta che viene avviata o riavviata.

Ecco lo script di avvio incluso nell'app di esempio Hello World:

set -v

# Talk to the metadata server to get the project id
PROJECTID=$(curl -s "http://metadata.google.internal/computeMetadata/v1/project/project-id" -H "Metadata-Flavor: Google")
REPOSITORY="new-repo"

# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &

# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git build-essential supervisor

# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v16.15.0/node-v16.15.0-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm

# Get the application source code from the Google Cloud Repository.
# git requires $HOME and it's not set during the startup script.
export HOME=/root
git config --global credential.helper gcloud.sh
git clone https://source.developers.google.com/p/${PROJECTID}/r/${REPOSITORY} /opt/app/new-repo

# Install app dependencies
cd /opt/app/new-repo
npm install

# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app

# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/opt/app/new-repo
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF

supervisorctl reread
supervisorctl update

# Application should now be running under supervisor

Lo script di avvio esegue queste attività:

  • Installa l'agente Cloud Logging. L'agente raccoglie automaticamente i log da syslog.

  • Installa Supervisor per eseguire l'app come daemon.

  • Clona il codice sorgente dell'app da Cloud Source Repositories e installa le dipendenze.

  • Configura il supervisore per l'esecuzione dell'app. Il supervisore fa in modo che l'app venga riavviata se si arresta in modo imprevisto o viene chiusa da un amministratore o da un altro processo. Invia inoltre i valori stdout e stderr dell'app a syslog per essere raccolti dall'agente Logging.

Crea e configura un'istanza di Compute Engine

  1. Crea un'istanza Compute Engine:

    Linux/macOS

    gcloud compute instances create my-app-instance \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --machine-type=g1-small \
        --scopes userinfo-email,cloud-platform \
        --metadata app-location=us-central1-f \
        --metadata-from-file startup-script=gce/startup-script.sh \
        --zone us-central1-f \
        --tags http-server
    

    Windows

    gcloud compute instances create my-app-instance ^
        --image-family=debian-9 ^
        --image-project=debian-cloud ^
        --machine-type=g1-small ^
        --scopes userinfo-email,cloud-platform ^
        --metadata-from-file startup-script=gce/startup-script.sh ^
        --zone us-central1-f ^
        --tags http-server
    

    Sostituisci la zona con una zona di sviluppo, ad esempio us-central1-a. Per maggiori informazioni su regioni e zone, consulta Area geografica e regioni.

    Questa operazione crea una nuova istanza, consente di accedere ai servizi Google Cloud ed esegue lo script di avvio. Il nome dell'istanza è my-app-instance.

  2. Verifica lo stato di avanzamento della creazione dell'istanza:

    gcloud compute instances get-serial-port-output my-app-instance --zone YOUR_ZONE
    

    Sostituisci YOUR_ZONE con la zona in cui hai eseguito il deployment dell'istanza.

    Una volta completato lo script di avvio, verrà visualizzato il seguente messaggio:

    startup-script: INFO Finished running startup scripts.
    
  3. Crea una regola firewall per consentire il traffico nell'istanza:

    gcloud compute firewall-rules create default-allow-http-8080 \
        --allow tcp:8080 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 8080 access to http-server"
    

  4. Ottieni l'indirizzo IP esterno dell'istanza:

    gcloud compute instances list
    
  5. Per visualizzare la tua app in esecuzione, inserisci questo URL nel browser:

    http://YOUR_INSTANCE_IP:8080
    

    Sostituisci YOUR_INSTANCE_IP con l'indirizzo IP esterno della tua istanza.

Gestisci e monitora un'istanza

Puoi utilizzare la console di GCP per monitorare e gestire la tua istanza.

  1. Nella console Google Cloud, vai alla pagina Istanze VM.

    Vai a Istanze VM

  2. Nell'elenco delle istanze di macchine virtuali, fai clic su SSH nella riga dell'istanza a cui vuoi connetterti.
  3. Per visualizzare tutti i log generati dalle risorse Compute Engine, vai alla pagina Esplora log. Vai a Esplora log

    Cloud Logging è configurato automaticamente per raccogliere i log da vari servizi comuni, tra cui syslog.

Esegui la pulizia

Per evitare che al tuo Account Google Cloud vengano addebitati costi relativi alle risorse utilizzate in questo tutorial, elimina il progetto che contiene le risorse oppure mantieni il progetto ed elimina le singole risorse.

Elimina il progetto

  1. Nella console Google Cloud, vai alla pagina Gestisci risorse.

    Vai a Gestisci risorse

  2. Nell'elenco dei progetti, seleziona il progetto che vuoi eliminare, quindi fai clic su Elimina.
  3. Nella finestra di dialogo, digita l'ID del progetto e fai clic su Chiudi per eliminare il progetto.

Elimina le singole risorse

gcloud compute instances delete my-app-instance --zone=YOUR_ZONE --delete-disks=all
gcloud compute firewall-rules delete default-allow-http-8080

Passaggi successivi