Skip to content

Google Cloud Run è una piattaforma gestita per distribuire e scalare applicazioni serverless. Google gestisce l'infrastruttura per te.

In questa guida, distribuiremo un server HTTP Bun su Google Cloud Run usando un Dockerfile.

NOTE

Prima di continuare, assicurati di avere:

Inizializzare gcloud selezionando/creando un progetto

Assicurati di aver inizializzato il Google Cloud CLI. Questo comando ti fa accedere e ti invita a selezionare un progetto esistente o crearne uno nuovo.

Per ulteriore aiuto con il Google Cloud CLI, consulta la documentazione ufficiale.

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!

(Opzionale) Memorizzare le informazioni del progetto in variabili d'ambiente

Imposta le variabili per l'ID e il numero del progetto in modo che siano più facili da riutilizzare nei passaggi seguenti.

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]

Collegare un serviceAccount di fatturazione

Elenca i tuoi account di fatturazione disponibili e collegane uno al tuo progetto:

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

Collega il tuo account di fatturazione al tuo progetto. Sostituisci [BILLING_ACCOUNT_ID] con l'ID del tuo account di fatturazione.

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

Abilitare le API e configurare i ruoli IAM

Attiva i servizi necessari e concedi le autorizzazioni di 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

Questi comandi abilitano Cloud Run (`run.googleapis.com`) e Cloud Build (`cloudbuild.googleapis.com`), necessari per la distribuzione dal codice sorgente. Cloud Run esegue la tua app containerizzata, mentre Cloud Build gestisce la costruzione e il confezionamento.

Il binding IAM concede all'account di servizio Compute Engine ($PROJECT_NUMBER-compute@developer.gserviceaccount.com) il permesso di costruire e distribuire immagini per tuo conto.

Aggiungere un Dockerfile

Crea un nuovo Dockerfile nella root del tuo progetto. Questo file contiene le istruzioni per inizializzare il container, copiare i file del progetto locale, installare le dipendenze e avviare l'applicazione.

docker
# Usa l'immagine ufficiale Bun per eseguire l'applicazione
FROM oven/bun:latest

# Copia il package.json e bun.lock nel container
COPY package.json bun.lock ./

# Installa le dipendenze
RUN bun install --production --frozen-lockfile

# Copia il resto dell'applicazione nel container
COPY . .

# Esegui l'applicazione
CMD ["bun", "index.ts"]

NOTE

Assicurati che il comando di avvio corrisponda al punto di ingresso della tua applicazione. Questo può anche essere `CMD ["bun", "run", "start"]` se hai uno script di avvio nel tuo `package.json`.

Questa immagine installa le dipendenze ed esegue la tua app con Bun all'interno di un container. Se la tua app non ha dipendenze, puoi omettere la riga RUN bun install --production --frozen-lockfile.

Crea un nuovo file .dockerignore nella root del tuo progetto. Questo file contiene i file e le directory che dovrebbero essere esclusi dall'immagine del container, come node_modules. Questo rende le tue build più veloci e più piccole:

docker
node_modules
Dockerfile*
.dockerignore
.git
.gitignore
README.md
LICENSE
.vscode
.env
# Qualsiasi altro file o directory che vuoi escludere

Distribuire il tuo servizio

Assicurati di essere nella directory contenente il tuo Dockerfile, poi distribuisci direttamente dal tuo codice sorgente locale:

NOTE

Aggiorna il flag `--region` con la tua regione preferita. Puoi anche omettere questo flag per ottenere un prompt interattivo per selezionare una regione.
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

Visitare la tua applicazione live

🎉 La tua applicazione Bun è ora online!

Visita l'URL del servizio (https://my-bun-app-....us-west1.run.app) per confermare che tutto funzioni come previsto.

Bun a cura di www.bunjs.com.cn