Pré-requisitos

Antes de começar, certifique-se de ter o seguinte instalado em seu sistema:

  • Docker Engine (20.10.0 ou superior)
  • Docker Compose (v2.0.0 ou superior)
  • OpenSSL (para gerar certificados SSL)

Instalando o Docker

Para macOS:

  1. Baixe e instale o Docker Desktop do Docker Hub
  2. Siga o assistente de instalação
  3. Verifique a instalação:
docker --version
docker-compose --version

Para Linux (Ubuntu/Debian):

# Atualize o índice de pacotes
sudo apt-get update

# Instale os pré-requisitos
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

# Adicione a chave GPG oficial do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Configure o repositório estável
echo \
  "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Instale o Docker Engine
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

# Adicione seu usuário ao grupo docker
sudo usermod -aG docker $USER

Para Windows:

  1. Baixe e instale o Docker Desktop do Docker Hub
  2. Habilite o WSL 2 seguindo a documentação do Docker
  3. Siga o assistente de instalação
  4. Verifique a instalação no PowerShell:
docker --version
docker-compose --version

Passo 1: Criar Diretório do Projeto

Crie um novo diretório para sua implantação do CaseBender e navegue até ele:

mkdir casebender-deployment
cd casebender-deployment

Passo 2: Configurar Variáveis de Ambiente

Crie um arquivo .env com o seguinte conteúdo:

# Autenticação
AUTH_SECRET="B7OawnWf6+LwB/9yXbxbk4ppZ1khydqj4qc9k9g3nnE="
AUTH_SALT="B7OawnW"
NEXTAUTH_URL=https://local.casebender.com
NEXTAPP_URL=https://local.casebender.com

# Configuração do Liveblocks
LIVEBLOCKS_SECRET_KEY=sk_dev_HaIczPV4gPit5_gx7YRsNXLGJNzBE5wQ8z8I1H8ft3ZPZHVrfH2ryJJ586ezHYla

# Configuração do Banco de Dados
POSTGRES_PRISMA_URL="postgresql://superadmin:88AlwaysTimeToWin88@db:5432/casebender?pgbouncer=true&connect_timeout=15"
POSTGRES_URL="postgresql://superadmin:88AlwaysTimeToWin88@db:5432/casebender?pgbouncer=true&connect_timeout=15"
POSTGRES_URL_NON_POOLING="postgresql://superadmin:88AlwaysTimeToWin88@db:5432/casebender"

# Configuração do Redis
REDIS_URL="redis://redis:6379"

Passo 3: Gerar Certificados SSL

Para desenvolvimento local, gere certificados SSL autoassinados:

# Gerar certificado SSL e chave
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout local-casebender.key \
  -out local-casebender.crt \
  -subj "/CN=local.casebender.com/O=CaseBender/C=US"

# Verificar o certificado
openssl x509 -in local-casebender.crt -text -noout

Passo 4: Configurar Nginx

Crie nginx.conf com o seguinte conteúdo:

events {
    worker_connections 1024;
}

http {
    server {
        listen 443 ssl http2;
        server_name local.casebender.com;

        ssl_certificate /etc/nginx/certs/local-casebender.crt;
        ssl_certificate_key /etc/nginx/certs/local-casebender.key;

        location / {
            proxy_pass http://app:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

    # Servidor HTTP opcional para redirecionar para HTTPS
    server {
        listen 80;
        server_name local.casebender.com;
        # Redirecionar todo o tráfego HTTP para HTTPS
        return 301 https://$host$request_uri;
    }
}

Passo 5: Criar Configuração do Docker Compose

Crie docker-compose.yml com o seguinte conteúdo:

services:
  app:
    ports:
      - "3000:3000"
    environment:
      - AUTH_SECRET=${AUTH_SECRET}
      - AUTH_SALT=${AUTH_SALT}
      - NEXTAUTH_URL=${NEXTAUTH_URL:-https://local.casebender.com}
      - NEXTAPP_URL=${NEXTAPP_URL:-https://local.casebender.com}
      - LIVEBLOCKS_SECRET_KEY=${LIVEBLOCKS_SECRET_KEY}
      - POSTGRES_PRISMA_URL=${POSTGRES_PRISMA_URL}
      - POSTGRES_URL=${POSTGRES_URL}
      - POSTGRES_URL_NON_POOLING=${POSTGRES_URL_NON_POOLING}
    image: casebender/casebender:latest
    depends_on:
      - db
    restart: unless-stopped

  db:
    image: postgres
    environment:
      POSTGRES_USER: superadmin
      POSTGRES_PASSWORD: 88AlwaysTimeToWin88
      POSTGRES_DB: casebender
    ports:
      - "5433:5432"
    volumes:
      - pgdata:/var/lib/postgresql/data

  workflow-processor:
    image: casebender/workflow-processor:latest
    environment:
      - POSTGRES_PRISMA_URL=${POSTGRES_PRISMA_URL}
      - POSTGRES_URL=${POSTGRES_URL}
      - POSTGRES_URL_NON_POOLING=${POSTGRES_URL_NON_POOLING}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - db
      - redis
    ports:
      - "3001:3001"

  misp-processor:
    image: casebender/misp-processor:latest
    environment:
      - POSTGRES_PRISMA_URL=${POSTGRES_PRISMA_URL}
      - POSTGRES_URL=${POSTGRES_URL}
      - POSTGRES_URL_NON_POOLING=${POSTGRES_URL_NON_POOLING}
      - REDIS_URL=${REDIS_URL}
    depends_on:
      - db
      - redis
    ports:
      - "3002:3002"

  redis:
    image: redis:7.2-alpine
    command: redis-server --protected-mode no
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data
    restart: unless-stopped

  minio:
    image: quay.io/minio/minio
    mem_limit: 512m
    command: ["minio", "server", "/data", "--console-address", ":9090"]
    environment:
      - MINIO_ROOT_USER=minioadmin
      - MINIO_ROOT_PASSWORD=minioadmin
    ports:
      - "9090:9090"
      - "9000:9000"
    volumes:
      - "miniodata:/data"

  nginx:
    image: nginx:latest
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./local-casebender.crt:/etc/nginx/certs/local-casebender.crt:ro
      - ./local-casebender.key:/etc/nginx/certs/local-casebender.key:ro
    depends_on:
      - app

volumes:
  miniodata:
  pgdata:
  redis_data:

Passo 6: Configurar DNS Local

Adicione a seguinte entrada ao seu arquivo hosts:

Para macOS e Linux:

sudo echo "127.0.0.1 local.casebender.com" >> /etc/hosts

Para Windows:

Adicione a seguinte linha ao arquivo C:\Windows\System32\drivers\etc\hosts:

127.0.0.1 local.casebender.com

Passo 7: Iniciar a Aplicação

  1. Baixe as imagens necessárias:
docker-compose pull
  1. Inicie todos os serviços:
docker-compose up -d
  1. Monitore os logs:
docker-compose logs -f
  1. Acesse a aplicação em https://local.casebender.com

Credenciais de Login Padrão

Após implantar o CaseBender, você pode fazer login com as seguintes credenciais padrão:

Usuário: admin@casebender.app
Senha: secret1234

Por razões de segurança, recomendamos fortemente que você altere essas credenciais padrão imediatamente após o seu primeiro login.

Solução de Problemas

Problemas Comuns

  1. Avisos de Certificado:

    • O navegador mostrará um aviso de segurança porque estamos usando um certificado autoassinado
    • Clique em “Avançado” e prossiga para o site
    • Para fins de desenvolvimento, isso é esperado e seguro
  2. Conflitos de Porta:

    • Certifique-se de que as portas 80, 443, 3000-3002, 5433, 6379, 9000 e 9090 não estão em uso
    • Se necessário, modifique os mapeamentos de porta no docker-compose.yml
  3. Conexão com o Banco de Dados:

    • Verifique os logs do PostgreSQL: docker-compose logs db
    • Verifique as credenciais do banco de dados no arquivo .env
    • Certifique-se de que o banco de dados está em execução: docker-compose ps db
  4. Dependências de Serviço:

    • Se os serviços falharem ao iniciar, verifique suas dependências:
    docker-compose ps
    docker-compose logs [nome_do_serviço]

Verificando Logs

Visualize logs para serviços específicos:

# Todos os serviços
docker-compose logs

# Serviço específico
docker-compose logs [nome_do_serviço]

# Acompanhar logs
docker-compose logs -f [nome_do_serviço]

Gerenciamento de Serviços

# Reiniciar um serviço específico
docker-compose restart [nome_do_serviço]

# Parar todos os serviços
docker-compose down

# Remover volumes (excluirá todos os dados)
docker-compose down -v

Próximos Passos

Agora que você tem o CaseBender funcionando localmente, você pode querer: