Como rodar múltiplas instâncias da Evolution API num servidor

    A Evolution API suporta múltiplas instâncias por design — cada instância corresponde a um número de WhatsApp diferente. Você não precisa de múltiplos containers: um único servidor da Evolution API gerencia dezenas de instâncias simultâneas. O limite prático é RAM disponível (cada instância usa aproximadamente 80–150 MB em idle) e a estabilidade da conexão WebSocket.

    Como a Evolution API gerencia instâncias

    Cada instância é uma sessão WhatsApp independente. A Evolution API mantém a sessão em memória enquanto o container está rodando e, com PostgreSQL habilitado, persiste em banco para sobreviver a restarts. Instâncias são criadas, conectadas e desconectadas via API REST — sem reiniciar o container.

    Criar e conectar múltiplas instâncias via API

    O fluxo para cada número: criar a instância, gerar o QR code e escanear com o WhatsApp do número correspondente:

    bash
    # Criar a instância (repita para cada número)
    curl -X POST "https://seu-servidor/instance/create" \
      -H "apikey: sua-chave-api" \
      -H "Content-Type: application/json" \
      -d '{"instanceName": "numero-cliente-01", "qrcode": true}'
    
    # Gerar o QR code para conexão
    curl -X GET "https://seu-servidor/instance/connect/numero-cliente-01" \
      -H "apikey: sua-chave-api"
    # O QR code vem em base64 — renderize-o ou use o Evolution Manager
    
    # Listar todas as instâncias e seus estados
    curl -X GET "https://seu-servidor/instance/fetchInstances" \
      -H "apikey: sua-chave-api"

    Recursos necessários por instância

    O consumo de recursos varia conforme o volume de mensagens e número de grupos. Estimativas práticas:

    Dica
    Instância em idle (poucas mensagens): ~80–120 MB RAM. Instância em uso moderado (100–500 msgs/dia): ~120–200 MB RAM. Instância em uso intenso (grupos grandes, mídia): 200–400 MB RAM. Para 5 instâncias: Runstack Pro (4 GB RAM, R$ 144/mês) é suficiente. Para 10–20 instâncias: Runstack Business (8 GB RAM, R$ 215/mês) com PostgreSQL dedicado.

    PostgreSQL obrigatório para múltiplas instâncias em produção

    Com múltiplas instâncias, o banco de dados é crítico para persistir todas as sessões. Sem PostgreSQL, um restart do container desconecta todas as instâncias simultaneamente — cada número precisaria escanear o QR code novamente.

    yaml
    # Configuração de banco no docker-compose.yml (com múltiplas instâncias)
    services:
      evolution:
        image: atendai/evolution-api:latest
        restart: always
        environment:
          - DATABASE_ENABLED=true
          - DATABASE_CONNECTION_URI=postgresql://evolution:senha@postgres:5432/evolution
          - REDIS_ENABLED=true
          - REDIS_URI=redis://redis:6379
          # Autenticação global da API
          - AUTHENTICATION_TYPE=apikey
          - AUTHENTICATION_API_KEY=sua-chave-global
          # Permite que cada instância tenha seu próprio token
          - AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true
    Dica
    Com AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true, o endpoint fetchInstances retorna o token de cada instância — útil para sistemas multi-tenant onde cada cliente tem sua própria chave.

    Monitorar o estado de todas as instâncias

    Para checar quais instâncias estão conectadas e quais caíram:

    bash
    # Listar instâncias com estado de conexão
    curl -X GET "https://seu-servidor/instance/fetchInstances" \
      -H "apikey: sua-chave-api" | \
      python3 -c "
    import sys, json
    data = json.load(sys.stdin)
    for inst in data:
        name = inst.get('instance', {}).get('instanceName', '?')
        state = inst.get('instance', {}).get('connectionStatus', '?')
        print(f'{name}: {state}')
    "

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o Evolution API em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes

    Conteúdos relacionados

    [VERIFICAR antes de publicar]

    • 1. Confirme o endpoint DELETE /instance/delete/{instanceName} na versão instalada — pode ser /instance/logout em algumas versões.
    • 2. Confirme o consumo real de RAM por instância na versão atual — pode variar com atualizações da biblioteca Baileys.