Premiers pas avec Ruby sur Compute Engine

Ce tutoriel explique comment débuter avec Compute Engine. Suivez-le pour déployer une application Web Ruby Hello World dans Compute Engine. Si vous avez besoin d'aide pour vous familiariser avec App Engine, consultez la page sur l'environnement standard App Engine.

Objectifs

  • Télécharger et déployer un exemple d'application Hello World en utilisant Cloud Shell
  • Déployer un exemple d'application Hello World sur une instance Compute Engine unique

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Enable the Compute Engine API.

    Enable the API

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

    Go to project selector

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Enable the Compute Engine API.

    Enable the API

  8. Dans Google Cloud Console, ouvrez l'application dans Cloud Shell.

    Accéder à Cloud Shell

    Cloud Shell vous permet d'accéder en ligne de commande à vos ressources cloud, directement depuis votre navigateur.

  9. Si vous acceptez de cloner le dépôt, cliquez sur Confirmer pour télécharger l'exemple de code et accéder au répertoire de l'application.

  10. Dans Cloud Shell, configurez la CLI gcloud pour qu'elle utilise votre nouveau projet Google Cloud:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Exécuter l'application dans Cloud Shell

  1. Dans Cloud Shell, installez vos dépendances d'application à l'aide de bundle :

    bundle install
    
  2. Exécutez l'application Sinatra :

    bundle exec ruby app.rb -p 8080
    
  3. Dans Cloud Shell, cliquez sur Aperçu sur le Web , puis sélectionnez Prévisualiser sur le port 8080. Une nouvelle fenêtre s'affiche avec votre application en cours d'exécution.

  4. Pour arrêter le serveur Web local, appuyez sur les touches Ctrl+C.

Déployer l'application sur une instance unique

Cette section décrit la procédure d'exécution d'une seule instance de votre application sur Compute Engine.

Déploiement d'une instance unique

Depuis Cloud Shell, vous pouvez déployer une machine virtuelle (VM) d'instance unique Compute Engine, qui exécute votre application.

Utiliser un script de démarrage pour initialiser une instance

Vous avez besoin d'un outil qui indique à votre instance de télécharger et d'exécuter votre code. Une instance peut disposer d'un script de démarrage qui s'exécute à chaque démarrage ou redémarrage de l'instance.

# 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

Le script de démarrage effectue les tâches suivantes :

  • Il installe l'agent Cloud Logging qui collecte automatiquement les journaux de syslog.

  • Il installe Ruby 2.6.5, Bundler et leurs dépendances système.

  • Il clone le code source de l'application à partir de Cloud Source Repositories et installe des dépendances.

  • Installez et configurez Nginx.

  • Il installe Supervisor pour exécuter l'application en tant que daemon.

  • Il configure Supervisor pour exécuter l'application. Supervisor s'assure que l'application redémarre si elle se ferme de façon inattendue ou si elle est arrêtée par un administrateur ou un autre processus. Il envoie également les fichiers stdout et stderr de l'application à syslog pour qu'ils soient collectés par l'agent Logging.

Créer et configurer une instance Compute Engine

  1. Créez une instance 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
    

    Remplacez la zone par une zone de développement. Exemple : us-central1-a. Pour en savoir plus sur les régions et les zones, consultez la page Zones géographiques et régions.

    Cette commande crée une instance, l'autorise à accéder aux services Google Cloud et exécute votre script de démarrage. Le nom de l'instance est my-app-instance.

  2. Vérifiez l'avancement de la création de l'instance :

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

    Remplacez YOUR_ZONE par la zone dans laquelle vous avez déployé votre instance.

    Une fois l'exécution du script de démarrage terminée, le message suivant s'affiche :

    startup-script: INFO Finished running startup scripts.
    
  3. Créez une règle de pare-feu pour autoriser le trafic vers votre instance :

    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. Obtenez l'adresse IP externe de votre instance :

    gcloud compute instances list
    
  5. Pour voir votre application en cours d'exécution, saisissez cette URL dans votre navigateur :

    http://YOUR_INSTANCE_IP
    

    Remplacez YOUR_INSTANCE_IP par l'adresse IP externe de votre instance.

Gérer et surveiller une instance

Vous pouvez surveiller et gérer votre instance à l'aide de Google Cloud Console.

  1. In the Google Cloud console, go to the VM instances page.

    Go to VM instances

  2. In the list of virtual machine instances, click SSH in the row of the instance that you want to connect to.
  3. Pour afficher tous les journaux générés par vos ressources Compute Engine, accédez à la page Explorateur de journaux. Accéder à l'explorateur de journaux

    Cloud Logging est automatiquement configuré de manière à collecter les journaux issus de divers services courants, comme syslog.

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Supprimer les ressources individuelles

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

Étapes suivantes