Visão Geral
Este guia orienta você na implantação do CaseBender no DigitalOcean usando imagens Docker pré-construídas com Kubernetes (DOKS) e serviços gerenciados.
Pré-requisitos
- Conta DigitalOcean
- doctl CLI instalado
- kubectl instalado
- Docker instalado
Passo 1: Configuração Inicial
Instalar e Configurar doctl
Passo 2: Criar Cluster Kubernetes
# Criar cluster DOKS
doctl kubernetes cluster create casebender \
--region nyc1 \
--size s-2vcpu-4gb \
--count 3 \
--version latest
# Obter kubeconfig
doctl kubernetes cluster kubeconfig save casebender
Passo 3: Configurar Serviços Gerenciados
Criar Spaces para Armazenamento de Objetos
# Criar bucket Spaces
doctl spaces create casebender-storage \
--region nyc3
# Criar chave de acesso Spaces
doctl spaces access-key create
# Nota: Salve a chave de acesso e a chave secreta com segurança
# Elas serão necessárias para a configuração da aplicação
Criar PostgreSQL Gerenciado
# Criar cluster de banco de dados
doctl databases create \
--engine pg \
--name casebender-db \
--region nyc1 \
--size db-s-2vcpu-4gb \
--version 14 \
--num-nodes 1
# Criar banco de dados
doctl databases db create casebender-db casebender
# Obter detalhes de conexão
doctl databases connection casebender-db --format ConnectionString
Criar Redis Gerenciado
# Criar cluster Redis
doctl databases create \
--engine redis \
--name casebender-redis \
--region nyc1 \
--size db-s-1vcpu-2gb \
--version 7
# Obter detalhes de conexão
doctl databases connection casebender-redis --format ConnectionString
Passo 4: Configurar Container Registry
# Criar container registry
doctl registry create casebender-registry
# Obter endpoint do registry
REGISTRY_ENDPOINT=$(doctl registry get-endpoint)
# Baixar imagens do CaseBender
docker pull casebender/casebender:latest
docker pull casebender/workflow-processor:latest
docker pull casebender/misp-processor:latest
# Marcar imagens para o registry
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
# Enviar imagens
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
# Adicionar registry ao cluster Kubernetes
doctl kubernetes cluster registry add casebender
Passo 5: Implantar no Kubernetes
Criar Namespace
kubectl create namespace casebender
Criar Secrets
# Criar secrets para banco de dados e Redis
kubectl create secret generic db-credentials \
--namespace casebender \
--from-literal=postgres-url="postgresql://doadmin:password@casebender-db-do-user-1234567-0.b.db.ondigitalocean.com:25060/casebender?sslmode=require" \
--from-literal=redis-url="rediss://default:password@casebender-redis-do-user-1234567-0.b.db.ondigitalocean.com:25061"
# Criar secrets para aplicação
kubectl create secret generic app-secrets \
--namespace casebender \
--from-literal=auth-secret="seu-segredo-de-autenticação" \
--from-literal=auth-salt="seu-salt-de-autenticação"
Implantar Aplicações
Crie o arquivo deployment.yaml
:
apiVersion: apps/v1
kind: Deployment
metadata:
name: casebender-app
namespace: casebender
spec:
replicas: 2
selector:
matchLabels:
app: casebender-app
template:
metadata:
labels:
app: casebender-app
spec:
containers:
- name: app
image: registry.digitalocean.com/casebender-registry/app:latest
ports:
- containerPort: 3000
env:
- name: AUTH_SECRET
valueFrom:
secretKeyRef:
name: app-secrets
key: auth-secret
- name: AUTH_SALT
valueFrom:
secretKeyRef:
name: app-secrets
key: auth-salt
- name: POSTGRES_PRISMA_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: postgres-url
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: redis-url
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: workflow-processor
namespace: casebender
spec:
replicas: 1
selector:
matchLabels:
app: workflow-processor
template:
metadata:
labels:
app: workflow-processor
spec:
containers:
- name: processor
image: registry.digitalocean.com/casebender-registry/workflow-processor:latest
env:
- name: POSTGRES_PRISMA_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: postgres-url
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: redis-url
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: misp-processor
namespace: casebender
spec:
replicas: 1
selector:
matchLabels:
app: misp-processor
template:
metadata:
labels:
app: misp-processor
spec:
containers:
- name: processor
image: registry.digitalocean.com/casebender-registry/misp-processor:latest
env:
- name: POSTGRES_PRISMA_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: postgres-url
- name: REDIS_URL
valueFrom:
secretKeyRef:
name: db-credentials
key: redis-url
Aplique os deployments:
kubectl apply -f deployment.yaml
Criar Serviços
Crie o arquivo service.yaml
:
apiVersion: v1
kind: Service
metadata:
name: casebender-app
namespace: casebender
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 3000
selector:
app: casebender-app
Aplique o serviço:
kubectl apply -f service.yaml
Passo 7: Configurar Ingress
Instalar Controlador NGINX Ingress
# Adicionar repositório Helm
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
# Instalar Controlador NGINX Ingress
helm install nginx-ingress ingress-nginx/ingress-nginx \
--namespace casebender \
--set controller.publishService.enabled=true
Configurar Ingress
Crie o arquivo ingress.yaml
:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: casebender-ingress
namespace: casebender
annotations:
kubernetes.io/ingress.class: nginx
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts:
- seu-dominio.com
secretName: casebender-tls
rules:
- host: seu-dominio.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: casebender-app
port:
number: 80
Aplique o ingress:
kubectl apply -f ingress.yaml
# Instalar cert-manager
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/download/v1.8.0/cert-manager.yaml
# Criar ClusterIssuer
cat <<EOF | kubectl apply -f -
apiVersion: cert-manager.io/v1
kind: ClusterIssuer
metadata:
name: letsencrypt-prod
spec:
acme:
server: https://acme-v02.api.letsencrypt.org/directory
email: seu-email@dominio.com
privateKeySecretRef:
name: letsencrypt-prod
solvers:
- http01:
ingress:
class: nginx
EOF
Monitoramento e Manutenção
Configurar Monitoramento
# Instalar metrics server
kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
# Implantar Prometheus e Grafana
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--create-namespace
Configurar Escalonamento Horizontal de Pods
Crie o arquivo hpa.yaml
:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: casebender-app-hpa
namespace: casebender
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: casebender-app
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 80
Aplique o HPA:
kubectl apply -f hpa.yaml
Backup e Recuperação de Desastres
Backups de Banco de Dados
Os bancos de dados gerenciados do DigitalOcean lidam automaticamente com backups. Você também pode:
# Criar backup manual
doctl databases backup casebender-db
Configurar Failover de Banco de Dados
# Habilitar failover automático
doctl databases replica casebender-db create \
--region sfo2
Melhores Práticas de Segurança
- Habilitar Firewall na Nuvem do DigitalOcean
- Usar rede privada
- Implementar políticas de rede
- Atualizações regulares de segurança
- Habilitar registro de auditoria
Otimização de Custos
- Usar tamanhos de nós apropriados
- Implementar auto-escalonamento
- Usar armazenamento em bloco com sabedoria
- Monitorar uso de recursos
- Considerar droplets reservados
Próximos Passos
- Configurar pipeline de CI/CD
- Configurar alertas de monitoramento
- Implementar solução de registro
- Revisar medidas de segurança