Skip to content

Google Cloud Run é uma plataforma gerenciada para implantar e dimensionar aplicações serverless. O Google cuida da infraestrutura para você.

Neste guia, vamos implantar um servidor HTTP Bun no Google Cloud Run usando um Dockerfile.

NOTE

Antes de continuar, certifique-se de ter:

Inicializar o gcloud selecionando/criando um projeto

Certifique-se de ter inicializado o Google Cloud CLI. Este comando faz login e solicita que você selecione um projeto existente ou crie um novo.

Para mais ajuda com o Google Cloud CLI, consulte a documentação 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) Armazenar informações do projeto em variáveis de ambiente

Defina variáveis para o ID do projeto e número para que sejam mais fáceis de reutilizar nas etapas a seguir.

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 uma conta de serviço de faturamento

Liste suas contas de faturamento disponíveis e vincule uma ao seu projeto:

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

Vincule sua conta de faturamento ao seu projeto. Substitua [BILLING_ACCOUNT_ID] pelo ID da sua conta de faturamento.

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 e configurar funções IAM

Ative os serviços necessários e conceda permissões do 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

Estes comandos habilitam o Cloud Run (`run.googleapis.com`) e o Cloud Build (`cloudbuild.googleapis.com`), que são necessários para implantar a partir do código-fonte. O Cloud Run executa sua aplicação em container, enquanto o Cloud Build cuida do build e empacotamento.

A vinculação IAM concede à conta de serviço do Compute Engine ($PROJECT_NUMBER-compute@developer.gserviceaccount.com) permissão para buildar e implantar imagens em seu nome.

Adicionar um Dockerfile

Crie um novo Dockerfile na raiz do seu projeto. Este arquivo contém as instruções para inicializar o container, copiar os arquivos do projeto local, instalar dependências e iniciar a aplicação.

docker
# Use a imagem oficial do Bun para executar a aplicação
FROM oven/bun:latest

# Copie o package.json e bun.lock para dentro do container
COPY package.json bun.lock ./

# Instale as dependências
RUN bun install --production --frozen-lockfile

# Copie o restante da aplicação para dentro do container
COPY . .

# Execute a aplicação
CMD ["bun", "index.ts"]

NOTE

Certifique-se de que o comando de início corresponde ao ponto de entrada da sua aplicação. Isso também pode ser `CMD ["bun", "run", "start"]` se você tiver um script start no seu `package.json`.

Esta imagem instala dependências e executa sua aplicação com Bun dentro de um container. Se sua aplicação não tiver dependências, você pode omitir a linha RUN bun install --production --frozen-lockfile.

Crie um novo arquivo .dockerignore na raiz do seu projeto. Este arquivo contém os arquivos e diretórios que devem ser excluídos da imagem do container, como node_modules. Isso torna seus builds mais rápidos e menores:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Quaisquer outros arquivos ou diretórios que você deseja excluir

Implantar seu serviço

Certifique-se de estar no diretório contendo seu Dockerfile e implante diretamente do seu código-fonte local:

NOTE

Atualize a flag `--region` para sua região preferida. Você também pode omitir esta flag para obter um prompt interativo para selecionar uma região.
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 sua aplicação online

🎉 Sua aplicação Bun está agora online!

Visite a URL do serviço (https://my-bun-app-....us-west1.run.app) para confirmar que tudo funciona como esperado.

Bun by www.bunjs.com.cn edit