El entorno de ejecución de Node.js es la pila de software encargada de instalar el código de tu servicio web y sus dependencias, y de ejecutar tu servicio.
El entorno de ejecución de Node.js para App Engine en el entorno estándar se declara en el archivo app.yaml
:
runtime: nodejsVERSION
En el ejemplo anterior, VERSION es el número de versión de Node.js MAJOR
. Por ejemplo, para usar la versión más reciente de Node.js, Node.js 20, especifica 20
.
Para otras versiones de Node.js compatibles y la versión de Ubuntu correspondiente para tu versión de Node.js, consulta el programa de asistencia del entorno de ejecución.
Versión de Node.js
El entorno de ejecución de Node.js usa la última versión estable de la versión que se especifica en tu archivo app.yaml
. App Engine se actualiza automáticamente a la versión nueva del parche y a las versiones de actualización secundarias, pero no actualizará automáticamente la versión principal.
Por ejemplo, tu aplicación podría implementarse en Node.js 10.9.4 y, luego, actualizarse de manera automática a la versión 10.10.0, pero no se actualizará automáticamente cuando esté disponible la versión de Node.js 12.xx.
Debido a que las versiones menores y de parche se actualizan automáticamente, si están presentes, la propiedad engines.node
de tu archivo package.json
solo puede especificar la versión principal y ser compatible con la versión de Node.js especificada en tu archivo app.yaml
.
Por ejemplo, para 20:
20.x.x
^20.0.0
~20
>=6
Si especificas una versión de Node.js no compatible en tu archivo package.json
, fallará la implementación y se mostrará un mensaje de error.
Dependencias
Durante la implementación, el entorno de ejecución instala tus dependencias con el comando npm install
. El entorno de ejecución también es compatible con los administradores de paquetes Yarn (yarn.lock
) y Pnpm (pnpm-lock.yaml
).
Para obtener más información, consulta Especificación de dependencias.
Debido a que el entorno de ejecución realiza una instalación nueva, no es necesario que subas tu carpeta node_modules
.
Para admitir los paquetes de Node.js que requieren extensiones nativas, el entorno de ejecución incluye paquetes del sistema que te permiten usar herramientas como ImageMagick, FFmpeg y Chrome sin interfaz gráfica. Consulta la lista completa de paquetes en Paquetes del sistema incluidos. Para solicitar un paquete, envía el pedido a través del servicio de seguimiento de problemas.
Secuencia de comandos de compilación de NPM
De forma predeterminada, el entorno de ejecución de Node.js ejecuta npm run build
si se detecta una secuencia de comandos build
en package.json
. Si necesitas control adicional sobre tus pasos de compilación antes de iniciar tu aplicación, puedes proporcionar un paso de compilación personalizado si agregas una secuencia de comandos gcp-build
a tu archivo package.json
.
Para evitar que tu compilación ejecute la secuencia de comandos npm run build
, debes hacer lo siguiente:
- Agrega una secuencia de comandos
gcp-build
con un valor vacío en el archivopackage.json
:"gcp-build":""
. Para obtener detalles sobre la configuración depackage.json
, consulta Configuración de los paquetes de compilación de Node.js. Agrega la variable de entorno de compilación
GOOGLE_NODE_RUN_SCRIPTS
con un valor vacío en el archivoapp.yaml
.build_env_variables: GOOGLE_NODE_RUN_SCRIPTS: ''
build_env_variables
en el archivo app.yaml
.
Inicio de la aplicación
De forma predeterminada, el entorno de ejecución ejecuta node server.js
para iniciar la aplicación.
Si especificas una secuencia de comandos start
en el archivo package.json
, el entorno de ejecución ejecuta la secuencia de comandos de inicio especificada. Por ejemplo:
"scripts": {
"start": "node app.js"
}
Para que tu app reciba solicitudes HTTP, la secuencia de comandos start
debe iniciar un servidor web que escuche en el host 0.0.0.0
y el puerto que especifica la variable de entorno PORT
, a la cual se puede acceder en Node.js como process.env.PORT
.
Para obtener el mejor rendimiento, la secuencia de comandos start
debe ser sencilla y excluir los pasos de compilación, debido a que se ejecuta cada vez que se crea una instancia nueva de la aplicación.
Puedes anular este comportamiento si especificas una secuencia de comandos en el campo entrypoint
en app.yaml
. En lugar de ejecutar node server.js
o una secuencia de comandos de inicio, el entorno de ejecución inicia la aplicación con el comando que especificas en entrypoint
.
Variables de entorno
El entorno de ejecución configura las siguientes variables del entorno:
Variable de entorno | Descripción |
---|---|
GAE_APPLICATION
|
ID de tu aplicación de App Engine. Este ID tiene el prefijo “region code~”, como “e~”, para aplicaciones implementadas en Europa. |
GAE_DEPLOYMENT_ID |
ID de la implementación actual. |
GAE_ENV |
Entorno de App Engine. Se define en standard . |
GAE_INSTANCE |
ID de la instancia en la que se está ejecutando tu servicio. |
GAE_MEMORY_MB |
Cantidad de memoria disponible para el proceso de la aplicación, en MB. |
GAE_RUNTIME |
Entorno de ejecución especificado en el archivo app.yaml . |
GAE_SERVICE |
Nombre de servicio especificado en el archivo app.yaml . Si no se especifica un nombre de servicio, se asigna default . |
GAE_VERSION |
Etiqueta de la versión actual de tu servicio. |
GOOGLE_CLOUD_PROJECT |
ID del proyecto de Google Cloud asociado a tu aplicación. |
PORT |
Puerto que recibe las solicitudes HTTP. |
NODE_ENV (solo disponible en el entorno de ejecución de Node.js) |
Se establece en production cuando se implementa tu servicio. |
Puedes definir variables de entorno adicionales en tu archivo app.yaml
, pero no es posible anular los valores anteriores, excepto NODE_ENV
.
Proxies HTTPS y de reenvío
App Engine finaliza las conexiones HTTPS en el balanceador de cargas y reenvía las solicitudes a tu aplicación. Algunas aplicaciones deben determinar la IP y el protocolo de la solicitud original. La dirección IP del usuario está disponible en el encabezado X-Forwarded-For
estándar. Las aplicaciones que necesitan esta información deben configurar sus frameworks web para que confíen en el proxy.
Con Express.js, utiliza la configuración trust proxy
:
app.set('trust proxy', true);
Ten en cuenta que configurar trust proxy
como true
puede exponer la propiedad req.ip
a la vulnerabilidad de falsificación de IP.
Sistema de archivos
El entorno de ejecución incluye un sistema de archivos completo. El sistema de archivos es de solo lectura, a excepción de la ubicación /tmp
, que es un disco virtual que almacena datos en la memoria RAM de tu instancia de App Engine.
Servidor de metadatos
Cada instancia de tu aplicación puede usar el servidor de metadatos de App Engine para consultar información acerca de la instancia y del proyecto.
Puedes acceder al servidor de metadatos a través de los siguientes extremos:
http://metadata
http://metadata.google.internal
Las solicitudes enviadas al servidor de metadatos deben incluir el encabezado de solicitud Metadata-Flavor: Google
. Este encabezado indica que la solicitud se envió con la intención de recuperar valores de metadatos.
La siguiente tabla enumera los extremos en los que puedes realizar solicitudes HTTP para metadatos específicos:
Extremo de metadatos | Descripción |
---|---|
/computeMetadata/v1/project/numeric-project-id |
El número de proyecto asignado a tu proyecto. |
/computeMetadata/v1/project/project-id |
ID del proyecto asignado a tu proyecto. |
/computeMetadata/v1/instance/region |
La región en la que se está ejecutando la instancia. |
/computeMetadata/v1/instance/service-accounts/default/aliases |
|
/computeMetadata/v1/instance/service-accounts/default/email |
Correo electrónico de la cuenta de servicio predeterminada asignado a tu proyecto. |
/computeMetadata/v1/instance/service-accounts/default/ |
Enumera todas las cuentas de servicio predeterminadas para tu proyecto. |
/computeMetadata/v1/instance/service-accounts/default/scopes |
Enumera todos los alcances compatibles para las cuentas de servicio predeterminadas. |
/computeMetadata/v1/instance/service-accounts/default/token |
Muestra el token de autenticación que puede usarse para autenticar tu aplicación en otras APIs de Google Cloud. |
Por ejemplo, para recuperar tu ID del proyecto, envía una solicitud a http://metadata.google.internal/computeMetadata/v1/project/project-id
.