Gerenciamento de dados

Este documento explica como gerenciar os diversos tipos de dados e bancos de dados relacionados ao cliente da WhatsApp Business API.

Volumes

Os volumes são o mecanismo preferencial para persistir dados gerados e usados pelos contêineres do Docker. O cliente da WhatsApp Business API necessita de um volume do Docker por mídia. Esse volume será criado automaticamente durante a execução dos comandos docker-compose na instalação.

Os volumes do Docker podem ser armazenados em hosts remotos ou em provedores na nuvem. É possível configurar o volume de mídia em qualquer solução para compartilhamento de arquivos de data center. Verifique se os contêineres do Webapp e do Coreapp têm acesso de leitura/gravação. Para visualizar ou editar o caminho do volume, edite o arquivo docker-compose.yml.

NomeDescrição

Volume de mídia

  • Armazena os arquivos de mídia de entrada e de saída.
  • É configurado por padrão nos contêineres em /usr/local/wamedia/.

Variáveis de ambiente

O cliente da WhatsApp Business API pode usar o MySQL ou o PostgreSQL para armazenar dados.

Você pode definir as configurações do banco de dados usando as variáveis de ambiente a seguir no arquivo db.env ao instalar o cliente da WhatsApp Business API. Essas variáveis de ambiente serão usadas pelo Coreapp e o Webapp ao se conectarem ao banco de dados.

Configuração de banco de dados Variável de ambiente

database_engine

WA_DB_ENGINE

hostname

WA_DB_HOSTNAME

port

WA_DB_PORT

username

WA_DB_USERNAME

password

WA_DB_PASSWORD

database_name_prefix

WA_DB_NAME_PREFIX

connection_idle_timeout

WA_DB_CONNECTION_IDLE_TIMEOUT

  • WA_DB_NAME_PREFIX — pode ser usado para prefixar todos os bancos de dados criados quando o cliente da API do WhatsApp Business é instalado. Essa opção pode ser usada para gerar vários conjuntos de bancos de dados da WhatsApp Business API no mesmo host de banco de dados.
  • WA_DB_CONNECTION_IDLE_TIMEOUT (compatível somente com o MySQL): ao configurar essa variável de ambiente enquanto inicia o Coreapp, você poderá definir o tempo ocioso do seu banco de dados MySQL. O servidor do MySQL encerrará todas as conexões com bancos de dados que ficarem ociosas pelo tempo determinado.

Gerenciamento de banco de dados

Estas são recomendações para gerenciar o banco de dados associado ao seu cliente da WhatsApp Business API.

ProblemaRecomendações

Fazer uma atualização com um grande banco de dados

Um banco de dados é considerado grande quando tem mais de 2 milhões de linhas na tabela messages.
Siga as recomendações abaixo para usar o ponto de extremidade /services/message/gc durante uma atualização para manter a estabilidade do banco de dados.

A partir da v2.29.1, o parâmetro pass_through é definido como false por padrão, o que pode levar a um aumento do armazenamento do banco de dados para a tabela messages.

Use o parâmetro de coleta automática de lixo para garantir que seu banco de dados opere com estabilidade fazendo uma limpeza periodicamente. Consulte a documentação Configurações do aplicativo para obter mais informações sobre os parâmetros pass_through e db_garbagecollector_enable.

Configuração de coleta automática de lixo

  • Ativado para empresas que fazem a atualização com o parâmetro pass_through ativado.
  • Desativado para empresas que fazem a atualização com o parâmetro pass_through desativado.
    • Se o parâmetro pass_through foi desativado antes da atualização, recomenda-se ativar a coleta automática de lixo depois da atualização usando o parâmetro db_garbagecollector_enable nas Configurações do aplicativo
  • Para empresas com tráfego > 120 qps, recomenda-se fazer a coleta de lixo baseada em chamadas à API com o ponto de extremidade /services/message/gc.

Coleta de lixo baseada em chamadas à API

  • Torna a limpeza do banco de dados dependente de integração, e o ideal é que seja evitada para a maioria das empresas.
  • É recomendado que as empresas que usam a WhatsApp Business API façam a coleta de lixo do banco de dados:
    • Marque as mensagens de entrada como lidas antes de fazer a solicitação para a API para permitir uma limpeza agressiva.
    • Recomendamos que o ponto de extremidade /services/message/gc seja usado uma vez a cada 24 horas durante um tempo de inatividade (ou seja, quando há um volume baixo de mensagens de saída).
    • Para uma tabela messages com mais de 10 milhões de linhas, talvez seja necessário executar a solicitação da API várias vezes para garantir que as notificações de retorno de chamada voltem sem erros.

Consulte a documentação Serviços para obter mais informações.

Rotação de registro

Um script de rotação de registro acompanha os contêineres do Coreapp e do Webapp.

Webapp

O script de rotação de registro no contêiner do Webapp:

  • usa o utilitário logrotate;
  • mantém os últimos 30 arquivos de registros da web, de acesso e de erros;
  • roteia somente se o tamanho for superior a 20 MB;
  • comprime arquivos de registro roteados;
  • arquiva itens de registro antigos em /var/log/whatsapp/archive.

Coreapp

O script de rotação de registro no contêiner do Coreapp:

  • usa um script interno;
  • mantém os últimos 30 arquivos;
  • roteia automaticamente se o tamanho for superior a 15 MB;
  • comprime arquivos de registro roteados;
  • arquiva itens de registro antigos em /var/log/whatsapp/archive.

No Coreapp, um novo arquivo de registro só é criado quando o tamanho exceder 15 MB por arquivo de registro. Os arquivos de registro antigos não são removidos automaticamente.

Recomendação de script de limpeza

Recomendamos executar o script de limpeza abaixo de maneira periódica (diariamente, por exemplo) para fazer a rotação de registros em todos os contêineres do Webapp, do Coreapp e do Master (no caso de configuração de multiconexão). É melhor configurar um cronjob no host para que funcione em todos os contêineres em execução da WhatsApp Business API e seja executado durante as horas de menor movimento. Invocar o script de limpeza periodicamente manterá o espaço de disco consumido por arquivos de registro sob controle.

docker exec your-container-name /opt/whatsapp/bin/cleanup.sh