Google Cloud Run es una plataforma gestionada para desplegar y escalar aplicaciones sin servidor. Google se encarga de la infraestructura por ti.
En esta guía, desplegaremos un servidor HTTP de Bun en Google Cloud Run usando un Dockerfile.
NOTE
Antes de continuar, asegúrate de tener:- Una aplicación Bun lista para desplegar
- Una cuenta de Google Cloud con facturación habilitada
- Google Cloud CLI instalado y configurado
Inicializar gcloud seleccionando/creando un proyecto
Asegúrate de haber inicializado la CLI de Google Cloud. Este comando te inicia sesión y te permite seleccionar un proyecto existente o crear uno nuevo.
Para más ayuda con la CLI de Google Cloud, consulta la documentación oficial.
gcloud initWelcome! This command will take you through the configuration of gcloud.
You must sign in to continue. Would you like to sign in (Y/n)? Y
You are signed in as [email@example.com].
Pick cloud project to use:
[1] existing-bun-app-1234
[2] Enter a project ID
[3] Create a new project
Please enter numeric choice or text value (must exactly match list item): 3
Enter a Project ID. my-bun-app
Your current project has been set to: [my-bun-app]
The Google Cloud CLI is configured and ready to use!(Opcional) Guardar la información de tu proyecto en variables de entorno
Establece variables para tu ID de proyecto y número para que sea más fácil reutilizarlos en los siguientes pasos.
PROJECT_ID=$(gcloud projects list --format='value(projectId)' --filter='name="my bun app"')
PROJECT_NUMBER=$(gcloud projects list --format='value(projectNumber)' --filter='name="my bun app"')
echo $PROJECT_ID $PROJECT_NUMBERmy-bun-app-... [PROJECT_NUMBER]Vincular una cuenta de servicio de facturación
Enumera tus cuentas de facturación disponibles y vincula una a tu proyecto:
gcloud billing accounts listACCOUNT_ID NAME OPEN MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID] My Billing Account TrueVincula tu cuenta de facturación a tu proyecto. Reemplaza [BILLING_ACCOUNT_ID] con el ID de tu cuenta de facturación.
gcloud billing projects link $PROJECT_ID --billing-account=[BILLING_ACCOUNT_ID]billingAccountName: billingAccounts/[BILLING_ACCOUNT_ID]
billingEnabled: true
name: projects/my-bun-app-.../billingInfo
projectId: my-bun-app-...Habilitar APIs y configurar roles de IAM
Activa los servicios necesarios y otorga permisos de Cloud Build:
gcloud services enable run.googleapis.com cloudbuild.googleapis.com
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--role=roles/run.builderNOTE
Estos comandos habilitan Cloud Run (`run.googleapis.com`) y Cloud Build (`cloudbuild.googleapis.com`), que son necesarios para desplegar desde el código fuente. Cloud Run ejecuta tu aplicación en contenedor, mientras que Cloud Build se encarga de construir y empaquetarla.La vinculación de IAM otorga a la cuenta de servicio de Compute Engine ($PROJECT_NUMBER-compute@developer.gserviceaccount.com) permiso para construir y desplegar imágenes en tu nombre.
Agregar un Dockerfile
Crea un nuevo Dockerfile en la raíz de tu proyecto. Este archivo contiene las instrucciones para inicializar el contenedor, copiar los archivos de tu proyecto local, instalar dependencias e iniciar la aplicación.
# Usar la imagen oficial de Bun para ejecutar la aplicación
FROM oven/bun:latest
# Copiar el package.json y bun.lock dentro del contenedor
COPY package.json bun.lock ./
# Instalar las dependencias
RUN bun install --production --frozen-lockfile
# Copiar el resto de la aplicación dentro del contenedor
COPY . .
# Ejecutar la aplicación
CMD ["bun", "index.ts"]NOTE
Asegúrate de que el comando de inicio corresponda al punto de entrada de tu aplicación. Esto también puede ser `CMD ["bun", "run", "start"]` si tienes un script de inicio en tu `package.json`.Esta imagen instala dependencias y ejecuta tu aplicación con Bun dentro de un contenedor. Si tu aplicación no tiene dependencias, puedes omitir la línea RUN bun install --production --frozen-lockfile.
Crea un nuevo archivo .dockerignore en la raíz de tu proyecto. Este archivo contiene los archivos y directorios que deben ser excluidos de la imagen del contenedor, como node_modules. Esto hace que tus builds sean más rápidos y pequeños:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Cualquier otro archivo o directorio que quieras excluirDesplegar tu servicio
Asegúrate de estar en el directorio que contiene tu Dockerfile, luego despliega directamente desde tu código fuente local:
NOTE
Actualiza el flag `--region` a tu región preferida. También puedes omitir este flag para obtener una solicitud interactiva para seleccionar una región.gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticatedDeploying from source requires an Artifact Registry Docker repository to store built containers. A repository named
[cloud-run-source-deploy] in region [us-west1] will be created.
Do you want to continue (Y/n)? Y
Building using Dockerfile and deploying container to Cloud Run service [my-bun-app] in project [my-bun-app-...] region [us-west1]
✓ Building and deploying... Done.
✓ Validating Service...
✓ Uploading sources...
✓ Building Container... Logs are available at [https://console.cloud.google.com/cloud-build/builds...].
✓ Creating Revision...
✓ Routing traffic...
✓ Setting IAM Policy...
Done.
Service [my-bun-app] revision [my-bun-app-...] has been deployed and is serving 100 percent of traffic.
Service URL: https://my-bun-app-....us-west1.run.appVisitar tu aplicación en vivo
🎉 ¡Tu aplicación Bun está ahora en vivo!
Visita la URL del servicio (https://my-bun-app-....us-west1.run.app) para confirmar que todo funciona como se espera.