Cómo crear e implementar una app de Node.js

Crear una aplicación de Node.js es solo la primera parte del ciclo de vida de desarrollo de software; hacer que sea accesible, eficiente y resiliente en un entorno en vivo es donde la entrega de aplicaciones es importante. La implementación de aplicaciones web modernas implica seleccionar una arquitectura que coincida con tu perfil de tráfico, etapa del ciclo de vida y presupuesto de recursos.

Ya sea que lances un prototipo full stack asistido por IA o implementes un servicio de backend de nivel de producción, los entornos de nube modernos ofrecen rutas automatizadas y alojadas en contenedores. En esta guía, se abordan los conceptos básicos de la arquitectura web de Node.js, se exploran consideraciones clave para la implementación y se explica paso a paso cómo crear e implementar una app de Node.js en una infraestructura administrada con asignaciones del nivel gratuito.

¿Qué es el entorno de ejecución de Node.js?

Node.js es un entorno de ejecución de JavaScript de código abierto y multiplataforma creado en el motor de JavaScript Chrome V8. Permite que JavaScript se ejecute en el servidor fuera del navegador web, lo que permite a los ingenieros escribir bases de código full stack unificadas con un solo lenguaje de programación.

A diferencia de los servidores web tradicionales de varios subprocesos que generan un subproceso de sistema operativo aislado para cada conexión simultánea, Node.js opera en un modelo de E/S que no bloquea, de un solo subproceso y controlado por eventos. Esta arquitectura hace que Node.js sea ligero y eficiente para manejar miles de conexiones simultáneas, como APIs de RESTful, mensajería en tiempo real, servicios de transmisión y organizadores de agentes de IA.

Implementación tradicional de Node.js frente a plataformas de contenedores sin servidores

Cuando te preparas para implementar un backend de Node.js, seleccionar el entorno de procesamiento adecuado afecta directamente la sobrecarga de mantenimiento, la velocidad de escalamiento y la eficiencia de costos.

Función

Máquinas virtuales (IaaS/VPS)

Hosting de PaaS o buildpacks

Contenedores modernos sin servidores

Administración de la infraestructura

Aplicación manual de parches del SO, administración de firewalls y actualizaciones del entorno de ejecución

Capa de plataforma completamente administrada con bloqueos de entorno de ejecución del proveedor

Infraestructura completamente administrada; sin administración del SO

Mecanismo de escalamiento

Escalado automático de VMs basado en métricas (tarda minutos en iniciar instancias)

Escalado automático por recuento de instancias o límites de trabajadores

Escalado automático instantáneo basado en solicitudes, incluida la reducción de escala a cero

Formato de empaquetado

Archivos de origen sin procesar, servicios systemd o administradores de procesos PM2

Integración de repositorios de Git push con buildpacks automatizados.

Imágenes de contenedor estándar de OCI o de Docker

Perfil de costo por inactividad

Se factura las 24 horas, todos los días, independientemente del tráfico HTTP entrante

A menudo, requiere un precio mínimo de instancia base.

Se factura estrictamente por segundo durante el procesamiento de solicitudes activas

Portabilidad

Alta portabilidad, pero alto riesgo de desvío del entorno

Baja portabilidad; se limita a las convenciones de la plataforma

Alta portabilidad; ejecuta un contenedor idéntico en cualquier entorno

Función

Máquinas virtuales (IaaS/VPS)

Hosting de PaaS o buildpacks

Contenedores modernos sin servidores

Administración de la infraestructura

Aplicación manual de parches del SO, administración de firewalls y actualizaciones del entorno de ejecución

Capa de plataforma completamente administrada con bloqueos de entorno de ejecución del proveedor

Infraestructura completamente administrada; sin administración del SO

Mecanismo de escalamiento

Escalado automático de VMs basado en métricas (tarda minutos en iniciar instancias)

Escalado automático por recuento de instancias o límites de trabajadores

Escalado automático instantáneo basado en solicitudes, incluida la reducción de escala a cero

Formato de empaquetado

Archivos de origen sin procesar, servicios systemd o administradores de procesos PM2

Integración de repositorios de Git push con buildpacks automatizados.

Imágenes de contenedor estándar de OCI o de Docker

Perfil de costo por inactividad

Se factura las 24 horas, todos los días, independientemente del tráfico HTTP entrante

A menudo, requiere un precio mínimo de instancia base.

Se factura estrictamente por segundo durante el procesamiento de solicitudes activas

Portabilidad

Alta portabilidad, pero alto riesgo de desvío del entorno

Baja portabilidad; se limita a las convenciones de la plataforma

Alta portabilidad; ejecuta un contenedor idéntico en cualquier entorno

Consideraciones clave a la hora de crear una app de Node.js

Para desarrollar una aplicación de Node.js lista para producción, se deben abordar patrones de arquitectura que eviten cuellos de botella y garanticen el tiempo de actividad:

  • Estado de la aplicación sin estado: Las plataformas sin servidores modernas inician y detienen las instancias de contenedor de forma dinámica en respuesta al tráfico entrante. Evita guardar el estado de la sesión del usuario, los archivos multimedia subidos o las colas en segundo plano en la memoria del contenedor local o en las rutas de acceso del disco local, ya que los archivos escritos en discos de contenedores temporales desaparecen cuando se vuelven a implementar o se reduce la escala verticalmente. Usa servicios administrados específicos, como Cloud Firestore, Cloud SQL para PostgreSQL o Cloud Storage para el estado persistente.
  • Aislamiento de secretos y variables de entorno: Codificar claves de API, credenciales de bases de datos o claves secretas en el control de código fuente crea vulnerabilidades de seguridad críticas. Siempre aísla los parámetros de configuración del entorno de ejecución en variables de entorno (process.env) y, luego, insértalos de forma segura en el nivel del entorno de ejecución del contenedor.
  • Vinculación de puertos y sondeos de estado: Los entornos de contenedores sin servidores enrutan el tráfico HTTP a través de la inserción de un puerto de destino predeterminado, como la variable de entorno PORT (por lo general, el puerto 8080). Tu servidor de Node.js debe escuchar de forma dinámica en process.env.PORT || 8080 para superar las verificaciones de estado y preparación.
  • Cierre ordenado y captura de indicadores: Las aplicaciones de Node.js deben interceptar los indicadores del sistema operativo SIGTERM y SIGINT. Cuando un escalador automático de infraestructura inicia una reducción de escala vertical, el manejo de estos indicadores garantiza que las solicitudes HTTP existentes terminen de procesarse antes de que se cierren las conexiones de la base de datos y se finalice el contenedor.

Cómo crear e implementar una app de Node.js

Puedes crear e implementar una aplicación de Node.js con dos flujos de trabajo principales: prototipado rápido asistido por IA (no se requiere configuración local) o implementación estándar basada en contenedores (para bases de código existentes).

Ruta A: Creación rápida de prototipos, como el modo de compilación de AI Studio y el nivel Inicial (aprovisionamiento gratuito)

Para el prototipado rápido y las aplicaciones de IA, el modo de compilación de Google AI Studio permite a los desarrolladores describir arquitecturas full stack de Node.js en lenguaje natural y, luego, implementarlas en Cloud Run sin herramientas de línea de comandos locales ni configuraciones de facturación obligatorias.

Paso 1: Inicializa la aplicación en el modo de compilación

  1. Navega a Google AI Studio y cambia al modo de compilación.
  2. Ingresa la instrucción para la aplicación que describa la lógica empresarial y la interfaz de frontend que necesitas (por ejemplo, "Crea un panel de seguimiento de inventario con un backend de Node.js y administración de tareas persistente").
  3. El agente integrado generará los archivos de la aplicación, configurará las rutas del servidor, instalará las dependencias de npm pertinentes y lanzará una vista previa interactiva.

Paso 2: Configura los datos y la autenticación integrados

  • Para el almacenamiento persistente: Cuando tu instrucción requiera almacenamiento de datos, habilita Cloud Firestore o Cloud SQL para PostgreSQL (edición para desarrolladores). AI Studio crea automáticamente un borrador de tu esquema, tus modelos y tus archivos de conexión de clientes.
  • Para la identidad del usuario: Activa Firebase Authentication para habilitar los flujos de Acceso con Google preconfigurados sin configurar manualmente controladores de redireccionamiento de OAuth independientes.

Paso 3: Publica en Cloud Run administrado

  1. Haz clic en Publicar > Comenzar > Publicar app en la interfaz superior.
  2. Selecciona la región de implementación de tu preferencia.
  3. Proporciona una URL <definida por el usuario>.ai.studio personalizada para tu aplicación y publícala.
  4. La plataforma empaqueta tu contenedor, aprovisiona el procesamiento subyacente y genera una URL de producción HTTPS <definida por el usuario>.ai.studio activa en cuestión de segundos.

Ruta B: Implementación de una aplicación de Node.js personalizada, como Docker y Cloud Run

Para bases de código preexistentes y microservicios personalizados, empaqueta tu aplicación de Node.js en un contenedor compatible con OCI y, luego, impleméntala directamente en Cloud Run.

Paso 1: Estructura el código del servidor de Node.js

Crea un servidor HTTP mínimo con Express, Fastify o bibliotecas estándar de Node.js (index.js):

  • JavaScript
Cargando...

 Nota: Cloud Run inserta la variable de entorno PORT automáticamente en el entorno de ejecución. El resguardo || 8080 en el código anterior se incluye principalmente para facilitar las pruebas locales en tu máquina antes de la implementación.

Paso 2: Crea un Dockerfile seguro de varias etapas

Empaqueta tu aplicación con una compilación de varias etapas para garantizar una imagen de producción mínima y segura.

Práctica recomendada: Crea un archivo .dockerignore en tu directorio raíz y agrégale node_modules y .env. Esto garantiza que los archivos de desarrollo locales no se agrupen accidentalmente en tu imagen de contenedor, lo que la mantiene limpia y segura.

Crea un archivo llamado Dockerfile en tu directorio raíz:

  • Dockerfile
Cargando...

Paso 3: Implementa en Cloud Run

Ejecuta la implementación con Google Cloud CLI desde tu carpeta raíz local. También puedes crear una URL personalizada con el formato <definido por el usuario>.cloud.run para tu aplicación:

  • Bash
Cargando...

Para asignar un dominio personalizado después, usa lo siguiente:

  • Bash
Cargando...

Mecanismos de precios de nivel gratuito y de nivel inicial

Comprender cómo funcionan las asignaciones gratuitas garantiza que puedas crear prototipos y escalar tu aplicación de Node.js de manera predecible:

Tipo de nivel

Asignaciones de procesamiento y recursos

Requisitos y límites

Nivel Inicial de Google Cloud (prototipado)

• Cloud Run: Hasta dos aplicaciones web activas

• Cloud Firestore: 1 GiB de almacenamiento, 50,000 operaciones de lectura por día, 40,000 operaciones de escritura por día

• Cloud SQL: Edición para desarrolladores de PostgreSQL (reducción de escala a cero)

• Firebase Auth: Se incluye el Acceso con Google

• Cuenta de Google válida

• No se requiere tarjeta de crédito ni cuenta de facturación

• Se restringe a una sola región de implementación

Nivel gratuito estándar de Google Cloud (cuenta estándar)

• Cloud Run: Dos millones de solicitudes por mes, 180,000 CPU virtuales segundo por mes, 360,000 GiB segundo por mes, 1 GB de salida de red en Norteamérica por mes

• Acceso a un crédito de bienvenida de $300 durante los primeros 90 días



• Cuenta de Facturación de Cloud vinculada

• Acceso completo a la API de la plataforma en todas las regiones

Tipo de nivel

Asignaciones de procesamiento y recursos

Requisitos y límites

Nivel Inicial de Google Cloud (prototipado)

• Cloud Run: Hasta dos aplicaciones web activas

• Cloud Firestore: 1 GiB de almacenamiento, 50,000 operaciones de lectura por día, 40,000 operaciones de escritura por día

• Cloud SQL: Edición para desarrolladores de PostgreSQL (reducción de escala a cero)

• Firebase Auth: Se incluye el Acceso con Google

• Cuenta de Google válida

• No se requiere tarjeta de crédito ni cuenta de facturación

• Se restringe a una sola región de implementación

Nivel gratuito estándar de Google Cloud (cuenta estándar)

• Cloud Run: Dos millones de solicitudes por mes, 180,000 CPU virtuales segundo por mes, 360,000 GiB segundo por mes, 1 GB de salida de red en Norteamérica por mes

• Acceso a un crédito de bienvenida de $300 durante los primeros 90 días



• Cuenta de Facturación de Cloud vinculada

• Acceso completo a la API de la plataforma en todas las regiones

Resuelve tus desafíos más difíciles con Google Cloud

Los clientes nuevos obtienen $300 en créditos gratuitos que pueden usar en Google Cloud.
Habla con un especialista en ventas de Google Cloud para analizar tu desafío único en más detalle.

Prácticas recomendadas para ejecutar Node.js en entornos sin servidores

  1. Optimiza los inicios en frío con dependencias optimizadas: Quita los paquetes de desarrollo sin usar (npm prune --production) y agrupa el código del servidor con eliminadores de código no utilizado de módulos modernos (como esbuild o tsup) para disminuir los tamaños de las imágenes y acelerar la inicialización del contenedor.
  2. Configura los máximos de instancias: Cuando pases de una zona de pruebas a un proyecto de producción en vivo, especifica un umbral de simultaneidad y establece --max-instances (por ejemplo, --max-instances 5) para asegurarte de que los aumentos inesperados de tráfico no superen los presupuestos operativos objetivo.
  3. Conserva registros de forma estructurada: Transmite registros a stdout y stderr con el formato JSON estructurado. Los sistemas de registro administrados analizan automáticamente los objetos JSON, lo que te permite filtrar por códigos de estado HTTP, niveles de gravedad y latencia de ejecución.
  4. Usa verificaciones de estado nativas: Implementa sondeos de endpoints HTTP claros (por ejemplo, /healthz) que verifiquen la conectividad de la base de datos downstream antes de indicar que está lista para los proxies de enrutamiento entrantes.

Da el siguiente paso

Comienza a crear en Google Cloud con el crédito gratis de $300 y los más de veinte productos del nivel Siempre gratuito.

Google Cloud