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:- Uma aplicação Bun pronta para implantação
- Uma conta Google Cloud com faturamento habilitado
- Google Cloud CLI instalado e configurado
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.
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) 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.
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 uma conta de serviço de faturamento
Liste suas contas de faturamento disponíveis e vincule uma ao seu projeto:
gcloud billing accounts listACCOUNT_ID NAME OPEN MASTER_ACCOUNT_ID
[BILLING_ACCOUNT_ID] My Billing Account TrueVincule sua conta de faturamento ao seu projeto. Substitua [BILLING_ACCOUNT_ID] pelo ID da sua conta de faturamento.
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 e configurar funções IAM
Ative os serviços necessários e conceda permissões do 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
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.
# 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:
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Quaisquer outros arquivos ou diretórios que você deseja excluirImplantar 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.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 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.