Tài liệu này hướng dẫn bạn cách thiết lập bản cài đặt của ứng dụng API WhatsApp Business có chế độ Đa kết nối trên Minikube trên máy của nhà phát triển. Trước khi bạn bắt đầu bất kỳ cách thiết lập nào nêu trên, hãy xem danh sách yêu cầu của chúng tôi.
Để thiết lập cụm có Độ sẵn sàng cao, hãy làm theo các bước sau:
biz
cho các tập lệnh thiết lậpwhatsapp-config
$VERSION
Để thiết lập cụm Đa kết nối có độ sẵn sàng cao, hãy làm theo các bước sau:
Sau khi thiết lập hoàn chỉnh phiên bản, bạn có thể chọn nâng cấp phiên bản đó. Để gỡ cài đặt ứng dụng, hãy làm theo các bước sau.
Bạn sẽ cần:
minikube
kubectl
Để tìm hiểu thêm về Độ sẵn sàng cao và Đa kết nối, bạn nên đọc qua Hướng dẫn về Độ sẵn sàng và khả năng mở rộng.
biz
cho các tập lệnh thiết lậpChạy mã sau ở vị trí bạn muốn cho ứng dụng API WhatsApp Business:
mkdir ~/biz; cd ~/biz;
Sao chép tất cả file cấu hình từ thư mục cài đặt/kubernetes của kho lưu trữ GitHub WhatsApp-Business-API-Setup-Scripts vào thư mục ~/biz
mà bạn đã tạo ở Bước 1.
Tạo cơ sở dữ liệu MySQL có ổ đĩa cố định bằng:
kubectl apply -f mysql.yaml
Phản hồi sẽ có dạng như sau:
persistentvolume/mysql-volume created persistentvolumeclaim/mysql-volume-claim created service/mysql-service created deployment.extensions/mysql-deployment created
Bạn có thể xác minh rằng MySQL đang chạy thông qua:
kubectl get pods
Phản hồi sẽ có dạng như sau:
NAME READY STATUS RESTARTS AGE mysql-deployment-5d4f898-xtkpj 1/1 Running 0 53m
whatsapp-config
Tạo một khóa bí mật whatsapp-config
từ file db.env
bằng lệnh sau:
kubectl create secret generic whatsapp-config --from-env-file=db.env
Phản hồi sẽ có dạng như sau:
secret/whatsapp-config created
Bạn có thể kiểm tra để đảm bảo khóa bí mật đã được tạo bằng:
kubectl get secrets
Phản hồi sẽ có dạng như sau:
NAME TYPE DATA AGE whatsapp-config Opaque 5 52s
Bạn có thể kiểm tra chi tiết khóa bí mật bằng:
kubectl describe secrets/whatsapp-config
Phản hồi sẽ có dạng như sau:
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
Để gửi hoặc nhận tin nhắn có chứa file phương tiện, ứng dụng API WhatsApp Business cần có một ổ đĩa cố định dùng chung cho các bản triển khai Webapp, Master và Coreap. Tạo PersistentVolume
và PersistentVolumeClaim
cho tin nhắn có chứa file phương tiện bằng cách chạy:
kubectl apply -f volume.yaml
Lệnh này sẽ thiết lập ổ đĩa file phương tiện cục bộ tại /usr/local/wamedia
bên trong cụm Kubernetes có kích thước 1GB và yêu cầu kích thước thực 1GB từ ổ đĩa đó thông qua PersistentVolumeClaim
cho mục đích phát triển và thử nghiệm.
Bạn có thể kiểm tra trạng thái ổ đĩa file phương tiện và xác nhận ổ đĩa file phương tiện bằng:
kubectl get pv media-volume kubectl get pvc media-volume-claim
$VERSION
Thay thế biến môi trường $VERSION
bằng phiên bản ứng dụng API WhatsApp Business mới nhất (ví dụ: 2.23.4
) trong phần containers
của các file webapp.yaml
, master.yaml
và 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
Triển khai vùng chứa Webapp, Master và Coreapp bằng cách chạy các lệnh sau:
Webapp
kubectl apply -f webapp.yaml
Phản hồi sẽ có dạng như sau:
horizontalpodautoscaler.autoscaling/whatsapp-web-autoscaler created service/whatsapp-web-service created deployment.apps/whatsapp-web-deployment created
Master
kubectl apply -f master.yaml
Phản hồi sẽ có dạng như sau:
horizontalpodautoscaler.autoscaling/whatsapp-master-autoscaler created service/whatsapp-master-service created deployment.apps/whatsapp-master-deployment created
Coreapp
kubectl apply -f coreapp.yaml
Phản hồi sẽ có dạng như sau:
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler created service/whatsapp-coreapp-service created deployment.apps/whatsapp-coreapp-deployment created
Bạn có thể kiểm tra xem pod Master/Coreapp/Webapp có đang chạy hay không bằng:
kubectl get pods
Phản hồi sẽ có dạng như sau:
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
Cấu hình mặc định sẽ tạo 2 pod Master, 2 pod Coreapp và 2 pod Webapp. Mỗi pod yêu cầu 128MB bộ nhớ và 0,15 CPU. Thực hiện thay đổi đối với spec.template.spec.containers.resources
trong file YAML tương ứng nếu bạn muốn sử dụng cài đặt tài nguyên khác.
Bạn có thể tải xuống và đặt cấu hình Bộ sưu tập Postman của chúng tôi để tương tác với API WhatsApp Business nếu không muốn sử dụng dòng lệnh.
Khi chạy cụm Kubernetes bằng Minikube, bạn cần kiểm tra IP cụm Kubernetes bằng cách chạy:
minikube ip
Tìm cổng đang chạy vùng chứa Webapp bằng:
kubectl get services/whatsapp-web-service
Phản hồi sẽ có dạng như sau:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE whatsapp-web-service NodePort 10.101.114.46 <none> 443:32477/TCP 25m
Trong ví dụ này, cổng 443
bên trong vùng chứa Webapp được ánh xạ đến cổng 32477
trên cụm Kubernetes.
Bạn cần sử dụng https://your-minikube-cluster-ip:your-webapp-service-targetport
(ví dụ: https://10.101.114.46:32477) làm URL gốc của API khi dùng bộ sưu tập Postman.
Đăng nhập vào ứng dụng API WhatsApp Business để lấy Mã xác thực Bearer nhằm thực hiện lệnh gọi API.
Bạn có thể tiến hành kiểm tra sự cố trên ứng dụng API WhatsApp Business bằng cách gửi lệnh gọi API đến nút health
để xác minh rằng tất cả pod đều đang chạy đúng cách.
Phản hồi sẽ có dạng như sau:
'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' }
Phản hồi sẽ hiển thị gateway_status
là unregistered
dưới dạng gateway_status
của vùng chứa Master chính vì bạn chưa đăng ký ứng dụng API WhatsApp Business.
Bạn có thể đăng ký ứng dụng API WhatsApp Business bằng cách gửi lệnh gọi API đến nút account
.
Tiến hành kiểm tra sự cố một lần nữa trên ứng dụng API WhatsApp Business bằng cách gửi lệnh gọi API đến nút health
sau khi hoàn tất quy trình đăng ký và đảm bảo một trong các vùng chứa Coreapp có gateway_status
là connected
.
Phản hồi sẽ có dạng như sau:
'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' }
Lưu ý: Ở chế độ Độ sẵn sàng cao, sẽ chỉ có một Coreapp (trong ví dụ này là whatsapp-coreapp-deployment-78c4d987b8-4cpz4
) được kết nối với máy chủ WhatsApp. Tất cả pod khác - kể cả Master chính - đều sẽ có gateway_status
là disconnected
. Nếu whatsapp-coreapp-deployment-78c4d987b8-4cpz4
gặp sự cố, whatsapp-coreapp-deployment-78c4d987b8-l5qjj
sẽ thay thế và kết nối với máy chủ WhatsApp để duy trì Độ sẵn sàng cao.
Giờ thì bạn đã thiết lập ứng dụng API WhatsApp Business ở chế độ Độ sẵn sàng cao. Ở chế độ này, chỉ một Coreapp có thể kết nối với máy chủ WhatsApp để gửi tin nhắn tại bất kỳ thời điểm cụ thể nào. Nếu bạn muốn có nhiều Coreapp gửi tin nhắn cùng lúc để tăng thông lượng tin nhắn, hãy làm theo các bước trong phần Thiết lập cụm Đa kết nối có độ sẵn sàng cao dưới đây.
Sử dụng điểm cuối đoạn để thiết lập 2 đoạn. Bạn sẽ thấy phản hồi HTTP có trạng thái là 201 Created
.
Bạn có thể tiến hành kiểm tra sự cố trên ứng dụng API WhatsApp Business bằng cách gửi lệnh gọi API đến nút health
để xác minh rằng tất cả pod đều đang chạy đúng cách.
Phản hồi sẽ có dạng như sau:
'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' }
Lưu ý: Ở chế độ Đa kết nối có 2 đoạn, 2 Coreapp (trong ví dụ này là whatsapp-coreapp-deployment-78c4d987b8-l5qjj
và whatsapp-coreapp-deployment-78c4d987b8-4cpz4
) sẽ được kết nối với máy chủ WhatsApp. Đồng thời Master chính (trong ví dụ này là whatsapp-master-deployment-8598d7bf6b-9r6lc
) cũng sẽ được kết nối với máy chủ WhatsApp.
Cho đến giờ, trong ví dụ này, bạn có 2 vùng chứa Coreapp và dung lượng tin nhắn được phân chia giữa 2 vùng chứa đó. Tuy nhiên, nếu một trong 2 vùng chứa Coreapp gặp sự cố thì một nửa lượng tin nhắn sẽ không gửi được. Để duy trì Độ sẵn sàng cao trong bản thiết lập Đa kết nối mới này, bạn có thể khởi động một Coreapp thứ 3 để hỗ trợ 1 Coreapp bị lỗi, tương tự sơ đồ nêu trong phần Giới thiệu về chế độ Đa kết nối.
Để khởi động vùng chứa Coreapp thứ 3, hãy thay đổi số lượng replicas
thành 3
trong file coreapp.yaml
:
spec: replicas: 3
Sau đó, triển khai lại Coreapp bằng cách chạy:
kubectl apply -f coreapp.yaml
Phản hồi sẽ có dạng như sau:
horizontalpodautoscaler.autoscaling/whatsapp-coreapp-autoscaler unchanged service/whatsapp-coreapp-service unchanged deployment.apps/whatsapp-coreapp-deployment configured
Tiến hành kiểm tra sự cố một lần nữa để xác minh rằng tất cả nút đều đang chạy đúng cách bằng việc gửi lệnh gọi API đến nút health
để xác minh tất cả pod đều đang chạy đúng cách.
Phản hồi sẽ có dạng như sau:
'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' }
Vùng chứa whatsapp-coreapp-deployment-78c4d987b8-hwqp6
mới hiện đóng vai trò là vùng chứa dự phòng nhưng chưa được kết nối với máy chủ WhatsApp. Nếu whatsapp-coreapp-deployment-78c4d987b8-l5qjj
hoặc whatsapp-coreapp-deployment-78c4d987b8-4cpz4stops working,
whatsapp-coreapp-deployment-78c4d987b8-hwqp6` sẽ kết nối với máy chủ WhatsApp để duy trì số đoạn chung là 2.
Ứng dụng sẽ dừng chạy trong quá trình nâng cấp.
Bạn nên sao lưu các cài đặt ứng dụng hiện tại trước khi nâng cấp để đảm bảo có thể nhanh chóng sao lưu và chạy. Vui lòng làm theo tài liệu hướng dẫn Sao lưu và khôi phục.
Bạn nên tiến hành nâng cấp vào những lúc rảnh nhất.
$VERSION
thành phiên bản mớiCập nhật biến môi trường $VERSION
thành phiên bản mới mà bạn muốn nâng cấp lên (ví dụ: 2.23.5
) trong phần containers
của các file webapp.yaml
, master.yaml
và 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
Nâng cấp các vùng chứa Webapp, Master và Coreapp, đồng thời theo dõi trạng thái triển khai.
Webapp
kubectl apply -f webapp.yaml
Phản hồi sẽ có dạng như sau:
kubectl rollout status deployments/whatsapp-web-deployment
Master
kubectl apply -f master.yaml
Phản hồi sẽ có dạng như sau:
kubectl rollout status deployments/whatsapp-master-deployment
Coreapp
kubectl apply -f coreapp.yaml
Phản hồi sẽ có dạng như sau:
kubectl rollout status deployments/whatsapp-coreapp-deployment
Xóa bản triển khai bằng:
kubectl delete -f webapp.yaml kubectl delete -f master.yaml kubectl delete -f coreapp.yaml kubectl delete -f mysql.yaml
Xóa ổ đĩa bằng:
kubectl delete -f volume.yaml
Xóa khóa bí mật bằng:
kubectl delete secrets/whatsapp-config
Để kiểm tra xem tất cả pod có đang chạy hay không, hãy sử dụng:
kubectl get pods
Phản hồi sẽ có dạng như sau:
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
Nếu có pod chưa sẵn sàng (tức là hiển thị 0/1
trong cột READY
), bạn có thể lấy nhật ký của pod cụ thể đó bằng cách chạy lệnh kubectl logs
bằng tên pod đó.
Ví dụ:
kubectl logs whatsapp-coreapp-deployment-78c4d987b8-4cpz4 > whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
Sau đó, bạn có thể tìm nhật ký trong file whatsapp-coreapp-deployment-78c4d987b8-4cpz4.txt
ở thư mục hiện tại.
Nếu bạn muốn lấy nhật ký cho một dịch vụ cụ thể đã được triển khai như Webapp, hãy chạy lệnh kubectl logs
bằng tên dịch vụ đó.
Ví dụ:
kubectl logs deployments/whatsapp-web-deployment > whatsapp-web-deployment.txt
Sau đó, bạn có thể tìm nhật ký trong file whatsapp-web-deployment.txt
ở thư mục hiện tại.
Phần mềm này sử dụng mã FFmpeg được cấp phép theo LGPLv2.1. Bạn có thể tải xuống nguồn của mã này tại đây.