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
  2. Google Cloud CLI installato
  3. Docker installato

Passo 1: Configurazione Iniziale

Installa Google Cloud CLI

# Usando Homebrew
brew install google-cloud-sdk

# Accedi a Google Cloud
gcloud auth login

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

Inizializza Progetto

# 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

# 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)

# 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)

# Crea istanza Redis
gcloud redis instances create casebender-redis \
  --size=2 \
  --region=us-central1 \
  --redis-version=redis_6_x

Configura Secret Manager

# 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

# 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

# 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

# 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

# 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

# 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

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

# 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

    gcloud run services update casebender \
      --min-instances=1 \
      --max-instances=10 \
      --region=us-central1
  2. Allocazione Risorse

    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