管理資料和資料庫

本文件將講解如何管理與 WhatsApp Business API 用戶端關聯的各種不同類型資料和資料庫。

磁碟區

處理由 Docker 容器產生及使用的持續性資料時,磁碟區是首選的機制。WhatsApp Business API 用戶端必須要有一個 Docker 媒體磁碟區。在安裝期間運行 docker-compose 指令時,系統會自動建立此磁碟區。

Docker 磁碟區支援在遙距主機或雲端供應商上儲存磁碟區。您可以在任何現有資料中心檔案共用解決方案中設定媒體磁碟區。請確保所有網頁應用程式和核心應用程式容器均擁有此磁碟區的讀取/寫入權限。如要查看或編輯此磁碟區路徑,請編輯 docker-compose.yml 檔案。

名稱說明

媒體磁碟區

  • 儲存所接收和傳送的媒體檔案
  • 在預設情況下,在容器內部的 /usr/local/wamedia/ 連接

環境變數

WhatsApp Business API 用戶端可以使用 MySQL 或 PostgreSQL 來儲存資料。

安裝 WhatsApp Business API 用戶端時,您可以在 db.env 檔案中設定以下環境變數,以配置資料庫設定。核心應用程式和網頁應用程式會在連接至資料庫時使用這些環境變數。

資料庫設定 環境變數

database_engine

WA_DB_ENGINE

hostname

WA_DB_HOSTNAME

port

WA_DB_PORT

username

WA_DB_USERNAME

password

WA_DB_PASSWORD

database_name_prefix

WA_DB_NAME_PREFIX

connection_idle_timeout

WA_DB_CONNECTION_IDLE_TIMEOUT

  • WA_DB_NAME_PREFIX — 可在安裝 WhatsApp Business API 用戶端時用於為建立的所有資料庫加上前綴。您可以使用這個變數,在同一個資料庫主機中運行多組 WhatsApp Business API 資料庫。
  • WA_DB_CONNECTION_IDLE_TIMEOUT(僅由 MySQL 支援)— 您可在啟動核心應用程式時設定此環境變數(以毫秒作為單位),從而為您的 MySQL 資料庫設定閒置逾時時限。之後,MySQL 伺服器便會關閉任何閒置了設定時長的資料庫連接。

資料庫管理

以下建議可用於管理與 WhatsApp Business API 用戶端關聯的資料庫。

需要建議

大型資料庫升級

大型資料庫即 messages 表中包含超過 2 百萬列資料的資料庫。
如果在升級過程中使用 /services/message/gc 端點,則可參考以下建議,來維持資料庫的穩定性。

基於 API 呼叫的垃圾回收

  • 讓資料庫清理依賴於整合,大多數企業最好避免使用此功能。
  • 建議使用 WhatsApp Business API 的企業執行資料庫垃圾回收:
    • 在提出 API 要求之前將所接收訊息標記為已讀,以啟用積極清理。
    • 我們建議在停機(即傳送訊息量較低)期間每 24 小時使用一次 /services/message/gc 端點
    • 如果 messages 表包含超過 1 千萬列資料,您可能需要多次執行 API 要求,以確保回呼通知傳回時不會發生錯誤。

詳情請參閱「服務」文件。

記錄輪替

記錄輪替指令碼位於核心應用程式和網頁應用程式容器內部。

網頁應用程式

網頁應用程式容器內的記錄輪替指令碼:

  • 使用記錄輪替功能
  • 可保存最新的 30 個網站、存取權和錯誤記錄檔案
  • 只會在記錄大小超過 20MB,系統才會執行記錄輪替
  • 壓縮已輪替的記錄檔案
  • 將舊記錄檔案封存至 /var/log/whatsapp/archive

核心應用程式

核心應用程式容器內的記錄輪替指令碼:

  • 使用內部指令碼
  • 可保存最新的 30 個檔案
  • 如果記錄大小超過 15MB,系統就會自動執行輪替
  • 壓縮已輪替的記錄檔案
  • 將舊記錄檔案封存至 /var/log/whatsapp/archive

在核心應用程式中,系統只會在每個記錄檔案大小超過 15MB 時,才會建立新的記錄檔案。舊記錄檔案無法自動移除。

清除指令碼推薦方式

建議您定期(如每日)運行以下清除指令碼,為所有網頁應用程式、核心應用程式和主節點(在多點連線設定的情況下)容器執行記錄輪替。我們建議您在主機配置一個 Cronjob,於所有正在運行的 WhatsApp Business API 容器和非高峰時段執行。定期觸發清除指令碼可讓您管理記錄檔案所佔用的磁碟空間。

docker exec your-container-name /opt/whatsapp/bin/cleanup.sh