Descripción General

Esta guía lo lleva a través de la implementación de CaseBender en Google Cloud Run utilizando nuestras imágenes Docker precompiladas.

Prerrequisitos

  1. Cuenta de Google Cloud
  2. CLI de Google Cloud instalado
  3. Docker instalado

Paso 1: Configuración Inicial

Instalar CLI de Google Cloud

# Usando Homebrew
brew install google-cloud-sdk

# Iniciar sesión en Google Cloud

gcloud auth login

# Configurar Docker para usar Google Cloud

gcloud auth configure-docker

Inicializar Proyecto

# Establecer su ID de proyecto
gcloud config set project SU_ID_DE_PROYECTO

# Habilitar APIs requeridas
gcloud services enable \
  cloudbuild.googleapis.com \
  run.googleapis.com \
  secretmanager.googleapis.com \
  cloudresourcemanager.googleapis.com \
  artifactregistry.googleapis.com

Paso 2: Configurar Infraestructura en la Nube

Crear Bucket de Cloud Storage

# Crear bucket de almacenamiento
gsutil mb -l us-central1 gs://casebender-storage

# Crear cuenta de servicio para almacenamiento
gcloud iam service-accounts create casebender-storage \
  --display-name "CaseBender Storage Service Account"

# Obtener el correo electrónico de la cuenta de servicio
STORAGE_SA_EMAIL=$(gcloud iam service-accounts list \
  --filter="displayName:CaseBender Storage Service Account" \
  --format="value(email)")

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

# Crear y descargar clave de cuenta de servicio
gcloud iam service-accounts keys create storage-key.json \
  --iam-account=$STORAGE_SA_EMAIL

# Crear secreto para credenciales de almacenamiento
gcloud secrets create casebender-storage-key \
  --replication-policy="automatic"

# Importar la clave de cuenta de servicio como secreto
gcloud secrets versions add casebender-storage-key \
  --data-file=storage-key.json

Configurar Cloud SQL (PostgreSQL)

# Crear instancia PostgreSQL
gcloud sql instances create casebender-db \
  --database-version=POSTGRES_14 \
  --cpu=2 \
  --memory=4GB \
  --region=us-central1 \
  --root-password="SU_CONTRASEÑA_SEGURA"

# Crear base de datos
gcloud sql databases create casebender \
  --instance=casebender-db

# Crear usuario
gcloud sql users create casebender \
  --instance=casebender-db \
  --password="SU_CONTRASEÑA_SEGURA"

Configurar Memorystore (Redis)

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

Configurar Secret Manager

# Crear y almacenar variables de entorno
cat << EOF | gcloud secrets create casebender-env --data-file=-
AUTH_SECRET=su-secreto-de-autenticacion
AUTH_SALT=su-sal-de-autenticacion
POSTGRES_PRISMA_URL="postgresql://casebender:SU_CONTRASEÑA_SEGURA@/casebender?host=/cloudsql/SU_ID_DE_PROYECTO:us-central1:casebender-db"
REDIS_URL="redis://DIRECCIÓN_IP_REDIS:6379"
GOOGLE_STORAGE_BUCKET=casebender-storage
EOF

Paso 3: Extraer y Subir Imágenes Docker

# Crear repositorio de Artifact Registry
gcloud artifacts repositories create casebender \
  --repository-format=docker \
  --location=us-central1

# Configurar Docker para Artifact Registry
gcloud auth configure-docker us-central1-docker.pkg.dev

# Extraer imágenes de CaseBender
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest

# Etiquetar imágenes para 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

# Subir imágenes
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

Paso 4: Implementar Servicios

Implementar Aplicación Principal

# Implementar en 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"

Implementar Procesador de Flujo de Trabajo

# Implementar procesador de flujo de trabajo
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"

Implementar Procesador MISP

# Implementar procesador 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"

Paso 5: Configurar Dominio y SSL

Mapear Dominio Personalizado

# Añadir mapeo de dominio
gcloud run domain-mappings create \
  --service casebender \
  --domain su-dominio.com \
  --region us-central1

Siga los pasos de verificación de DNS en la Consola de Google Cloud para completar el mapeo de dominio.

Monitoreo y Mantenimiento

Configurar Monitoreo

# Habilitar Cloud Monitoring
gcloud services enable monitoring.googleapis.com

# Configurar alertas para Cloud Run
gcloud alpha monitoring policies create \
  --policy-from-file=monitoring-policy.json

Configurar Registros

# Ver registros de la aplicación
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=casebender" --limit=10

Solución de Problemas

Problemas Comunes

  1. Errores de Conexión a Base de Datos:

    • Verifique que la instancia de Cloud SQL esté en ejecución
    • Confirme que las credenciales sean correctas
    • Asegúrese de que la conexión de Cloud SQL esté configurada correctamente
  2. Problemas de Permisos:

    • Verifique que la cuenta de servicio tenga los permisos adecuados
    • Confirme que los secretos estén accesibles para el servicio
  3. Errores de Implementación:

    • Revise los registros de implementación para mensajes de error
    • Verifique que las imágenes Docker estén correctamente etiquetadas y subidas

Siguientes Pasos

  1. Configure monitoreo y alertas adicionales
  2. Implemente un pipeline de CI/CD para actualizaciones automáticas
  3. Configure respaldos programados para la base de datos
  4. Establezca políticas de escalado para manejar cargas variables