การตั้งค่าสำหรับผู้พัฒนา: ความพร้อมใช้งานสูงและการเชื่อมต่อหลายจุด

เอกสารฉบับนี้จะแสดงวิธีตั้งค่าคลัสเตอร์ที่มีความพร้อมใช้งานสูงในอุปกรณ์ของผู้พัฒนา นอกจากนี้ ยังแนะนำวิธีเปิดใช้งานการเชื่อมต่อหลายจุดเป็นการปิดท้าย รวมทั้งการเปลี่ยนแปลงที่จำเป็นสำหรับคลัสเตอร์การเชื่อมต่อหลายจุดที่มีความพร้อมใช้งานสูง

สำหรับการตั้งค่าการผลิต ให้ทำตามคำแนะนำที่เกี่ยวข้องซึ่งระบุในการตั้งค่าการผลิต

ก่อนเริ่มต้น

หากคุณทำตามคำแนะนำการตั้งค่าสำหรับผู้พัฒนา: อินสแตนซ์เดี่ยวเพื่อตั้งค่าไคลเอ็นต์ WhatsApp Business API บนอุปกรณ์ของผู้พัฒนาก่อนหน้านี้ โปรดทำตามคู่มือการย้ายก่อนดำเนินการต่อตามส่วนที่เหลือในเอกสารฉบับนี้

เนื้อหาในคู่มือนี้จัดทำขึ้นโดยใช้สมมติฐานว่าเป็นการติดตั้งแบบใหม่หมด

คุณจำเป็นต้องมีสิ่งต่อไปนี้:

  • Docker Compose
    • ควรมีรวมอยู่แล้วในการติดตั้ง Docker แต่ถ้าไม่มี คุณก็สามารถติดตั้งได้เอง
  • บัญชีทดสอบที่ตั้งค่าในเครื่องในสภาพแวดล้อมการพัฒนา
    • การดำเนินการนี้มีเพื่อการพัฒนาที่รวดเร็วและเพื่อทดสอบเวอร์ชั่นใหม่

ขอแนะนำเป็นอย่างยิ่งให้คุณอ่านคู่มือความพร้อมใช้งานและการปรับขนาดอย่างละเอียดเพื่อเรียนรู้ข้อมูลเพิ่มเติมเกี่ยวกับความพร้อมใช้งานสูงและการเชื่อมต่อหลายจุด

ตั้งค่าคลัสเตอร์ที่มีความพร้อมใช้งานระดับสูง

ขั้นตอนที่ 1: สร้างไดเรกทอรี biz สำหรับสคริปต์การตั้งค่า

เรียกใช้โค้ดต่อไปนี้ในตำแหน่งที่คุณต้องการสำหรับไคลเอ็นต์ WhatsApp Business API:

mkdir ~/biz; cd ~/biz;

ขั้นตอนที่ 2: รับไฟล์การกำหนดค่าไคลเอ็นต์ WhatsApp Business API

ไฟล์การกำหนดค่าสำหรับไคลเอ็นต์ WhatsApp Business API จะอยู่ในที่เก็บ WhatsApp-Business-API-Setup-Scripts GitHub คุณสามารถตั้งค่าไคลเอ็นต์ WhatsApp Business API ของคุณได้ด้วยอินสแตนซ์ฐานข้อมูล MySQL หรือ Postgres

  • สำหรับการตั้งค่าฐานข้อมูล MySQL ให้คัดลอกไฟล์การกำหนดค่า multiconnect-compose.yml และ db.env จากไดเรกทอรีการติดตั้งไปยังไดเรกทอรี ~/biz ที่คุณสร้างในขั้นตอนที่ 1
  • สำหรับการตั้งค่าฐานข้อมูล Postgres ให้คัดลอกไฟล์การกำหนดค่า multiconnect-compose.yml และ db.env จากไดเรกทอรีการติดตั้ง Postgres ไปยังไดเรกทอรี ~/biz ที่คุณสร้างในขั้นตอนที่ 1

ขั้นตอนที่ 3: กำหนดตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION

ควรกำหนดตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION ให้เป็นเวอร์ชั่นปัจจุบันโดยใช้:

export WA_API_VERSION=current-whatsapp-version

ขั้นตอนที่ 4: เริ่มใช้งานไคลเอ็นต์ WhatsApp Business API ที่มีความพร้อมใช้งานสูง

หากต้องการเริ่มใช้คลัสเตอร์ความพร้อมใช้งานสูงพร้อมด้วยคอนเทนเนอร์ฐานข้อมูล 1 รายการ คอนเทนเนอร์ Webapp 1 รายการ คอนเทนเนอร์ Master 2 รายการ และคอนเทนเนอร์ Coreapp 2 รายการในพื้นหลังในลักษณะคล้ายคลึงกับแผนผังที่ปรากฏในบทนำเกี่ยวกับความพร้อมใช้งานสูง ให้เรียกใช้คำสั่งต่อไปนี้:

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

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

ขั้นตอนที่ 5: ตรวจสอบยืนยันว่าคอนเทนเนอร์กำลังทำงานอยู่

คุณสามารถตรวจสอบได้ว่าทุกคอนเทนเนอร์มีสถานะเป็น UP โดยเรียกใช้:

docker-compose -f multiconnect-compose.yml ps

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

      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

ตามค่าเริ่มต้น คอนเทนเนอร์ Webapp จะทำงานบนพอร์ต 9090 และคอนเทนเนอร์ฐานข้อมูลจะทำงานบนพอร์ต 33060

ขั้นตอนที่ 6: ดำเนินการตรวจสอบระบบ

คุณสามารถดาวน์โหลดและกำหนดค่าคอลเลกชั่น Postman ของเราเพื่อโต้ตอบกับ WhatsApp Business API หากคุณไม่ต้องการใช้บรรทัดคำสั่ง

คุณสามารถดำเนินการตรวจสอบไคลเอ็นต์ WhatsApp Business API โดยใช้การเรียก API ไปยังโหนด health

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

การตอบกลับจะแสดง gateway_status ของ unregistered ว่าเป็น gateway_status สำหรับคอนเทนเนอร์ Master หลักเนื่องจากยังไม่ได้ลงทะเบียนไคลเอนต์ WhatsApp Business API

ขั้นตอนที่ 7: ลงทะเบียนไคลเอ็นต์ WhatsApp Business API

คุณสามารถลงทะเบียนไคลเอ็นต์ WhatsApp Business API ของคุณได้โดยใช้การเรียก API ไปยังโหนด account

ขั้นตอนที่ 8: ดำเนินการตรวจสอบระบบครั้งที่สอง

ดำเนินการตรวจสอบไคลเอ็นต์ WhatsApp Business API อีกครั้งโดยใช้การเรียก API ไปยังโหนด health หลังจากลงทะเบียนเสร็จสิ้น และตรวจสอบให้แน่ใจว่าหนึ่งในคอนเทนเนอร์ Coreapp มี gateway_status ของ connected

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

หมายเหตุ: ในโหมดความพร้อมใช้งานสูง มีเพียงหนึ่ง Coreapp (ตัวอย่างนี้ใช้ wacore1) เท่านั้นที่จะเชื่อมต่อเข้ากับเซิร์ฟเวอร์ Whatsapp โดยโหนดอื่นๆ ทั้งหมด รวมถึง Master หลัก จะมี gateway_status ของ disconnected หาก wacore1 หยุดทำงาน wacore2 จะเข้าแทนที่และเชื่อมต่อกับเซิร์ฟเวอร์ Whatsapp เพื่อรักษาความพร้อมใช้งานสูงเอาไว้

ตอนนี้คุณได้ตั้งค่าไคลเอนต์ WhatsApp Business API ในโหมดความพร้อมใช้งานสูงแล้ว ในโหมดนี้ มีเพียงหนึ่ง Coreapp เท่านั้นที่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ WhatsApp เพื่อส่งข้อความได้ทุกเมื่อที่กำหนด หากต้องการให้มีหลาย Coreapp ที่ส่งข้อความพร้อมๆ กันได้เพื่อเพิ่มปริมาณข้อความ ให้ทำตามขั้นตอนในส่วนตั้งค่าคลัสเตอร์การเชื่อมต่อหลายจุดที่มีความพร้อมใช้งานสูงด้านล่าง

การตั้งค่าคลัสเตอร์การเชื่อมต่อหลายจุดที่มีความพร้อมใช้งานสูง

ขั้นตอนที่ 1: ตั้งค่าการแบ่งข้อมูลสองรายการ

ใช้ตำแหน่งข้อมูลการแบ่งข้อมูลเพื่อตั้งค่าการแบ่งข้อมูล 2 รายการ คุณจะเห็นการตอบกลับ HTTP ที่มีสถานะ 201 Created

ขั้นตอนที่ 2: ดำเนินการตรวจสอบระบบ

คุณสามารถดำเนินการตรวจสอบไคลเอ็นต์ WhatsApp Business API โดยใช้การเรียก API ไปยังโหนด health

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

หมายเหตุ: ในโหมดการเชื่อมต่อหลายจุดที่มีการแบ่งข้อมูล 2 รายการนั้น 2 Coreapp (ตัวอย่างนี้ใช้ wacore1 และ wacore2) จะเชื่อมต่อกับเซิร์ฟเวอร์ WhatsApp และ Master หลัก (ในตัวอย่างนี้ใช้ master2) จะเชื่อมต่อกับเซิร์ฟเวอร์ WhatsApp เช่นกัน

ขั้นตอนที่ 3: เริ่มใช้งาน Coreapp ที่สามเพื่อรักษาความพร้อมใช้งานสูง

ในตัวอย่างนี้ คุณมีคอนเทนเนอร์ Coreapp 2 รายการและปริมาณข้อความถูกแบ่งออกให้ทั้งสองคอนเทนเนอร์ อย่างไรก็ตาม หากหนึ่งในคอนเทนเนอร์ Coreapp หยุดทำงาน การส่งข้อความครึ่งหนึ่งจะหยุดลงเช่นกัน หากต้องการรักษาความพร้อมใช้งานสูงในการตั้งค่าการเชื่อมต่อหลายจุดแบบใหม่นี้ คุณสามารถเริ่มใช้งาน Coreapp ที่สามเพื่อรับมือกับความล้มเหลวของ Coreapp 1 รายการได้ ซึ่งคล้ายกับแผนผังที่แสดงในบทนำเกี่ยวกับการเชื่อมต่อหลายจุด

หากต้องการเริ่มใช้งานคอนเทนเนอร์ Coreapp ที่สาม ให้ใช้คำสั่งต่อไปนี้:

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

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

ขั้นตอนที่ 4: ดำเนินการตรวจสอบระบบครั้งที่สอง

ดำเนินการตรวจสอบระบบอีกครั้งเพื่อตรวจสอบยืนยันว่าโหนดทั้งหมดทำงานอย่างถูกต้องโดยใช้การเรียก API ไปยังโหนด health

เอาต์พุตผลลัพธ์ควรมีลักษณะดังต่อไปนี้:

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

คอนเทนเนอร์ Coreapp ใหม่ (ในตัวอย่างนี้ใช้ wacore3) จะทำหน้าที่เป็นคอนเทนเนอร์สำรอง แต่จะไม่เชื่อมต่อกับเซิร์ฟเวอร์ WhatsApp ในขณะนี้ หาก wacore1 หรือ wacore2 หยุดทำงาน wacore3 จะเชื่อมต่อกับเซิร์ฟเวอร์ WhatsApp เพื่อรักษาจำนวนการแบ่งข้อมูลทั้งหมดให้อยู่ที่ 2 รายการ

การอัพเกรดไคลเอ็นต์ WhatsApp Business API

ระบบจะหยุดทำงานในระหว่างกระบวนการอัพเกรด

ขอแนะนำเป็นอย่างยิ่งให้สำรองข้อมูลการตั้งค่าแอพพลิเคชั่นปัจจุบันของคุณก่อนอัพเกรดเพื่อให้มั่นใจว่าคุณจะกลับมาทำงานได้ตามปกติอย่างรวดเร็ว โปรดปฏิบัติตามเอกสารประกอบเกี่ยวกับการสำรองและกู้คืนข้อมูล

เราขอแนะนำให้อัพเกรดเป็นประจำในช่วงเวลาที่มีปริมาณงานน้อยที่สุด

ขั้นตอนที่ 1: เปลี่ยนแปลงตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION เป็นเวอร์ชั่นใหม่

ควรอัพเดตตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION เป็นหมายเลขเวอร์ชั่นใหม่โดยใช้:

export WA_API_VERSION=new-whatsapp-version

ขั้นตอนที่ 2: รีสตาร์ทคอนเทนเนอร์ Docker

รีสตาร์ทคอนเทนเนอร์ Docker โดยเรียกใช้:

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

สำหรับผู้ใช้ฐานข้อมูล MySQL ที่จะอัพเกรดเป็น v2.23.x ขึ้นไป

ตอนนี้คุณสามารถใช้บริการอัพเกรดฐานข้อมูลที่ทำให้คุณสามารถอัพเกรดฐานข้อมูลได้ขณะที่แอพพลิเคชั่นยังคงทำงานอยู่เพื่อหลีกเลี่ยงการหยุดทำงาน

ขั้นตอนที่ 1: ดาวน์โหลดไฟล์การกำหนดค่า

ไฟล์ dbupgrade-compose.yml มีช่องที่ระบุเวอร์ชั่นของคอนเทนเนอร์

ตัวอย่าง:

services:
  dbupgrade:
    image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}

ขั้นตอนที่ 2: เริ่มใช้งานคอนเทนเนอร์

หากต้องการอัพเกรดการติดตั้ง ให้เริ่มใช้งานคอนเทนเนอร์ dbupgrade-service โดยตั้งค่าตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION เป็นเวอร์ชั่นล่าสุด:

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

หมายเหตุ: หากคุณกำลังใช้กระบวนการปฏิบัติที่รีสตาร์ทคอนเทนเนอร์เมื่อออก โดยไม่ว่าจะใช้รหัสการออกใดก็ตาม ให้เริ่มต้นบริการโดยกำหนดตัวแปรสภาพแวดล้อมการใช้งาน EXIT_ON_SUCCESS เป็น FALSE เพื่อหลีกเลี่ยงการออกจากคอนเทนเนอร์เมื่อรหัสการออกเป็น 0

ขั้นตอนที่ 3: รอให้การอัพเกรดเสร็จสิ้น

หากการอัพเกรดฐานข้อมูลสำเร็จ คอนเทนเนอร์จะออกโดยใช้รหัส 0 คุณสามารถใช้คำสั่ง Docker ต่อไปนี้เพื่อติดตามสถานะได้:

docker wait your-database-upgrade-container-name

ขั้นตอนนี้จะส่งเอาต์พุตรหัสการออกของคอนเทนเนอร์ dbupgrade-service

ขั้นตอนที่ 4: รีสตาร์ทคอนเทนเนอร์ Coreapp และ Webapp

รีสตาร์ทคอนเทนเนอร์ Docker ของ Coreapp และ Webapp โดยกำหนดตัวแปรสภาพแวดล้อมการใช้งาน WA_API_VERSION เป็นเวอร์ชั่นล่าสุด:

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

การถอนการติดตั้งไคลเอ็นต์ WhatsApp Business API

ขอแนะนำเป็นอย่างยิ่งให้สำรองข้อมูลการตั้งค่าแอพพลิเคชั่นในปัจจุบันของคุณไว้ก่อนที่จะถอนการติดตั้ง โปรดปฏิบัติตามเอกสารประกอบเกี่ยวกับการสำรองและกู้คืนข้อมูล

หากคุณต้องการรีเซ็ตสภาพแวดล้อมการพัฒนาของคุณโดยการลบคอนเทนเนอร์ทั้งหมด ให้เรียกใช้คำสั่งต่อไปนี้จากไดเรกทอรีที่มีไฟล์ multiconnect-compose.yml:

docker-compose -f multiconnect-compose.yml down

เพื่อกำจัดปริมาณข้อมูลทั้งหมดที่กำหนดไว้ในไฟล์ multiconnect-compose.yml นอกเหนือจากคอนเทนเนอร์ ให้เรียก down ด้วยพารามิเตอร์ -v:

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

การแก้ไขปัญหา

หากต้องการเก็บบันทึกจากคอนเทนเนอร์ทั้งหมด ให้เรียกใช้คำสั่งต่อไปนี้

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

หากต้องการรวบรวมบันทึกของบริการใดบริการหนึ่งโดยเฉพาะ ให้ใส่ชื่อของบริการนั้นๆ (เช่น waweb, master1, wacore1) ต่อท้ายคำสั่ง docker-compose logs:

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

คุณสามารถหาบันทึกได้ในไฟล์ debug_output.txt ในไดเรกทอรีปัจจุบัน


ซอฟต์แวร์นี้จะใช้รหัสของ FFmpeg ซึ่งได้รับสิทธิ์การใช้งานภายใต้ LGPLv2.1 และคุณสามารถดาวน์โหลดแหล่งที่มาได้ที่นี่