管理数据和数据库

本文档介绍如何管理与 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 端点
    • 对于行数超过 1,000 万的 messages 表,可能需要多次运行 API 请求,才能确保无错返回回调通知。

请参阅服务文档,了解更多信息。

日志轮转

日志轮转脚本在核心应用和网页应用容器内打包。

网页应用

网页应用容器内的日志轮转脚本:

  • 使用 logrotate 实用程序
  • 保存最近的 30 份网页、访问和错误日志文件
  • 只有在日志大小超过 20MB 时才进行日志轮转
  • 压缩轮转的日志文件
  • 将旧日志文件归档至 /var/log/whatsapp/archive

核心应用

核心应用容器内的日志轮转脚本:

  • 使用内部脚本
  • 保存最近的 30 份文件
  • 如果日志大小超过 15MB,系统会自动进行轮转
  • 压缩轮转的日志文件
  • 将旧日志文件归档至 /var/log/whatsapp/archive

在核心应用中,只有在日志文件大小超过 15MB 时,系统才会创建新的日志文件。旧版日志文件无法自动移除。

清理脚本建议

建议定期(如每日)运行如下清理脚本,以便在所有网页应用、核心应用和主(前提是使用多连接设置)容器上执行日志轮转。最好在主机上配置一个计划任务,以便在所有正运行的 WhatsApp Business API 容器上以及在非高峰时段执行操作。通过定期调用清理脚本,可以掌控日志文件所占用的磁盘空间。

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