Skip to content

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:

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.

bash
gcloud init
txt
Welcome! 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.

bash
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_NUMBER
txt
my-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:

bash
gcloud billing accounts list
txt
ACCOUNT_ID            NAME                OPEN  MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID]  My Billing Account  True

Vincula tu cuenta de facturación a tu proyecto. Reemplaza [BILLING_ACCOUNT_ID] con el ID de tu cuenta de facturación.

bash
gcloud billing projects link $PROJECT_ID --billing-account=[BILLING_ACCOUNT_ID]
txt
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:

bash
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.builder

NOTE

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.

docker
# 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:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Cualquier otro archivo o directorio que quieras excluir

Desplegar 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.
bash
gcloud run deploy my-bun-app --source . --region=us-west1 --allow-unauthenticated
txt
Deploying 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.app

Visitar 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.

Bun por www.bunjs.com.cn editar