Pengaturan Developer: Ketersediaan Tinggi & Multikoneksi

Dokumen ini menunjukkan kepada Anda cara menyiapkan klaster Ketersediaan Tinggi di mesin developer. Dokumen ini juga memberikan panduan tentang cara mengaktifkan Multikoneksi serta perubahan yang diperlukan untuk klaster Multikoneksi dengan ketersediaan tinggi. Untuk pengaturan produksi, ikuti instruksi relevan yang tercantum di Pengaturan Produksi.

Sebelum Anda memulai pengaturan ini, lihat daftar persyaratan kami.

Untuk menyiapkan klaster Ketersediaan Tinggi, ikuti langkah-langkah berikut:

  1. Buat Direktori biz untuk skrip pengaturan
  2. Dapatkan file konfigurasi Klien API WhatsApp Business
  3. Atur variabel lingkungan WA_API_VERSION
  4. Mulai Klien API WhatsApp Business dengan Ketersediaan Tinggi
  5. Verifikasi kontainer sedang ditayangkan
  6. Lakukan pemeriksaan kesehatan
  7. Daftarkan Klien API WhatsApp Business
  8. Lakukan pemeriksaan kesehatan kedua

Untuk menyiapkan klaster Multikoneksi, ikuti langkah-langkah berikut:

  1. Siapkan dua partisi
  2. Lakukan pemeriksaan kesehatan
  3. Mulailah CoreApp ketiga untuk mempertahankan Ketersediaan Tinggi
  4. Lakukan pemeriksaan kesehatan kedua

Setelah Anda selesai menyiapkan instance, Anda bisa memilih untuk meningkatkannya. Untuk mencopot penginstalan klien, ikuti langkah-langkah ini.

Sebelum Memulai

Jika Anda sudah mengikuti instruksi Pengaturan Developer: Instance Tunggal untuk menyiapkan klien API WhatsApp Business pada mesin developer sebelumnya, silakan ikuti panduan Migrasi sebelum melanjutkan dengan bagian lain dari dokumen ini.

Isi panduan ini didasarkan pada asumsi instalasi baru.

Sebelum memulai, Anda perlu menyelesaikan hal berikut:

Install Docker Desktop

To install Docker Desktop on your developer machine:

  1. Navigate to the Docker website.
  2. If you do not have an existing Docker account, create one by clicking on Sign Up.
  3. After you have created your account, you will be directed to the Docker download page.
  4. Download Docker Desktop based on your OS (This should be automatically detected and presented as the default option).

The remaining steps are based on macOS and should be very similar for Linux or Windows 10.

To install Docker using macOS:

  1. Install the package (docker.dmg for macOS).
  2. After extraction, Finder will pop-up and you will be presented with a dialog that instructs you to drag the Docker icon to Applications. Drag Docker icon to the Application folder in Finder.
  3. In Applications launch Docker and then click the Open button.
  4. You may be prompted to enter your password Docker needs priviledged/administrator access.
  5. Docker will present you with a tutorial, you can click Start to launch a tutorial or you can click Skip Tutorial to start using Docker.

Verify Docker Compose is installed

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.

Prasyarat lainnya

Pastikan Anda menyiapkan akun uji lokal di lingkungan pengembangan. Ini untuk pengembangan cepat dan untuk menguji rilis baru. Anda juga sangat disarankan untuk membaca seluruhPanduan Ketersediaan dan Penskalaan untuk mempelajari selengkapnya tentang Ketersediaan Tinggi dan Multikoneksi.

Pengaturan Klaster Ketersediaan Tinggi

Langkah 1: Buat Direktori biz untuk Skrip Pengaturan

Jalankan kode berikut di lokasi pilihan Anda untuk klien API WhatsApp Business:

mkdir ~/biz; cd ~/biz;

Langkah 2: Dapatkan File Konfigurasi Klien API WhatsApp Business

File konfigurasi untuk klien API WhatsApp Business berada di repositori GitHub WhatsApp-Business-API-Setup-Scripts. Anda dapat mengatur klien API WhatsApp Business Anda dengan instance database MySQL atau Postgres.

Langkah 3: Atur Variabel Lingkungan WA_API_VERSION

Variabel lingkungan WA_API_VERSION harus diatur ke versi saat ini menggunakan:

export WA_API_VERSION=current-whatsapp-version

Langkah 4: Mulai Klien API WhatsApp Business dengan Ketersediaan Tinggi

Untuk memulai klaster Ketersediaan Tinggi dengan 1 kontainer database, 1 kontainer Webapp, 2 kontainer Master, dan 2 kontainer Coreapp di latar belakang mirip dengan diagram yang ditunjukkan di Introduksi Ketersediaan Tinggi, tayangkan perintah berikut:

docker-compose -f multiconnect-compose.yml up -d db waweb master1 master2 wacore1 wacore2

Output yang dihasilkan akan terlihat seperti berikut:

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

Langkah 5: Verifikasi bahwa Kontainer Sedang Ditayangkan

Anda dapat memeriksa bahwa semua kontainer berstatus AKTIF dengan menayangkan:

docker-compose -f multiconnect-compose.yml ps

Output yang dihasilkan akan terlihat seperti berikut:

      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

Secara default, kontainer Webapp akan ditayangkan di port 9090 dan kontainer database akan ditayangkan di port 33060.

Langkah 6: Lakukan Pemeriksaan Kesehatan

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": {
      "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."
              }
          ]
      }
  }
}

Tanggapan menunjukkan gateway_status dari unregistered sebagai gateway_status untuk kontainer Master utama karena klien API WhatsApp Business belum terdaftar.

Langkah 7: Daftarkan Klien API WhatsApp Business

Anda dapat mendaftarkan klien API WhatsApp Business menggunakan panggilan API ke nodeaccount.

Langkah 8: Lakukan Pemeriksaan Kesehatan Kedua

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 dari connected.

Output yang dihasilkan akan terlihat seperti berikut:

{
    "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"
        }
    }
} 

Catatan: Dalam mode Ketersediaan Tinggi, hanya satu Coreapp (wacore1 dalam contoh ini) akan terhubung ke server Whatsapp; semua node lainnya, termasuk Master utama, akan memiliki gateway_status dari disconnected. Jika wacore1 sedang down, wacore2 akan menggantikannya dan terhubung ke server WhatsApp untuk menjaga Ketersediaan Tinggi.

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.

Pengaturan Klaster Multikoneksi Ketersediaan Tinggi

Langkah 1: Siapkan Dua Partisi

Gunakan endpoint partisi untuk menyiapkan 2 partisi. Anda seharusnya melihat tanggapan HTTP dengan status 201 Created.

Langkah 2: Lakukan Pemeriksaan Kesehatan

Anda dapat melakukan pemeriksaan kesehatan pada klien API WhatsApp Business menggunakan panggilan API ke node health.

Output yang dihasilkan akan terlihat seperti berikut:

{
    "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"
        }
    }
}          

Catatan: Dalam mode Multikoneksi dengan 2 partisi, 2 Coreapps (wacore1 dan wacore2 dalam contoh ini) akan terhubung ke server WhatsApp dan Master utama (master2 dalam contoh ini) juga akan terhubung ke server WhatsApp.

Langkah 3: Mulailah CoreApp Ketiga untuk Mempertahankan Ketersediaan Tinggi

Sejauh ini dalam contoh ini, Anda memiliki 2 kontainer CoreApp dan muatan pesan dibagi di antara keduanya. Namun, jika salah satu kontainer CoreApp sedang down, setengah dari pengiriman pesan Anda akan gagal. Untuk mempertahankan Ketersediaan Tinggi dalam pengaturan Multikoneksi baru ini, Anda dapat memulai Coreapp ketiga untuk menoleransi 1 kegagalan Coreapp, yang mirip dengan diagram yang ditunjukkan di Introduksi Multikoneksi.

Untuk memulai kontainer CoreApp ketiga, jalankan perintah berikut:

docker-compose -f multiconnect-compose.yml up -d wacore3

Output yang dihasilkan akan terlihat seperti berikut:

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

Langkah 4: Lakukan Pemeriksaan Kesehatan Kedua

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": {
        "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"
        }
    }
} 

Kontainer Coreapp baru (wacore3 dalam contoh ini) sekarang bertindak sebagai kontainer cadangan, tetapi saat ini tidak terhubung ke server WhatsApp. Jika wacore1 atau wacore2 berhenti berfungsi, wacore3 akan terhubung ke server WhatsApp untuk mempertahankan jumlah partisi keseluruhan sebanyak 2.

Meningkatkan Klien API WhatsApp Business

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.

Selalu direkomendasikan untuk melakukan peningkatan selama waktu Anda yang paling tidak sibuk.

Langkah 1: Ubah Variabel Lingkungan WA_API_VERSION ke Versi Baru

Variabel lingkungan WA_API_VERSION harus diperbarui ke nomor versi terbaru menggunakan:

export WA_API_VERSION=new-whatsapp-version

Langkah 2: Mulai ulang Kontainer Docker

Mulai ulang kontainer Docker dengan menjalankan:

docker-compose -f multiconnect-compose.yml up -d

Untuk Pengguna Database MySQL yang Meningkatkan ke v2.23.x ke Atas

Sekarang Anda dapat menggunakan layanan peningkatan database yang memungkinkan Anda untuk meningkatkan database saat aplikasi Anda masih berjalan agar terhindar dari waktu henti.

Langkah 1: Unduh file konfigurasi

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}

Langkah 2: Mulailah kontainer

Untuk meningkatkan penginstalan, mulailah kontainer dbupgrade-service dengan variabel lingkungan WA_API_VERSION yang diatur ke versi terbaru:

WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d

Catatan: Jika Anda menggunakan orkestrasi yang memulai ulang kontainer saat keluar, terlepas dari kode keluar, mulailah layanan dengan variabel lingkungan EXIT_ON_SUCCESS diatur ke FALSE agar tidak keluar dari kontainer ketika kode keluar adalah 0.

Langkah 3: Tunggu sampai peningkatan selesai

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.

Langkah 4: Mulai ulang kontainer CoreApp dan Webapp

Mulai ulang kontainer CoreApp dan Webapp Docker dengan variabel lingkungan WA_API_VERSION yang diatur ke versi terbaru:

WA_API_VERSION=new-whatsapp-version docker-compose -f multiconnect-compose.yml up -d

Menghapus instalasi Klien API WhatsApp Business

Sangat direkomendasikan untuk mencadangkan pengaturan aplikasi Anda saat ini sebelum menghapus instalan. Harap ikuti dokumentasi Pencadangan dan Pemulihan.

Jika Anda perlu mereset lingkungan pengembangan dengan menghapus semua kontainer, jalankan perintah berikut dari direktori yang berisi file multiconnect-compose.yml:

docker-compose -f multiconnect-compose.yml down

Untuk menghilangkan semua volume yang ditentukan dalam file multiconnect-compose.yml selain kontainernya, jalankan down dengan parameter -v:

docker-compose -f multiconnect-compose.yml down -v

Pemecahan Masalah

Untuk mengumpulkan catatan dari semua kontainer, jalankan perintah berikut:

docker-compose -f multiconnect-compose.yml logs > debug_output.txt

Untuk mengumpulkan catatan layanan tertentu, tambahkan nama layanan (contoh: waweb, master1, wacore1) ke perintah docker-compose logs:

docker-compose -f 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.