管理資料和資料庫

本文件旨在探討如何管理各種與 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 資料表中有超過 200 萬資料列的資料庫,即視為大型資料庫。
請使用以下建議作法,在升級期間使用 /services/message/gc 端點,以維持資料庫穩定性。

API 呼叫型的記憶體回收

  • 這會使得資料庫清理取決於整合,大多數企業最好避免這種情況。
  • 建議使用 WhatsApp Business API 的企業執行資料庫記憶體回收:
    • 在發出 API 要求之前,將傳入訊息標記為已讀,以啟用主動清理。
    • 建議在停機期間(即傳出訊息量低時)每 24 小時使用一次 /services/message/gc 端點
    • messages 資料表中的資料列超過 1000 萬個,您可能需要執行多次 API 要求,以確保回呼通知傳回時沒有錯誤。

如需詳細資訊,請參閱服務文件。

記錄檔輪替

記錄檔輪替指令碼已封裝在核心應用程式和網路應用程式內。

網路應用程式

網路應用程式容器中的記錄檔輪替指令碼:

  • 使用 logrotate 公用程式
  • 保留最新的 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