Kami akan menghentikan On-Premises API. Lihat Proses Penghentian On-Premises API dokumen untuk detailnya, dan untuk mempelajari cara bermigrasi ke Cloud API generasi berikutnya.
Dokumen ini menunjukkan kepada Anda cara mengatur klaster Ketersediaan Tinggi dalam produksi. Dokumen ini juga memberikan panduan cara mengaktifkan Multikoneksi, beserta perubahan yang diperlukan untuk klaster Multikoneksi dengan ketersediaan tinggi.
Jika Anda belum melakukannya, Anda direkomendasikan untuk mengatur instance Ketersediaan Tinggi/Multikoneksi dari klien API WhatsApp Business pada mesin developer mengikuti instruksi Pengaturan Developer: Ketersediaan Tinggi dan Multikoneksi untuk menguji pengaturan Anda sebelum mengikuti dokumen ini untuk mengatur klien API WhatsApp Business dalam produksi.
Sebelum memulai pengaturan ini, lihatlah persyaratan kami.
Untuk menyiapkan klaster Ketersediaan Tinggi:
biz
untuk skrip pengaturanUntuk menyiapkan klaster Multikoneksi Ketersediaan Tinggi:
Setelah Anda selesai menyiapkan instance, Anda bisa memilih untuk meningkatkannya. Untuk mencopot penginstalan klien, ikuti langkah-langkah ini.
Jika Anda telah menjalankan pengaturan developer dan ingin menggunakan kembali nomor telepon dalam produksi, lihat Panduan migrasi sebelum melanjutkan dengan sisa dokumen ini.
Konten dalam panduan ini didasarkan pada asumsi penginstalan baru yang menggunakan nomor telepon baru.
Anda akan memerlukan:
Diperlukan MySQL 5.7.xx/8.0.xx atau PostgreSQL 13.x/12.x/11.x.
Kata sandi database Anda tidak boleh berisi karakter berikut: ?{}&~!()^=
Jika tidak mematuhi ini, pengaturan mungkin akan gagal.
755
diatur sebagai mode file pada jalur pasang dan semua subdirektorinya. mkdir your-local-media-volume-path mount -t nfs nfs_server_IP_addr:/shared_directory /your-local-media-volume-path
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.
biz
untuk Skrip PengaturanJalankan kode berikut di lokasi pilihan Anda untuk klien API WhatsApp Business:
mkdir ~/biz; cd ~/biz;
Buat klona file konfigurasi prod-multiconnect-compose.yml
dan db.env
dari direktori Penginstalanrepositori GitHub WhatsApp-Business-API-Setup-Scripts ke direktori ~/biz
yang Anda buat di Langkah 1.
Ubah variabel lingkungan database dalam file db.env
di bawah direktori ~/biz
untuk mencerminkan konfigurasi MySQL/PostgreSQL Anda.
WA_DB_ENGINE=MYSQL | PGSQL WA_DB_HOSTNAME=your-database-server WA_DB_PORT=your-database-server-port WA_DB_USERNAME=your-database-username WA_DB_PASSWORD=your-database-password
Volume media lokal (whatsappMedia:/usr/local/wamedia
secara default) ditentukan dalam file prod-docker-compose.yml
digunakan untuk menyimpan file media. Secara default, volume dipasang ke direktori pada mesin Docker. Atau, Anda dapat memilih untuk memasang volume media ke direktori host. Untuk mengubah titik pasang volume media, ubah definisi volume di dalam bagian services
dari whatsappMedia
ke jalur direktori host yang Anda gunakan.
services: waweb: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia ... wacore: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia ... master: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia
Untuk memulai klien API WhatsApp Business dengan 1 kontainer Webapp, 2 kontainer Master, dan 2 kontainer CoreApp yang mirip dengan diagram Pengantar Ketersediaan Tinggi, gunakan perintah berikut dengan perubahan yang diperlukan untuk lingkungan Anda (yaitu: nama host, nama pengguna host, dan jalur lokal):
# copy configuration scripts to each Webapp host, ssh to each Webapp host, execute scripts to install Webapp on the host for host in your-webapp-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd waweb done # copy configuration scripts to each Master host, ssh to each Master host, execute scripts to install Master on the host for host in your-master1-hostname your-master2-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd master done # copy configuration scripts to each Coreapp host, ssh to each Coreapp host, execute scripts to install Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
Singkatnya, perintah di atas akan:
prod-multiconnect-compose.yml
dan db.env
ke semua host Webapp (your-webapp-hostname
dalam contoh ini) dan memulai layanan waweb
pada host ini;prod-multiconnect-compose.yml
dan db.env
ke semua host Master (your-master1-hostname
dan your-master2-hostname
dalam contoh ini) dan mulai layanan Master pada host ini;prod-multiconnect-compose.yml
dan db.env
ke semua host CoreApp (your-coreapp1-hostname
dan your-coreapp2-hostname
dalam contoh ini) dan mulai layanan wacore
pada host ini.Anda dapat memeriksa bahwa semua kontainer memiliki status RUNNING dengan menjalankan:
EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f prod-multiconnect-compose.yml ps
Anda dapat mengunduh dan mengonfigurasi Koleksi Postman kami untuk berinteraksi dengan API WhatsApp Business jika Anda tidak ingin menggunakan baris perintah.
Anda dapat melakukan pemeriksaan kesehatan pada klien API WhatsApp Business menggunakan panggilan API ke node health
.
Output yang dihasilkan akan terlihat seperti berikut:
{ "health": { "your-master1-hostname:85cdd51506fd": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "unregistered", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "your-coreapp2-hostname:75d7355eaaaa": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] } } } 200
Tanggapan menunjukkan gateway_status
dari unregistered
sebagai gateway_status
karena klien API WhatsApp Business belum terdaftar.
Anda dapat mendaftarkan klien API WhatsApp Business menggunakan panggilan API ke nodeaccount
.
Lakukan pemeriksaan kesehatan lagi pada klien API WhatsApp Business menggunakan panggilan API ke node health
setelah menyelesaikan pendaftaran dan pastikan salah satu kontainer CoreApp memiliki gateway_status
connected
.
Output yang dihasilkan akan terlihat seperti berikut:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "disconnected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "disconnected", "role": "coreapp" } } } 200
Catatan: Dalam mode Ketersediaan Tinggi, hanya satu CoreApp (your-coreapp1-hostname:753efb1cf72c
dalam contoh ini) yang akan terhubung ke server WhatsApp, semua node lain termasuk Master utama akan memiliki gateway_status
disconnected
. Jika your-coreapp1-hostname:753efb1cf72c
terhenti, your-coreapp2-hostname:75d7355eaaaa
akan menggantikannya dan terhubung ke server WhatsApp untuk mempertahankan Ketersediaan Tinggi.
Anda direkomendasikan untuk menyiapkan pemantauan bagi klien API WhatsApp Business produksi Anda.
Sekarang, Anda telah menyiapkan klien API WhatsApp Business dalam mode Ketersediaan Tinggi. Dalam mode ini, hanya satu Coreapp yang dapat terhubung ke server WhatsApp untuk mengirim pesan pada waktu tertentu. Jika Anda ingin memiliki beberapa CoreApp yang mengirim pesan secara bersamaan untuk meningkatkan throughput pesan, ikuti langkah-langkahnya di bagian Pengaturan Klaster Multikoneksi Ketersediaan Tinggi di bawah ini.
Gunakan endpoint partisi untuk menyiapkan 2 partisi. Anda seharusnya melihat tanggapan HTTP dengan status 201 Created
.
Anda dapat melakukan pemeriksaan kesehatan pada klien API WhatsApp Business menggunakan panggilan API ke node health
untuk memeriksa semua node sudah berjalan dengan benar.
Output yang dihasilkan akan terlihat seperti berikut:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "connected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "connected", "role": "coreapp" } } } 200
Catatan: Dalam mode Multikoneksi dengan 2 partisi, 2 CoreApp (your-coreapp1-hostname:753efb1cf72c
dan your-coreapp2-hostname:75d7355eaaaa
dalam contoh ini) akan terhubung ke server WhatsApp, dan Master utama (your-master2-hostname:8dd3f5bea27d
dalam contoh ini) juga akan terhubung ke server.
Sejauh ini dalam contoh ini, Anda memiliki 2 kontainer CoreApp dan muatan pesan dibagi di antara keduanya. Namun, jika salah satu kontainer CoreApp terhenti, setengah dari pengiriman pesan Anda akan gagal. Untuk mempertahankan Ketersediaan Tinggi dalam pengaturan Multikoneksi baru ini, Anda dapat memulai CoreApp ketiga pada host CoreApp baru (
your-coreapp3-hostname
dalam contoh ini) untuk menoleransi 1 kegagalan CoreApp, yang mirip dengan diagram yang ditunjukkan pada Pengantar Multikoneksi.
Untuk memulai kontainer Coreapp ketiga, jalankan perintah berikut:
# copy configuration scripts to the 3rd Coreapp host, ssh to the Coreapp host, execute scripts to install Coreapp on the host for host in your-coreapp3-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
Lakukan pemeriksaan kesehatan lagi untuk memverifikasi bahwa semua node sudah berjalan dengan benar menggunakan panggilan API ke node health
.
Output yang dihasilkan akan terlihat seperti berikut:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "disconnected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp3-hostname:23b50199bec2": { "gateway_status": "disconnected", "role": "coreapp" } } } 200
Kontainer CoreApp baru (your-coreapp3-hostname
:23b50199bec2
dalam contoh ini) sekarang bertindak sebagai kontainer siaga, tetapi saat ini tidak terhubung ke server WhatsApp. Jika salah satu dari 2 kontainer CoreApp yang terhubung lainnya berhenti berfungsi, kontainer ketiga akan terhubung ke server WhatsApp untuk mempertahankan jumlah partisi keseluruhan sebesar 2.
Untuk mendukung 100-150 pesan/detik, setidaknya 2 Webapp direkomendasikan. Jika Anda ingin mencapai Ketersediaan Tinggi untuk Webapp, Anda dapat menjalankan kontainer Webapp pada lebih dari 2 host dan meng-host mereka di belakang penyeimbang muatan seperti HAProxy, Nginx, atau ELB. Alih-alih mengakses endpoint Klien API Business melalui https://your-webapp-hostname:your-webapp-port/
, Anda sebaiknya menggunakan https://your-load-balancer-name:your-load-balancer-port/
.
Direkomendasikan Anda menjalankan 3 Master pada host yang berbeda. Tidak ada alasan untuk memiliki lebih dari 3 Master dalam produksi berapa pun partisi yang Anda miliki. Muatan di Master ringan dan Anda bisa menempatkan bersama kontainer CoreApp.
Direkomendasikan Anda memiliki shard_number + X
jumlah CoreApp yang berjalan pada host yang berbeda untuk menoleransi X
jumlah kegagalan host.
Akan ada waktu henti selama proses peningkatan.
Sangat direkomendasikan untuk mencadangkan pengaturan aplikasi Anda saat ini sebelum meningkatkannya untuk memastikan Anda dapat kembali aktif dengan cepat. Harap ikuti dokumentasi Pencadangan dan Pemulihan.
Hal yang selalu direkomendasikan adalah melakukan peningkatan selama waktu Anda yang paling tidak sibuk.
Variabel lingkungan WA_API_VERSION
harus diperbarui ke nomor versi terbaru. Jalankan perintah berikut dengan perubahan yang diperlukan untuk lingkungan Anda (yaitu: nama host, nama pengguna host, dan jalur lokal):
# ssh to each Webapp host, execute scripts with new WA_API_VERSION to upgrade Webapp on the host for host in your-webapp-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd waweb done # ssh to each Master host, execute scripts with new WA_API_VERSION to upgrade Master on the host for host in your-master1-hostname your-master2-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd master done # ssh to each Coreapp host, execute scripts with new WA_API_VERSION to upgrade Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname your-coreapp3-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
2.23.x
ke AtasSekarang Anda dapat menggunakan layanan peningkatan database yang memungkinkan Anda untuk meningkatkan database saat aplikasi Anda masih berjalan agar terhindar dari waktu henti.
File dbupgrade-compose.yml memiliki kolom yang menandakan versi kontainer.
Contoh:
services: dbupgrade: image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}
Untuk meningkatkan penginstalan, mulailah kontainer dbupgrade-service dengan variabel lingkungan WA_API_VERSION
yang diatur ke versi terbaru:
EXTERNAL_HOSTNAME=$host_to_upgradedb WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
Catatan: Jika Anda menggunakan orkestrasi yang memulai ulang kontainer setelah keluar apa pun kode keluarnya, mulailah layanan dengan variabel lingkungan EXIT_ON_SUCCESS
yang diatur ke FALSE
agar terhindar dari keluar kontainer ketika kode keluarnya adalah 0
.
Jika peningkatan database berhasil, kontainer akan keluar dengan kode 0
. Anda dapat menggunakan perintah Docker berikut untuk melacak status:
docker wait your-database-upgrade-container-name
Outputnya adalah kode keluar dari kontainer dbupgrade-service.
Mulai ulang kontainer Coreapp dan Webapp Docker dengan variabel lingkungan WA_API_VERSION
yang diatur ke versi terbaru:
EXTERNAL_HOSTNAME=$host_to_upgradedb WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
2.29.3
ke AtasJika Anda meningkatkan dari v2.29.1
, v2.29.2
atau mengalami masalah selama peningkatan ke versi tersebut dan harus kembali ke versi sebelumnya demi stabilitas, kami merekomendasikan Anda untuk meningkatkan ke v2.29.3
, lalu jalankan perintah berikut pada kontainer Docker Webapp:
chown -R root your-media-directory/incoming your-media-directory/outgoing your-media-directory/shared
Kecuali Anda telah mengubahnya, direktori media default adalah /usr/local/wamedia
.
Catatan:
v2.29.1
dan v2.29.2
.Jika Anda perlu mereset lingkungan pengembangan Anda dengan menghapus semua kontainer, gunakan perintah berikut dengan perubahan yang diperlukan untuk lingkungan Anda (yaitu: nama host, nama pengguna host, dan jalur lokal):
# ssh to each Webapp host, execute scripts to uninstall Webapp on the host for host in your-webapp-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd waweb done # ssh to each Master host, execute scripts to uninstall Master on the host for host in your-master1-hostname your-master2-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd master done # ssh to each Coreapp host, execute scripts to uninstall Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname your-coreapp3-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd wacore done
Untuk mengumpulkan catatan dari semua kontainer di host, jalankan perintah berikut:
EXTERNAL_HOSTNAME=$host_to_collect_logs docker-compose -f /local/path/prod-multiconnect-compose.yml logs > debug_output.txt
Untuk mengumpulkan catatan dari layanan spesifik, tambahkan nama layanan (misalnya: waweb
, master1
, wacore1
) ke perintah docker-compose logs
.
EXTERNAL_HOSTNAME=$host_to_collect_logs docker-compose -f /local/path/prod-multiconnect-compose.yml logs waweb > debug_output.txt
Anda dapat menemukan catatan dalam file debug_output.txt
di direktori saat ini.
Perangkat lunak ini menggunakan kode FFmpeg yang dilisensikan di bawah LGPLv2.1 dan sumbernya bisa diunduh di sini.