Comienza a usar Node.js en Compute Engine

En este instructivo se muestra cómo comenzar a usar Compute Engine. Si deseas seguirlo, implementa una aplicación web de Hello World para Node.js en Compute Engine. Si deseas obtener ayuda para comenzar a usar App Engine, consulta el entorno estándar de App Engine.

Objetivos

  • Usa Cloud Shell para descargar y, luego, implementar una aplicación de muestra Hello World.
  • Implementar una app Hello World de muestra en una sola instancia de Compute Engine

Costos

En este documento, usarás los siguientes componentes facturables de Google Cloud:

Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.

Es posible que los usuarios nuevos de Google Cloud cumplan con los requisitos para acceder a una prueba gratuita.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud . Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  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. En la consola de Google Cloud , abre la app en Cloud Shell.

    Ir a Cloud Shell

    Cloud Shell proporciona acceso de línea de comandos a tus recursos en la nube directamente desde el navegador.

  9. Si aceptas clonar el repositorio, haz clic en Confirmar para descargar el código de muestra y cambiar al directorio de la app.

  10. En Cloud Shell, configura gcloud CLI para usar tu proyecto Google Cloud nuevo:
    # Configure gcloud for your project
    gcloud config set project YOUR_PROJECT_ID

Ejecuta la app en Cloud Shell

Si hiciste clic en Ir a Cloud Shell en la sección anterior, Cloud Shell clonó el repositorio nodejs-getting-started en tu instancia. Después de que se inicia la instancia, tu directorio de trabajo es ~/cloudshell_open/nodejs-getting-started/gce. Si no estás en este directorio, consulta los pasos en Antes de comenzar.

  1. Instala las dependencias:

    npm install
    
  2. Ejecuta la app:

    npm start
    
  3. En Cloud Shell, haz clic en Vista previa web y selecciona Obtener vista previa en el puerto 8080. Se abrirá una ventana nueva con tu aplicación en ejecución.

Para detener el servidor web local, presiona Control+C.

Configura Cloud Source Repositories

  1. Habilitar la API de Cloud Source Repositories

    Habilita la API de Cloud Source Repositories

  2. En la consola de Google Cloud , ve a Cloud Source Repositories.

    Ir a Cloud Source Repositories

  3. Selecciona Agregar repositorio.

    Selecciona Agregar repositorio.

  4. Selecciona Crear repositorio nuevo y haz clic en Continuar.

  5. En el campo Nombre del repositorio, ingresa new-repo.

  6. En el campo Proyecto, ingresa el ID del proyecto que creaste o seleccionaste para este instructivo y, luego, haz clic en Continuar.

  7. Sigue estos pasos para clonar tu repositorio en un repositorio de Git local.

  8. En Cloud Shell, regresa a la raíz y clona el repositorio según las instrucciones de la pestaña SDK de Google Cloud y mantén esta pestaña abierta.

    Sigue las instrucciones para clonar el repositorio en un repositorio de Git local

  9. Antes de completar el paso final en las instrucciones, copia tu aplicación en tu repositorio nuevo en 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. Sigue las instrucciones restantes en la pestaña SDK de Google Cloud para confirmar tus cambios en el repositorio. Para confirmar que agregaste tu código al repositorio, actualiza el navegador y verifica que tu código se haya agregado al repositorio new-repo.

Implementa en una sola instancia

En esta sección, se explica cómo ejecutar una instancia única de tu aplicación en Compute Engine.

Implementación de una sola instancia

En Cloud Shell, puedes realizar una implementación en la máquina virtual (VM) de una sola instancia de Compute Engine que ejecuta tu aplicación.

Usa una secuencia de comandos de inicio para inicializar una instancia

Necesitas una forma de indicar a tu instancia que descargue y ejecute tu código. Una instancia puede tener una secuencia de comandos de inicio que se ejecuta cada vez que se inicia o reinicia la instancia.

Esta es la secuencia de comandos de inicio que se incluye en la app de muestra de Hello World:

set -ve


# 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")

# 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

# git requires $HOME and it's not set during the startup script.
# Fetch source code
export HOME=/root
git clone https://github.com/GoogleCloudPlatform/nodejs-getting-started.git /opt/app

# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v22.14.0/node-v22.14.0-linux-x64.tar.xz | tar xvfJ - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm

# Install app dependencies
cd /opt/app/gce
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/gce
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

La secuencia de comandos de inicio realiza las siguientes tareas:

  • Instala el agente de Cloud Logging. Este agente recopila registros de syslog automáticamente.

  • Instala Supervisor para ejecutar la app como un daemon.

  • Clona el código fuente de la aplicación desde Cloud Source Repositories e instala dependencias.

  • Configura Supervisor para ejecutar la app. Supervisor se asegura de que la app se reinicie si se cierra de forma inesperada o si la cierra un administrador o algún otro proceso. También envía stdoutstderr de la app a syslog para que los recopile el agente de Logging.

Crea y configura una instancia de Compute Engine

  1. Crea una instancia de 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
    

    Reemplaza la zona por una zona de desarrollo, por ejemplo, us-central1-a. Para obtener más información sobre regiones y zonas, consulta Geografía y regiones.

    Esto crea una instancia nueva, permite que acceda a los servicios de Google Cloudy ejecuta tu secuencia de comandos de inicio. El nombre de la instancia es my-app-instance.

  2. Revisa el progreso de la creación de la instancia con el comando siguiente:

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

    Reemplaza YOUR_ZONE por la zona en la que implementaste tu instancia.

    Cuando se complete la secuencia de comandos de inicio, verás el mensaje siguiente:

    startup-script: INFO Finished running startup scripts.
    
  3. Crea una regla de firewall para permitir el tráfico hacia tu instancia de la manera siguiente:

    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. Obtén la dirección IP externa de la instancia con el comando siguiente:

    gcloud compute instances list
    
  5. Para ver la aplicación en ejecución, ingresa la URL siguiente en el navegador:

    http://YOUR_INSTANCE_IP:8080
    

    Reemplaza YOUR_INSTANCE_IP por la dirección IP externa de la instancia.

Administra y supervisa una instancia

Puedes usar la consola de Google Cloud para supervisar y administrar tu instancia.

  1. En la consola de Google Cloud , ve a la página Instancias de VM.

    Ir a Instancias de VM

  2. En la lista de instancias de máquina virtual, haz clic en SSH en la fila de la instancia a la que deseas conectarte.
  3. Para ver todos los registros generados por tus recursos de Compute Engine, ve a la página Explorador de registros.

    Ve al Explorador de registros

    Cloud Logging se configura de forma automática para recopilar los registros de diversos servicios comunes, incluido syslog.

Limpia

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En la Google Cloud consola, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Borra los recursos individuales

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

¿Qué sigue?