Thiết lập dành cho nhà phát triển: Chế độ Đa kết nối trên Minikube

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:

  1. Tạo thư mục biz cho các tập lệnh thiết lập
  2. Tải file cấu hình Ứng dụng API WhatsApp Business
  3. Tạo cơ sở dữ liệu MySQL
  4. Tạo khóa bí mật whatsapp-config
  5. Tạo ổ đĩa file phương tiện cục bộ
  6. Đặt biến môi trường $VERSION
  7. Triển khai vùng chứa
  8. Tìm cổng vùng chứa webapp
  9. Lấy mã xác thực
  10. Kiểm tra sự cố
  11. Đăng ký ứng dụng API WhatsApp Business
  12. Kiểm tra sự cố lần 2

Để 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:

  1. Thiết lập 2 đoạn
  2. Kiểm tra sự cố
  3. Khởi động coreapp thứ 3 để duy trì Độ sẵn sàng cao
  4. Kiểm tra sự cố lần 2

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.

Trước khi bạn bắt đầu

Bạn sẽ cần:

  • Thiết lập cụm Kubernetes trên hệ thống bằng minikube
  • Công cụ dòng lệnh kubectl
  • Một tài khoản thử nghiệm được thiết lập trên hệ thống trong môi trường phát triển
    • Tài khoản này dùng để phát triển và thử nghiệm nhanh các bản mới phát hành.

Để 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.

Thiết lập cụm có độ sẵn sàng cao

Bước 1: Tạo thư mục biz cho các tập lệnh thiết lập

Chạy mã sau ở vị trí bạn muốn cho ứng dụng API WhatsApp Business:

mkdir ~/biz; cd ~/biz;

Bước 2: Lấy file cấu hình ứng dụng API WhatsApp Business

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.

Bước 3: Tạo cơ sở dữ liệu MySQL

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

Bước 4: Tạo khóa bí mật 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

Bước 5: Tạo ổ đĩa file phương tiện cục bộ

Để 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 PersistentVolumePersistentVolumeClaim 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

Bước 6: Đặt biến môi trường $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.yamlcoreapp.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

Bước 7: Triển khai vùng chứa

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ước 8: Tìm cổng vùng chứa webapp

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.

Bước 9: Lấy mã xác thực

Đă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ước 10: Kiểm tra sự cố

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_statusunregistered 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ước 11: Đă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.

Bước 12: Kiểm tra sự cố lần 2

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_statusconnected.

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_statusdisconnected. 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.

Thiết lập cụm Đa kết nối có độ sẵn sàng cao

Bước 1: Thiết lập 2 đoạn

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ước 2: Kiểm tra sự cố

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-l5qjjwhatsapp-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.

Bước 3: Khởi động Coreapp thứ 3 để duy trì Độ sẵn sàng cao

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

Bước 4: Kiểm tra sự cố lần 2

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.

Nâng cấp ứng dụng API WhatsApp Business

Ứ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.

Bước 1: Thay đổi biến môi trường $VERSION thành phiên bản mới

Cậ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.yamlcoreapp.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

Bước 2: Nâng cấp vùng chứa

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

Gỡ cài đặt ứng dụng API WhatsApp Business

Bước 1: Xóa bản triển khai

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

Bước 2: Xóa ổ đĩa

Xóa ổ đĩa bằng:

kubectl delete -f volume.yaml

Bước 3: Xóa khóa bí mật

Xóa khóa bí mật bằng:

kubectl delete secrets/whatsapp-config

Khắc phục sự cố

Để 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.