Descripción General
Esta guía lo lleva a través de la implementación de CaseBender en DigitalOcean utilizando App Platform, Managed Databases y Spaces para almacenamiento.
Prerrequisitos
- Cuenta de DigitalOcean
- doctl CLI instalado y configurado
- Docker instalado
Paso 1: Configuración Inicial
Instalar y Configurar doctl CLI
Paso 2: Configurar Almacenamiento
Crear un Espacio (Space)
# Crear un nuevo espacio
doctl spaces create casebender-storage --region nyc3
# Crear una clave de acceso para Spaces
doctl spaces access-keys create --name casebender-key
Anote la clave de acceso y la clave secreta que se muestran, las necesitará más adelante.
Paso 3: Configurar Base de Datos
Crear Clúster de PostgreSQL
# Crear un clúster de PostgreSQL
doctl databases create casebender-db --engine pg --region nyc1 --size db-s-1vcpu-1gb --num-nodes 1 --version 13
# Obtener información de conexión
doctl databases connection casebender-db --format Host,Port,User,Password,Database
# Crear una base de datos para CaseBender
doctl databases db create casebender-db casebender
Crear Clúster de Redis
# Crear un clúster de Redis
doctl databases create casebender-redis --engine redis --region nyc1 --size db-s-1vcpu-1gb --num-nodes 1
# Obtener información de conexión
doctl databases connection casebender-redis --format Host,Port,Password
Paso 4: Configurar Container Registry
# Crear un registro de contenedores
doctl registry create casebender-registry
# Iniciar sesión en el registro
doctl registry login
Paso 5: Preparar Imágenes de Docker
# 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 el registro de DigitalOcean
docker tag casebender/casebender:latest registry.digitalocean.com/casebender-registry/app:latest
docker tag casebender/workflow-processor:latest registry.digitalocean.com/casebender-registry/workflow-processor:latest
docker tag casebender/misp-processor:latest registry.digitalocean.com/casebender-registry/misp-processor:latest
# Subir imágenes al registro
docker push registry.digitalocean.com/casebender-registry/app:latest
docker push registry.digitalocean.com/casebender-registry/workflow-processor:latest
docker push registry.digitalocean.com/casebender-registry/misp-processor:latest
Crear archivo de especificación
Cree un archivo app.yaml
con el siguiente contenido:
name: casebender
region: nyc
services:
- name: casebender-app
github:
repo: your-github-repo
branch: main
deploy_on_push: true
source_dir: /
dockerfile_path: Dockerfile
http_port: 3000
instance_count: 2
instance_size_slug: basic-xxs
routes:
- path: /
envs:
- key: POSTGRES_PRISMA_URL
value: ${casebender-db.DATABASE_URL}
type: SECRET
- key: REDIS_URL
value: ${casebender-redis.DATABASE_URL}
type: SECRET
- key: SPACES_KEY
value: your-spaces-key
type: SECRET
- key: SPACES_SECRET
value: your-spaces-secret
type: SECRET
- key: SPACES_ENDPOINT
value: nyc3.digitaloceanspaces.com
- key: SPACES_BUCKET
value: casebender-storage
- key: NODE_ENV
value: production
- name: workflow-processor
github:
repo: your-github-repo
branch: main
deploy_on_push: true
source_dir: /
dockerfile_path: Dockerfile.workflow
instance_count: 1
instance_size_slug: basic-xxs
envs:
- key: POSTGRES_PRISMA_URL
value: ${casebender-db.DATABASE_URL}
type: SECRET
- key: REDIS_URL
value: ${casebender-redis.DATABASE_URL}
type: SECRET
- key: SPACES_KEY
value: your-spaces-key
type: SECRET
- key: SPACES_SECRET
value: your-spaces-secret
type: SECRET
- key: SPACES_ENDPOINT
value: nyc3.digitaloceanspaces.com
- key: SPACES_BUCKET
value: casebender-storage
- key: NODE_ENV
value: production
- name: misp-processor
github:
repo: your-github-repo
branch: main
deploy_on_push: true
source_dir: /
dockerfile_path: Dockerfile.misp
instance_count: 1
instance_size_slug: basic-xxs
envs:
- key: POSTGRES_PRISMA_URL
value: ${casebender-db.DATABASE_URL}
type: SECRET
- key: REDIS_URL
value: ${casebender-redis.DATABASE_URL}
type: SECRET
- key: SPACES_KEY
value: your-spaces-key
type: SECRET
- key: SPACES_SECRET
value: your-spaces-secret
type: SECRET
- key: SPACES_ENDPOINT
value: nyc3.digitaloceanspaces.com
- key: SPACES_BUCKET
value: casebender-storage
- key: NODE_ENV
value: production
databases:
- name: casebender-db
engine: PG
production: true
cluster_name: casebender-db
db_name: casebender
db_user: doadmin
- name: casebender-redis
engine: REDIS
production: true
cluster_name: casebender-redis
version: "6"
Implementar la aplicación
# Crear la aplicación desde el archivo de especificación
doctl apps create --spec app.yaml
# Obtener el ID de la aplicación
APP_ID=$(doctl apps list --format ID,Spec.Name | grep casebender | awk '{print $1}')
# Verificar el estado de la implementación
doctl apps get $APP_ID
Paso 7: Configurar Dominio Personalizado
Obtener URL de la Aplicación
# Obtener URL de la aplicación
APP_URL=$(doctl apps get $APP_ID --format DefaultIngress | grep -v DEFAULT | tr -d ' ')
echo "URL de la aplicación: $APP_URL"
Configurar Dominio Personalizado
# Agregar dominio personalizado
doctl apps tier instance list
doctl apps update $APP_ID --spec app.yaml --tier professional
# Agregar dominio
doctl apps update $APP_ID --add-domain su-dominio.com
Siga las instrucciones para configurar los registros DNS para su dominio.
Monitoreo y Mantenimiento
Monitorear la Aplicación
# Ver registros de la aplicación
doctl apps logs $APP_ID
# Ver componentes de la aplicación
doctl apps list-deployments $APP_ID
# Ver métricas de la aplicación (requiere nivel profesional)
doctl apps get $APP_ID --format ActiveDeployment.Metrics
Escalar la Aplicación
# Actualizar el número de instancias
doctl apps update $APP_ID --spec app.yaml
Edite el archivo app.yaml
para cambiar instance_count
o instance_size_slug
según sea necesario.
Solución de Problemas
Problemas Comunes
-
Errores de Conexión a Base de Datos:
- Verifique las cadenas de conexión en las variables de entorno
- Confirme que la base de datos esté en ejecución
- Verifique que los firewalls permitan conexiones desde App Platform
-
Problemas de Implementación:
- Revise los registros de implementación:
doctl apps logs $APP_ID --deployment
- Verifique que las imágenes de Docker sean accesibles
- Confirme que el Dockerfile sea válido
-
Problemas de Rendimiento:
- Considere aumentar el tamaño de la instancia
- Aumente el número de instancias
- Revise las métricas de rendimiento
Siguientes Pasos
- Configure copias de seguridad automáticas para la base de datos
- Implemente un pipeline de CI/CD con GitHub Actions
- Configure reglas de escalado automático
- Implemente DigitalOcean CDN para mejorar el rendimiento