> ## Documentation Index
> Fetch the complete documentation index at: https://docs.casebender.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Distribuzione su Google Cloud Run

> Distribuisci CaseBender su Google Cloud Run con istruzioni passo-passo

## Panoramica

Questa guida ti accompagna attraverso la distribuzione di CaseBender su Google Cloud Run utilizzando le nostre immagini Docker precostruite.

## Prerequisiti

1. [Account Google Cloud](https://cloud.google.com/)
2. [Google Cloud CLI](https://cloud.google.com/sdk/docs/install) installato
3. [Docker](https://docs.docker.com/get-docker/) installato

## Passo 1: Configurazione Iniziale

### Installa Google Cloud CLI

<CodeGroup>
  ```bash macOS theme={null}
  # Usando Homebrew
  brew install google-cloud-sdk

  # Accedi a Google Cloud
  gcloud auth login

  # Configura Docker per usare Google Cloud
  gcloud auth configure-docker
  ```

  ```bash Linux theme={null}
  # Scarica l'archivio
  curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-cli-VERSION-linux-x86_64.tar.gz

  # Estrai l'archivio
  tar -xf google-cloud-cli-VERSION-linux-x86_64.tar.gz

  # Esegui lo script di installazione
  ./google-cloud-sdk/install.sh

  # Accedi a Google Cloud
  gcloud auth login

  # Configura Docker per usare Google Cloud
  gcloud auth configure-docker
  ```

  ```powershell Windows theme={null}
  # Scarica ed esegui l'installatore
  # https://dl.google.com/dl/cloudsdk/channels/rapid/GoogleCloudSDKInstaller.exe

  # Accedi a Google Cloud
  gcloud auth login

  # Configura Docker per usare Google Cloud
  gcloud auth configure-docker
  ```
</CodeGroup>

### Inizializza Progetto

```bash theme={null}
# Imposta il tuo ID progetto
gcloud config set project YOUR_PROJECT_ID

# Abilita le API richieste
gcloud services enable \
  cloudbuild.googleapis.com \
  run.googleapis.com \
  secretmanager.googleapis.com \
  cloudresourcemanager.googleapis.com \
  artifactregistry.googleapis.com
```

## Passo 2: Configura l'Infrastruttura Cloud

### Crea Bucket Cloud Storage

```bash theme={null}
# Crea bucket storage
gsutil mb -l us-central1 gs://casebender-storage

# Crea account servizio per storage
gcloud iam service-accounts create casebender-storage \
  --display-name "CaseBender Storage Service Account"

# Ottieni email account servizio
STORAGE_SA_EMAIL=$(gcloud iam service-accounts list \
  --filter="displayName:CaseBender Storage Service Account" \
  --format="value(email)")

# Concedi permessi
gsutil iam ch \
  serviceAccount:$STORAGE_SA_EMAIL:objectViewer,objectCreator \
  gs://casebender-storage

# Crea e scarica chiave account servizio
gcloud iam service-accounts keys create storage-key.json \
  --iam-account=$STORAGE_SA_EMAIL

# Crea segreto per credenziali storage
gcloud secrets create casebender-storage-key \
  --replication-policy="automatic"

# Importa la chiave account servizio come segreto
gcloud secrets versions add casebender-storage-key \
  --data-file=storage-key.json
```

### Configura Cloud SQL (PostgreSQL)

```bash theme={null}
# Crea istanza PostgreSQL
gcloud sql instances create casebender-db \
  --database-version=POSTGRES_14 \
  --cpu=2 \
  --memory=4GB \
  --region=us-central1 \
  --root-password="YOUR_SECURE_PASSWORD"

# Crea database
gcloud sql databases create casebender \
  --instance=casebender-db

# Crea utente
gcloud sql users create casebender \
  --instance=casebender-db \
  --password="YOUR_SECURE_PASSWORD"
```

### Configura Memorystore (Redis)

```bash theme={null}
# Crea istanza Redis
gcloud redis instances create casebender-redis \
  --size=2 \
  --region=us-central1 \
  --redis-version=redis_6_x
```

### Configura Secret Manager

```bash theme={null}
# Crea e memorizza variabili d'ambiente
cat << EOF | gcloud secrets create casebender-env --data-file=-
AUTH_SECRET=your-auth-secret
AUTH_SALT=your-auth-salt
POSTGRES_PRISMA_URL="postgresql://casebender:YOUR_SECURE_PASSWORD@/casebender?host=/cloudsql/YOUR_PROJECT_ID:us-central1:casebender-db"
REDIS_URL="redis://REDIS_IP_ADDRESS:6379"
GOOGLE_STORAGE_BUCKET=casebender-storage
EOF
```

## Passo 3: Scarica e Carica Immagini Docker

```bash theme={null}
# Crea repository Artifact Registry
gcloud artifacts repositories create casebender \
  --repository-format=docker \
  --location=us-central1

# Configura Docker per Artifact Registry
gcloud auth configure-docker us-central1-docker.pkg.dev

# Scarica immagini CaseBender
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest

# Tagga immagini per Google Artifact Registry
docker tag casebender/casebender:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest
docker tag casebender/workflow-processor:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest
docker tag casebender/misp-processor:latest us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest

# Carica immagini
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest
docker push us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest
```

## Passo 4: Distribuisci Servizi

### Distribuisci Applicazione Principale

```bash theme={null}
# Distribuisci su Cloud Run
gcloud run deploy casebender \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/app:latest \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars GOOGLE_STORAGE_BUCKET=casebender-storage \
  --set-secrets "/secrets/storage-key=casebender-storage-key:latest" \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"
```

### Distribuisci Processore Workflow

```bash theme={null}
# Distribuisci processore workflow
gcloud run deploy workflow-processor \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/workflow-processor:latest \
  --platform managed \
  --region us-central1 \
  --no-allow-unauthenticated \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"
```

### Distribuisci Processore MISP

```bash theme={null}
# Distribuisci processore MISP
gcloud run deploy misp-processor \
  --image us-central1-docker.pkg.dev/$PROJECT_ID/casebender/misp-processor:latest \
  --platform managed \
  --region us-central1 \
  --no-allow-unauthenticated \
  --service-account=$STORAGE_SA_EMAIL \
  --add-cloudsql-instances $PROJECT_ID:us-central1:casebender-db \
  --set-secrets "/app/.env=casebender-env:latest"
```

## Passo 5: Configura Dominio e SSL

### Mappa Dominio Personalizzato

```bash theme={null}
# Aggiungi mappatura dominio
gcloud run domain-mappings create \
  --service casebender \
  --domain your-domain.com \
  --region us-central1
```

Segui i passaggi di verifica DNS nella Console di Google Cloud per completare la mappatura del dominio.

## Monitoraggio e Manutenzione

### Configura Monitoraggio

1. Naviga su Cloud Monitoring nella Console di Google Cloud
2. Crea un controllo di disponibilità per il tuo servizio
3. Configura avvisi per:
   * Tassi di errore
   * Latenza
   * Numero di istanze
   * Utilizzo memoria

### Visualizza Log

```bash theme={null}
# Visualizza log servizio
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=casebender" --limit 50

# Streaming log
gcloud logging tail "resource.type=cloud_run_revision AND resource.labels.service_name=casebender"
```

### Aggiorna Applicazione

Per distribuire aggiornamenti:

```bash theme={null}
# Compila e distribuisci nuova versione
gcloud builds submit --config cloudbuild.yaml

# Ripristina se necessario
gcloud run services rollback casebender \
  --to-revision=REVISION_ID \
  --region=us-central1
```

## Ottimizzazione dei Costi

1. **Configurazione Scalabilità Automatica**

   ```bash theme={null}
   gcloud run services update casebender \
     --min-instances=1 \
     --max-instances=10 \
     --region=us-central1
   ```

2. **Allocazione Risorse**
   ```bash theme={null}
   gcloud run services update casebender \
     --memory=1Gi \
     --cpu=1 \
     --region=us-central1
   ```

## Risoluzione Problemi

### Problemi Comuni

1. **Problemi di Connessione**

   * Verifica connessione Cloud SQL
   * Controlla connettività Redis
   * Valida variabili d'ambiente

2. **Problemi di Performance**

   * Rivedi metriche istanza
   * Controlla allocazione risorse
   * Analizza pattern richieste

3. **Errori di Distribuzione**
   * Controlla log build
   * Verifica permessi account servizio
   * Rivedi configurazione distribuzione

## Prossimi Passi

* Configura pipeline CI/CD
* Configura strategie di backup
* Implementa monitoraggio e avvisi
* Rivedi migliori pratiche di sicurezza
