Gestione dei dati

Questo documento spiega come gestire i diversi tipi di dati e database associati al client dell'API di WhatsApp Business.

Volumi

I volumi sono il meccanismo preferito per la persistenza dei dati generati e utilizzati dai contenitori Docker. Il client dell'API di WhatsApp Business richiede il volume di un Docker per contenuto multimediale. Questo volume sarà creato automaticamente all'esecuzione dei comandi docker-compose durante l'installazione.

I volumi dei Docker supportano la memorizzazione su host remoti o provider in cloud. Puoi configurare il volume del contenuto multimediale su qualsiasi soluzione di condivisione di file del data center esistente. Assicurati che tutti i contenitori Webapp e Coreapp possano accedervi in lettura/scrittura. Per visualizzare o modificare il percorso del volume, modifica il file docker-compose.yml.

NomeDescrizione

Volume del contenuto multimediale

  • Memorizza i file multimediali in entrata e in uscita
  • Il mounting viene eseguito all'interno dei contenitori per impostazione predefinita, su /usr/local/wamedia/

Variabili ambientali

Il client dell'API di WhatsApp Business può usare MySQL o PostgreSQL per memorizzare i dati.

Puoi configurare le impostazioni del database impostando le seguenti variabili ambientali nel file db.env durante l'installazione del client dell'API di WhatsApp Business. Queste variabili ambientali saranno usate da Coreapp e Webapp in fase di connessione al database.

Impostazione del database Variabile ambientale

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: può essere usata come prefisso per tutti i database creati con l'installazione del client dell'API di WhatsApp Business. Può essere usata per eseguire più gruppi di database dell'API di WhatsApp Business sullo stesso host.
  • WA_DB_CONNECTION_IDLE_TIMEOUT (supportata solo da MySQL): impostando questa variabile ambientale (in millisecondi) durante l'avvio di Coreapp, puoi impostare il timeout di inattività per il database MySQL. Il server MySQL chiuderà quindi tutte le connessioni al database inattive per il tempo impostato.

Gestione dei database

Di seguito sono riportati consigli per la gestione del database associato al tuo client dell'API di WhatsApp Business.

ProblemaConsigli

Aggiornamento con un database di grandi dimensioni

I database di grandi dimensioni sono quelli con oltre 2 milioni di righe nella tabella messages.
Metti in pratica i consigli seguenti per l'utilizzo dell'endpoint /services/message/gc durante un aggiornamento per mantenere la stabilità del database.

A partire dalla v2.29.1, il parametro pass_through è impostato su false per impostazione predefinita e ciò può determinare un aumento della memoria del database per la tabella messages.

Usa il parametro di garbage collection automatica per assicurarti che il database funzioni in modo stabile eseguendo periodicamente la pulizia. Consulta la documentazione sulle impostazioni dell'app per ulteriori informazioni sui parametri pass_through e db_garbagecollector_enable.

Configurazione automatica garbage collection

  • Abilitata per le aziende che eseguono l'aggiornamento con il parametro pass_through abilitato.
  • Disabilitata per le aziende che eseguono l'aggiornamento con il parametro pass_through disabilitato.
    • Se pass_through è stato disabilitato prima dell'aggiornamento, è consigliabile abilitare la modalità garbage collection automatica dopo l'aggiornamento usando il parametro db_garbagecollector_enable nelle Impostazioni dell'app
  • Per le aziende con traffico >120 qps, si consiglia la garbage collection basata sulle chiamate API con l'endpoint /services/message/gc.

Garbage collection basata su chiamate API

  • Rende la pulizia del database dipendente dall'integrazione e, idealmente, è da evitare per la maggior parte delle aziende.
  • Si consiglia alle aziende che utilizzano l'API di WhatsApp Business di eseguire la garbage collection del database:
    • di contrassegnare i messaggi in arrivo come letti prima di effettuare la richiesta API per abilitare la pulizia aggressiva;
    • di utilizzare l'endpoint `/services/message/gc una volta ogni 24 ore durante un periodo di inattività (ovvero, volume di messaggi in uscita basso);
    • per una tabella messages con oltre 10 milioni di righe, potrebbe essere necessario eseguire più volte la richiesta API per assicurarsi che le notifiche di callback vengano restituite senza errori.

Consulta la documentazione sui servizi per maggiori informazioni.

Rotazione del registro

Uno script di rotazione del registro è contenuto nei contenitori Coreapp e Webapp.

Webapp

Lo script di rotazione del registro nel contenitore Webapp:

  • utilizza l'utility logrotate;
  • mantiene gli ultimi 30 file dei registri web, degli accessi e degli errori;
  • ruota solo se la dimensione è maggiore di 20 MB;
  • comprime i file di registro ruotati;
  • archivia vecchi file di registro in /var/log/whatsapp/archive.

Coreapp

Lo script di rotazione del registro nel contenitore Coreapp:

  • utilizza uno script interno;
  • mantiene gli ultimi 30 file;
  • ruota automaticamente se la dimensione è maggiore di 15 MB;
  • comprime i file di registro ruotati;
  • archivia vecchi file di registro in /var/log/whatsapp/archive.

In Coreapp, un nuovo file di registro viene creato solo quando la dimensione supera i 15 MB per file di registro. I vecchi file di registro non vengono rimossi automaticamente.

Raccomandazione sugli script di pulizia

Ti consigliamo di eseguire periodicamente (ad esempio, quotidianamente) lo script di pulizia di seguito per eseguire la rotazione del registro su tutti i contenitori Webapp, Coreapp e Master (nel caso di una configurazione Multiconnect). È meglio configurare un cronjob sull'host in modo che venga eseguito su tutti i contenitori dell'API di WhatsApp Business in esecuzione e durante gli orari non di punta. Invocare periodicamente lo script di pulizia manterrà sotto controllo lo spazio su disco utilizzato dai file di registro.

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