Ce document explique comment configurer l’installation d’une machine de développement du client de l’API WhatsApp Business avec Multiconnect sur Minikube. 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 configurationwhatsapp-config
$VERSION
Pour configurer un cluster Multiconnect à haute disponibilité, suivez les étapes ci-dessous :
Une fois que votre instance est entièrement configurée, vous pouvez choisir de la mettre à jour. Pour désinstaller le client, suivez ces étapes.
Vous aurez besoin des éléments suivants :
minikube
kubectl
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;
Clonez tous les fichiers de configuration situés dans le répertoire installation/kubernetes du dépôt GitHub WhatsApp-Business-API-Setup-Scripts GitHub dans le répertoire ~/biz
que vous avez créé à l’étape 1.
Utilisez la commande suivante pour créer une base de données MySQL avec un volume persistant :
kubectl apply -f mysql.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
persistentvolume/mysql-volume created persistentvolumeclaim/mysql-volume-claim created service/mysql-service created deployment.extensions/mysql-deployment created
Utilisez la commande suivante pour vérifier que MySQL fonctionne :
kubectl get pods
Le résultat obtenu doit ressembler à l’exemple suivant :
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 53m
whatsapp-config
Créez une clé secrète whatsapp-config
à partir du fichier db.env
en exécutant la commande suivante :
kubectl create secret generic whatsapp-config --from-env-file=db.env
Le résultat obtenu doit ressembler à l’exemple suivant :
secret/whatsapp-config created
Utilisez la commande suivante pour vérifier que la clé a été créée :
kubectl get secrets
Le résultat obtenu doit ressembler à l’exemple suivant :
NAME TYPE DATA AGE whatsapp-config Opaque 5 52s
Utilisez la commande suivante pour vérifier les informations sur la clé secrète :
kubectl describe secrets/whatsapp-config
Le résultat obtenu doit ressembler à l’exemple suivant :
Name: whatsapp-config Namespace: default Labels: <none> Annotations: <none> Type: Opaque Data ==== wa-db-password: 8 bytes wa-db-port: 4 bytes wa-db-username: 4 bytes wa-db-engine: 5 bytes wa-db-hostname: 13 bytes
Pour envoyer ou recevoir des messages au contenu multimédia, le client de l’API WhatsApp Business a besoin d’un volume persistant partagé entre les déploiements Webapp, Maître et Coreapp. Créez un PersistentVolume
et une PersistentVolumeClaim
pour les messages multimédias à l’aide de la commande suivante :
kubectl apply -f volume.yaml
Cette commande configurera un volume de contenu multimédia local d’une taille de 1 Go monté sur /usr/local/wamedia
dans le cluster Kubernetes et lui demandera une taille physique de 1 Go via une PersistentVolumeClaim
à des fins de développement et de test.
Utilisez la commande suivante pour vérifier l’état du volume de contenu multimédia et la réclamation associée :
kubectl get pv media-volume kubectl get pvc media-volume-claim
$VERSION
Remplacez la variable d’environnement $VERSION
par la dernière version du client de l’API WhatsApp Business (par exemple la version 2.23.4
) dans la section containers
des fichiers webapp.yaml
, master.yaml
et coreapp.yaml
.
webapp.yaml
containers: - name: whatsapp-web image: docker.whatsapp.biz/web:v2.23.4
master.yaml
containers: - name: whatsapp-master image: docker.whatsapp.biz/coreapp:v2.23.4
coreapp.yaml
containers: - name: whatsapp-coreapp image: docker.whatsapp.biz/coreapp:v2.23.4
Déployer les conteneurs Webapp, Maître et Coreapp en exécutant les commandes suivantes :
Webapp
kubectl apply -f webapp.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
horizontalpodautoscaler.autoscaling/whatsapp-web-autoscaler created service/whatsapp-web-service created deployment.apps/whatsapp-web-deployment created
Maître
kubectl apply -f master.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
horizontalpodautoscaler.autoscaling/whatsapp-master-autoscaler created service/whatsapp-master-service created deployment.apps/whatsapp-master-deployment created
Coreapp
kubectl apply -f coreapp.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler created service/whatsapp-coreapp-service created deployment.apps/whatsapp-coreapp-deployment created
Utilisez la commande suivante pour vérifier si le pod Maître/Coreapp/Webapp fonctionne :
kubectl get pods
Le résultat obtenu doit ressembler à l’exemple suivant :
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 53m whatsapp-coreapp-deployment-78c4d987b8-4cpz4 1/1 Running 0 2s whatsapp-coreapp-deployment-78c4d987b8-l5qjj 1/1 Running 0 2s whatsapp-master-deployment-8598d7bf6b-56fvn 1/1 Running 7 15m whatsapp-master-deployment-8598d7bf6b-9r6lc 1/1 Running 7 16m whatsapp-web-deployment-cd4c5785c-9vn6l 1/1 Running 0 16m whatsapp-web-deployment-cd4c5785c-mn7kf 1/1 Running 0 16m
Les configurations par défaut créeront deux pods Maître, deux pods Coreapp et deux pods Webapp. 128 Mo de mémoire et 0,15 UC sont nécessaires pour chaque pod. Modifiez spec.template.spec.containers.resources
dans les fichiers YAML respectifs si vous souhaitez utiliser d’autres paramètres de ressources.
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.
Lorsque vous exécutez un cluster Kubernetes avec Minikube, vous devez vérifier l’adresse IP du cluster Kubernetes à l’aide de la commande suivante :
minikube ip
Utilisez la commande suivante pour trouver le port sur lequel le conteneur Webapp s’exécute :
kubectl get services/whatsapp-web-service
Le résultat obtenu doit ressembler à l’exemple suivant :
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE whatsapp-web-service NodePort 10.101.114.46 <none> 443:32477/TCP 25m
Dans cet exemple, le port 443
inclus dans le conteneur Webapp est mappé au port 32477
du cluster Kubernetes.
Vous devez utiliser https://your-minikube-cluster-ip:your-webapp-service-targetport
(par exemple https://10.101.114.46:32477) comme URL racine de l’API lorsque vous utilisez la collection Postman.
Connectez-vous au client de l’API WhatsApp Business pour obtenir un token d’authentification Bearer afin d’effectuer des appels d’API.
Vous pouvez contrôler l’état du client de l’API WhatsApp Business en envoyant un appel d’API au nœud health
afin de vérifier que tous les pods s’exécutent correctement.
Le résultat obtenu doit ressembler à l’exemple suivant :
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'errors': [ { 'code': 1011, 'title': 'Service not ready', 'details': 'Wacore is not instantiated. Please check wacore log for details.' } ] }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'unregistered', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
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 obtenu doit ressembler à l’exemple suivant :
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'disconnected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'disconnected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
Remarque : en mode haute disponibilité, un seul Coreapp (whatsapp-coreapp-deployment-78c4d987b8-4cpz4
dans cet exemple) sera connecté au serveur WhatsApp. Tous les autres pods, y compris le Maître principal, auront un gateway_status
disconnected
. Si whatsapp-coreapp-deployment-78c4d987b8-4cpz4
tombe en panne, whatsapp-coreapp-deployment-78c4d987b8-l5qjj
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 à haute disponibilité 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
afin de vérifier que tous les pods s’exécutent correctement.
Le résultat obtenu doit ressembler à l’exemple suivant :
'health': { '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'connected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
Remarque : en mode MultiConnect avec deux répartitions, deux Coreapp (whatsapp-coreapp-deployment-78c4d987b8-l5qjj
et whatsapp-coreapp-deployment-78c4d987b8-4cpz4
dans cet exemple) seront connectés au serveur WhatsApp, et le Maître principal (whatsapp-master-deployment-8598d7bf6b-9r6lc
dans cet exemple) se connectera au serveur WhatsApp.
Dans cet exemple, nous avons pour l’instant deux conteneurs Coreapp et la charge des messages est répartie 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 semblable au diagramme figurant dans l’introduction à Multiconnect.
Pour démarrer le troisième conteneur Coreapp, remplacez le nombre de replicas
par 3
dans le fichier coreapp.yaml
:
spec: replicas: 3
Ensuite, redéployez le Coreapp en exécutant la commande suivante :
kubectl apply -f coreapp.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler unchanged service/whatsapp-coreapp-service unchanged deployment.apps/whatsapp-coreapp-deployment configured
Effectuez un autre contrôle de l’état pour vérifier que tous les nœuds fonctionnent correctement en envoyant un appel d’API au nœud health
.
Le résultat obtenu doit ressembler à l’exemple suivant :
'health': { '172.17.0.10:whatsapp-coreapp-deployment-78c4d987b8-hwqp6': { 'gateway_status': 'disconnected', 'role': 'coreapp' }, '172.17.0.11:whatsapp-coreapp-deployment-78c4d987b8-l5qjj': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.6:whatsapp-master-deployment-8598d7bf6b-56fvn': { 'gateway_status': 'disconnected', 'role': 'secondary_master' }, '172.17.0.7:whatsapp-coreapp-deployment-78c4d987b8-4cpz4': { 'gateway_status': 'connected', 'role': 'coreapp' }, '172.17.0.8:whatsapp-master-deployment-8598d7bf6b-9r6lc': { 'gateway_status': 'connected', 'role': 'primary_master' } }, 'meta': { 'version': 'v2.23.4', 'api_status': 'stable' }
Le nouveau conteneur whatsapp-coreapp-deployment-78c4d987b8-hwqp6
agit maintenant comme conteneur de secours, mais il n’est actuellement pas connecté au serveur WhatsApp. Si whatsapp-coreapp-deployment-78c4d987b8-l5qjj
ou whatsapp-coreapp-deployment-78c4d987b8-4cpz4stops working,
cesse de fonctionner, whatsapp-coreapp-deployment-78c4d987b8-hwqp6` se connectera au serveur WhatsApp pour maintenir un nombre total de deux ré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.
$VERSION
sur la nouvelle versionMettez à jour la variable d’environnement $VERSION
en indiquant la version que vous souhaitez utiliser (par exemple la version 2.23.5
) dans la section containers
des fichiers webapp.yaml
, master.yaml
et coreapp.yaml
.
webapp.yaml
containers: - name: whatsapp-web image: docker.whatsapp.biz/web:v2.23.5
master.yaml
containers: - name: whatsapp-master image: docker.whatsapp.biz/coreapp:v2.23.5
coreapp.yaml
containers: - name: whatsapp-coreapp image: docker.whatsapp.biz/coreapp:v2.23.5
Mettez à niveau les conteneurs Webapp, Maître et Coreapp, et surveillez l’état du déploiement.
Webapp
kubectl apply -f webapp.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
kubectl rollout status deployments/whatsapp-web-deployment
Maître
kubectl apply -f master.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
kubectl rollout status deployments/whatsapp-master-deployment
Coreapp
kubectl apply -f coreapp.yaml
Le résultat obtenu doit ressembler à l’exemple suivant :
kubectl rollout status deployments/whatsapp-coreapp-deployment
Utilisez la commande suivante pour supprimer les déploiements :
kubectl delete -f webapp.yaml kubectl delete -f master.yaml kubectl delete -f coreapp.yaml kubectl delete -f mysql.yaml
Utilisez la commande suivante pour supprimer le volume :
kubectl delete -f volume.yaml
Utilisez la commande suivante pour supprimer la clé secrète :
kubectl delete secrets/whatsapp-config
Utilisez la commande suivante pour vérifier si tous les pods fonctionnent :
kubectl get pods
Le résultat obtenu doit ressembler à l’exemple suivant :
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 1h whatsapp-coreapp-deployment-78c4d987b8-4cpz4 1/1 Running 2 1h whatsapp-coreapp-deployment-78c4d987b8-hwqp6 1/1 Running 0 24m whatsapp-coreapp-deployment-78c4d987b8-l5qjj 1/1 Running 2 1h whatsapp-master-deployment-8598d7bf6b-56fvn 1/1 Running 9 1h whatsapp-master-deployment-8598d7bf6b-9r6lc 1/1 Running 8 1h whatsapp-web-deployment-cd4c5785c-f99n4 1/1 Running 0 50m whatsapp-web-deployment-cd4c5785c-s5phx 1/1 Running 0 50m
Si un pod n’est pas prêt (c’est-à-dire si 0/1
s’affiche dans la colonne READY
), vous pouvez obtenir les journaux le concernant en exécutant la commande kubectl logs
suivie du nom du pod.
Exemple :
kubectl logs whatsapp-coreapp-deployment-78c4d987b8-4cpz4 > whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
Vous trouverez alors les journaux dans le fichier whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
enregistré dans le répertoire actuel.
Pour collecter des journaux d’un service déployé spécifique, comme la Webapp, exécutez la commande kubectl logs
suivie du nom du service.
Exemple :
kubectl logs deployments/whatsapp-web-deployment > whatsapp-web-deployment.txt
Vous trouverez les journaux dans le fichier whatsapp-web-deployment.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.