Inizia a usare Ruby su Compute Engine

Questo tutorial mostra come iniziare a utilizzare Compute Engine. Segui questo tutorial eseguendo il deployment di un'app web Ruby Hello World 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.
  • Esegui il deployment di un'app di esempio Hello World in un'unica istanza 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 potrebbero avere diritto a una prova senza costi.

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 senza costi per l'esecuzione, il test e il deployment dei workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  6. Verify that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

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

    Vai a Cloud Shell

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

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

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

Esecuzione dell'app in Cloud Shell

  1. In Cloud Shell, installa le dipendenze dell'applicazione utilizzando bundle:

    bundle install
    
  2. Esegui l'app Sinatra:

    bundle exec ruby app.rb -p 8080
    
  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.

  4. Per arrestare il server web locale premi CTRL+C.

Distribuzione su una singola istanza

Questa sezione ti guida nell'esecuzione di una singola istanza della tua app su Compute Engine.

Deployment a istanza singola.

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

Utilizza uno script di avvio per inizializzare un'istanza

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

# Install Stackdriver logging agent
curl -sSO https://dl.google.com/cloudagents/add-logging-agent-repo.sh
bash add-logging-agent-repo.sh --also-install

# Install dependencies
apt-get update && apt-get -y upgrade && apt-get install -y autoconf bison \
    build-essential git libssl-dev libyaml-dev libreadline6-dev zlib1g-dev \
    libncurses5-dev libffi-dev libgdbm3 libgdbm-dev nginx supervisor

# Account to own server process
useradd -m -d /home/rubyapp rubyapp

# Install Ruby and Bundler
mkdir /home/rubyapp/.ruby
git clone https://github.com/rbenv/ruby-build.git /home/rubyapp/.ruby-build
/home/rubyapp/.ruby-build/bin/ruby-build 2.6.5 /home/rubyapp/.ruby

chown -R rubyapp:rubyapp /home/rubyapp

cat >/home/rubyapp/.profile << EOF
export PATH="/home/rubyapp/.ruby/bin:$PATH"
EOF

su -l rubyapp -c "gem install bundler"

# Fetch source code
git clone https://github.com/GoogleCloudPlatform/getting-started-ruby.git /opt/app

# Set ownership to newly created account
chown -R rubyapp:rubyapp /opt/app

# Install ruby dependencies
su -l rubyapp -c "cd /opt/app/gce && bundle install"

# Disable the default NGINX configuration
rm /etc/nginx/sites-enabled/default

# Enable our NGINX configuration
cp /opt/app/gce/rubyapp.conf /etc/nginx/sites-available/rubyapp.conf
ln -s /etc/nginx/sites-available/rubyapp.conf /etc/nginx/sites-enabled/rubyapp.conf

# Start NGINX
systemctl restart nginx.service

# Configure supervisor to run the ruby app
cat >/etc/supervisor/conf.d/rubyapp.conf << EOF
[program:rubyapp]
directory=/opt/app/gce
command=bash -lc "bundle exec ruby app.rb"
autostart=true
autorestart=true
user=rubyapp
environment=HOME="/home/rubyapp",USER="rubyapp"
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 Ruby 2.6.5, Bundler e le relative dipendenze di sistema.

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

  • Installa e configura Nginx.

  • Installa Supervisor per eseguire l'app come daemon.

  • Configura Supervisor per l'esecuzione dell'app. Supervisor assicura che l'app venga riavviata se si chiude inaspettatamente o se viene terminata da un amministratore o da un altro processo. Inoltre, invia lo stdout e stderr dell'app al syslog perché siano raccolti dall'agente Logging.

Crea e configura un'istanza Compute Engine

  1. Crea un'istanza Compute Engine:

    Linux/macOS

    MY_INSTANCE_NAME="my-app-instance"
    ZONE=us-central1-a
    
    gcloud compute instances create $MY_INSTANCE_NAME \
        --image-family=debian-9 \
        --image-project=debian-cloud \
        --machine-type=g1-small \
        --scopes userinfo-email,cloud-platform \
        --metadata-from-file startup-script=startup-script.sh \
        --zone $ZONE \
        --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-a ^
        --tags http-server
    

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

    Crea una nuova istanza, le 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.

    Al termine dello script di avvio, viene 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-80 \
        --allow tcp:80 \
        --source-ranges 0.0.0.0/0 \
        --target-tags http-server \
        --description "Allow port 80 access to http-server"
    

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

    gcloud compute instances list
    
  5. Per vedere l'app in esecuzione, inserisci questo URL nel browser:

    http://YOUR_INSTANCE_IP
    

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

Gestire e monitorare un'istanza

Puoi utilizzare la console Google Cloud per monitorare e gestire l'istanza.

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

    Vai a Istanze VM

  2. Nell'elenco delle istanze della macchina virtuale, 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 di 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 quello 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-80

Passaggi successivi