Управление данными и базами данных

В этом документе рассматриваются вопросы управления различными типами данных и баз данных, связанными с клиентом WhatsApp Business API.

Тома

Тома — это предпочтительный механизм постоянного хранения данных, генерируемых и используемых контейнерами Docker. Клиенту API WhatsApp Business необходим один том Docker для медиафайлов. Этот том создается автоматически при выполнении команд docker-compose на этапе установки.

Тома Docker могут храниться на удаленных хостах или в облачных службах. Том для медиафайлов можно создать на базе любого из существующих решений для совместного доступа к файлам через центр обработки данных. Все контейнеры Webapp и Coreapp должны иметь к этому тому доступ с правами чтения и записи. Просмотреть или изменить путь к тому можно в файле docker-compose.yml.

ИмяОписание

Том Media

  • Служит для хранения входящих и исходящих медиафайлов.
  • По умолчанию монтируется в контейнерах по пути /usr/local/wamedia/.

Переменные среды

Клиент WhatsApp Business API может использовать MySQL или PostgreSQL.

Для настройки параметров базы данных можно задать в файле db.env при установке клиента WhatsApp Business API перечисленные далее переменные среды. Контейнеры Coreapp и Webapp используют эти переменные при подключении к базе данных.

Настройка базы данных Переменная среды

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. Задав для этой переменной значение в миллисекундах при запуске Coreapp, можно установить тайм-аут бездействия базы данных MySQL. Сервер MySQL будет закрывать все подключения к базе данных, для которых активность в течение заданного периода отсутствует.

Управление базами данных

Рекомендации по управлению базой данных, связанной с клиентом WhatsApp Business API.

ПроблемаРекомендации

Обновление при большой базе данных

Большими считаются базы данных, таблица messages в которых содержит более 2 млн строк.
Ниже описано, как использовать конечную точку /services/message/gc, чтобы обеспечить стабильность базы данных при обновлении.

Сбор мусора на основе вызовов API

  • Если использовать этот вариант, то очистка базы данных будет зависеть от интеграции, поэтому в большинстве случаев мы его не рекомендуем.
  • Рекомендации на случай, если ваша компания использует WhatsApp Business API для сбора мусора в базе данных:
    • перед запросом к API помечайте входящие сообщения как прочитанные, чтобы очистка была интенсивнее;
    • используйте конечную точку /services/message/gc один раз каждые 24 часа во время простоя (то есть при низких объемах исходящих сообщений);
    • если в таблице messages более 10 млн строк, иногда нужно выполнять по несколько запросов к API, чтобы уведомления об обратных вызовах возвращались без ошибок.

Подробнее см. в документации по узлу Services.

Ротация журналов

В контейнеры Coreapp и Webapp включен скрипт ротации журналов.

Webapp

Скрипт ротации журналов в контейнере Webapp:

  • использует утилиту logrotate;
  • сохраняет последние 30 файлов с журналами веб-операций, доступа и ошибок;
  • производит ротацию, только если размер журналов превышает 20 МБ;
  • сжимает файлы журналов при ротации;
  • архивирует старые файлы журналов в папке /var/log/whatsapp/archive.

Coreapp

Скрипт ротации журналов в контейнере Coreapp:

  • использует скрипт собственной разработки;
  • сохраняет последние 30 файлов;
  • производит ротацию автоматически, если размер журналов превышает 15 МБ;
  • сжимает файлы журналов при ротации;
  • архивирует старые файлы журналов в папке /var/log/whatsapp/archive.

В Coreapp новый файл журнала создается только тогда, когда размер существующего файла превышает 15 МБ. Старые файлы не удаляются автоматически.

Рекомендации по использованию скрипта очистки

Рекомендуется регулярно (например, ежедневно) запускать указанный ниже скрипт очистки для ротации журналов во всех контейнерах Webapp, Coreapp и основных контейнерах (в конфигурации с распределением нагрузки). Лучше всего настроить на хосте задание cron, которое будет выполняться во всех контейнерах WhatsApp Business API в периоды низкой нагрузки. Это необходимо, чтобы файлы журнала не занимали слишком много места на диске.

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