Ce document explique comment configurer un cluster à haute disponibilité sur une machine de développeur·se. Il vous aidera également à activer Multiconnect et indiquera les modifications requises pour un cluster Multiconnect hautement disponible. Pour une configuration en production, suivez les instructions correspondantes de la section Configurations en production.
Avant de commencer ces configurations, vérifiez notre liste de conditions requises.
Pour configurer un cluster à haute disponibilité, suivez les étapes ci-dessous :
biz
pour les scripts de configurationWA_API_VERSION
Pour configurer un cluster Multiconnect, suivez les étapes ci-dessous :
Une fois que votre instance est entièrement configurée, vous pouvez choisir de mettre à jour le client. Pour désinstaller le client, suivez ces étapes.
Si vous avez suivi précédemment les instructions Configuration de développeur : instance unique afin de configurer un client de l’API WhatsApp Business sur une machine de développeur·se, veuillez consulter le guide sur la migration avant de poursuivre ce document.
Le contenu de ce guide est basé sur le principe d’une nouvelle installation.
Avant de commencer, vérifiez que vous possédez les éléments suivants :
To install Docker Desktop on your developer machine:
The remaining steps are based on macOS and should be very similar for Linux or Windows 10.
To install Docker using macOS:
Docker Compose is a plugin that is bundled with Docker Desktop and should have installed automatically. For more information about using or Docker Compose, see Overview of Docker Compose. If for some reason Docker Compose was not installed, you can install it by following the instructions located at Install Docker Compose.
Configurez un compte de test localement dans un environnement de développement. Il assure un développement rapide et permettra de tester les nouvelles versions. Il est également fortement recommandé de lire le guide sur la disponibilité et la mise à l’échelle pour en savoir plus sur la haute disponibilité et Multiconnect.
biz
pour les scripts de configurationExécutez le code suivant à l’emplacement de votre choix pour le client de l’API WhatsApp Business :
mkdir ~/biz; cd ~/biz;
Les fichiers de configuration du client de l’API WhatsApp Business se trouvent dans le dépôt GitHub WhatsApp-Business-API-Setup-Scripts. Vous pouvez configurer votre client d’API WhatsApp Business avec une instance de base de données MySQL ou Postgres.
multiconnect-compose.yml
et db.env
à partir du répertoire Installation dans le répertoire ~/biz
que vous avez créé à l’Étape 1.multiconnect-compose.yml
et db.env
à partir du répertoire Installation Postgres dans le répertoire ~/biz
que vous avez créé à l’Étape 1.WA_API_VERSION
La variable d’environnement WA_API_VERSION
doit être définie sur la version actuelle avec la commande :
export WA_API_VERSION=current-whatsapp-version
Pour démarrer un cluster à haute disponibilité avec un conteneur de base de données, un conteneur Webapp, deux conteneurs Maître et deux conteneurs Coreapp en arrière-plan similaires au diagramme illustré dans l’introduction à la haute disponibilité, exécutez la commande suivante :
docker-compose -f multiconnect-compose.yml up -d db waweb master1 master2 wacore1 wacore2
Le résultat de cette commande doit se présenter comme suit :
Creating network "biz_default" with the default driver Creating volume "biz_mysqlData" with local driver Creating volume "biz_whatsappMedia" with local driver Creating biz_db_1 ... done Creating biz_waweb_1 ... done Creating biz_master1_1 ... done Creating biz_master2_1 ... done Creating biz_wacore2_1 ... done Creating biz_wacore1_1 ... done
Pour vérifier que l’état de tous les conteneurs est UP, exécutez :
docker-compose -f multiconnect-compose.yml ps
Le résultat de cette commande doit se présenter comme suit :
Name Command State Ports -------------------------------------------------------------------------------------------------------------------------------------------------------------- biz_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:33060->3306/tcp, 33060/tcp biz_master1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32931->6250/tcp, 0.0.0.0:32930->6251/tcp, 0.0.0.0:32928->6252/tcp, 0.0.0.0:32926->6253/tcp biz_master2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32929->6250/tcp, 0.0.0.0:32927->6251/tcp, 0.0.0.0:32925->6252/tcp, 0.0.0.0:32924->6253/tcp biz_wacore1_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32937->6250/tcp, 0.0.0.0:32935->6251/tcp, 0.0.0.0:32933->6252/tcp, 0.0.0.0:32932->6253/tcp biz_wacore2_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:32939->6250/tcp, 0.0.0.0:32938->6251/tcp, 0.0.0.0:32936->6252/tcp, 0.0.0.0:32934->6253/tcp biz_waweb_1 /opt/whatsapp/bin/wait_on_ ... Up 0.0.0.0:9090->443/tcp
Par défaut, le conteneur Webapp fonctionnera sur le port 9090
et le conteneur de base de données sur le port 33060
.
Vous pouvez télécharger et configurer notre collection Postman pour interagir avec l’API WhatsApp Business si vous ne souhaitez pas utiliser la ligne de commande.
Vous pouvez contrôler l’état du client de l’API WhatsApp Business en envoyant un appel d’API au nœud health
.
Le résultat de cette commande doit se présenter comme suit :
{ "health": { "master1:b28d835cd579": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "master2:7fe542d305b4": { "gateway_status": "unregistered", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "wacore2:05e1a6d70665": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] } } }
La réponse affiche un gateway_status
unregistered
comme gateway_status
pour le conteneur Maître principal, car le client de l’API WhatsApp Business n’est pas encore inscrit.
Vous pouvez inscrire votre client de l’API WhatsApp Business en envoyant un appel d’API au nœud account
.
Effectuez un autre contrôle de l’état du client de l’API WhatsApp Business en utilisant un appel d’API sur le nœud health
après avoir finalisé l’inscription et assurez-vous que l’un des conteneurs Coreapp a un gateway_status
connected
.
Le résultat de cette commande doit se présenter comme suit :
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "disconnected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "disconnected", "role": "coreapp" } } }
Remarque : en mode haute disponibilité, un seul Coreapp (wacore1
dans cet exemple) sera connecté au serveur Whatsapp, tous les autres nœuds, y compris le Maître principal, auront un gateway_status
disconnected
. Si wacore1
tombe en panne, wacore2
le remplacera et se connectera au serveur WhatsApp pour maintenir la haute disponibilité.
Vous avez désormais configuré le client de l’API WhatsApp Business en mode haute disponibilité. Dans ce mode, seul un Coreapp peut se connecter au serveur WhatsApp pour envoyer des messages à tout moment. Si vous souhaitez que plusieurs Coreapp envoient des messages simultanément pour augmenter le débit des messages, suivez les étapes de la section Configurer un cluster Multiconnect hautement disponible ci-dessous.
Utilisez le point de terminaison « shards » pour configurer deux partitions. La réponse HTTP devrait renvoyer l’état 201 Created
.
Vous pouvez contrôler l’état du client de l’API WhatsApp Business en envoyant un appel d’API au nœud health
.
Le résultat de cette commande doit se présenter comme suit :
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" } } }
Remarque : en mode Multiconnect avec deux partitions, deux Coreapp (wacore1
et wacore2
dans cet exemple) seront connectés au serveur WhatsApp, et le Maître principal (master2
dans cet exemple) se connectera également au serveur WhatsApp.
Dans cet exemple, nous avons pour l’instant deux conteneurs Coreapp et les charges des messages sont réparties entre eux. Cependant, si l’un des conteneurs Coreapp tombe en panne, la moitié des messages ne sera pas envoyée. Afin de maintenir la haute disponibilité dans cette nouvelle configuration Multiconnect, vous pouvez démarrer un troisième Coreapp pour tolérer l’échec d’un Coreapp, comme illustré dans le diagramme dans l’introduction à Multiconnect.
Pour démarrer le troisième conteneur Coreapp, exécutez la commande suivante :
docker-compose -f multiconnect-compose.yml up -d wacore3
Le résultat de cette commande doit se présenter comme suit :
biz_db_1 is up-to-date biz_waweb_1 is up-to-date biz_master1_1 is up-to-date Creating biz_wacore3_1 ... done
Effectuez un autre contrôle de l’état pour vérifier que tous les nœuds fonctionnent correctement en utilisant un appel d’API sur le nœud health
.
Le résultat de cette commande doit se présenter comme suit :
{ "health": { "master1:b28d835cd579": { "gateway_status": "disconnected", "role": "secondary_master" }, "master2:7fe542d305b4": { "gateway_status": "connected", "role": "primary_master" }, "wacore1:35a5fabfc79d": { "gateway_status": "connected", "role": "coreapp" }, "wacore2:05e1a6d70665": { "gateway_status": "connected", "role": "coreapp" }, "wacore3:23b50199bec2": { "gateway_status": "disconnected", "role": "coreapp" } } }
Le nouveau conteneur Coreapp (wacore3
dans cet exemple) agit maintenant comme conteneur de secours, mais il n’est actuellement pas connecté au serveur WhatsApp. Si wacore1
ou wacore2
cesse de fonctionner, wacore3
se connectera au serveur WhatsApp pour maintenir un nombre total de deux partitions.
Il y aura un temps d’arrêt pendant la mise à jour.
Il est fortement recommandé de sauvegarder vos paramètres d’application avant de lancer une mise à jour afin de vous assurer de pouvoir reprendre votre activité rapidement. Veuillez consulter la documentation sur la sauvegarde et la restauration.
Il est toujours recommandé d’effectuer les mises à jour pendant les heures creuses.
WA_API_VERSION
sur la nouvelle versionLa variable d’environnement WA_API_VERSION
doit toujours être mise à jour de manière à indiquer le numéro de la nouvelle version avec la commande :
export WA_API_VERSION=new-whatsapp-version
Redémarrez les conteneurs Docker en exécutant :
docker-compose -f multiconnect-compose.yml up -d
v2.23.x
ou une version ultérieureVous pouvez maintenant utiliser un service de mise à jour qui vous permettra de mettre à jour votre base de données pendant l’exécution de votre application, pour éviter les temps d’arrêt.
Le fichier dbupgrade-compose.yml contient des champs indiquant la version du conteneur.
Exemple :
services: dbupgrade: image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}
Pour mettre à jour une installation, démarrez le conteneur dbupgrade-service avec la variable d’environnement WA_API_VERSION
définie sur la dernière version :
WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
Remarque : si vous utilisez une orchestration qui redémarre le conteneur à la sortie indépendamment du code de sortie, démarrez le service avec la variable d’environnement EXIT_ON_SUCCESS
définie sur FALSE
pour éviter de quitter le conteneur lorsque le code de sortie est 0
.
Si la mise à jour de la base de données est réussie, le code de sortie du conteneur sera 0
. Vous pouvez utiliser la commande Docker suivante pour suivre l’état :
docker wait your-database-upgrade-container-name
Le code de sortie du conteneur dbupgrade-service sera alors indiqué dans la sortie.
Redémarrez les conteneurs Docker Coreapp et Webapp avec la variable d’environnement WA_API_VERSION
définie sur la dernière version :
WA_API_VERSION=new-whatsapp-version docker-compose -f multiconnect-compose.yml up -d
Il est fortement recommandé de sauvegarder vos paramètres d’application avant de lancer une procédure de désinstallation. Veuillez consulter la documentation sur la sauvegarde et la restauration.
Pour réinitialiser votre environnement de développement en supprimant tous les conteneurs, exécutez la commande suivante depuis le répertoire contenant le fichier multiconnect-compose.yml
:
docker-compose -f multiconnect-compose.yml down
Afin de supprimer également tous les volumes définis dans le fichier multiconnect-compose.yml
, exécutez down
avec le paramètre -v
:
docker-compose -f multiconnect-compose.yml down -v
Pour recueillir les journaux de tous les conteneurs, exécutez la commande suivante :
docker-compose -f multiconnect-compose.yml logs > debug_output.txt
Pour recueillir les journaux d’un service spécifique, ajoutez le nom du service (p. ex. waweb
, master1
, wacore1
) à la commande docker-compose logs
:
docker-compose -f multiconnect-compose.yml logs waweb > debug_output.txt
Vous trouverez les journaux dans le fichier debug_output.txt
enregistré dans le répertoire actuel.
Ce logiciel utilise le code de FFmpeg sous licence du LGPLv2.1 et sa source peut être téléchargée ici.