Мы прекращаем поддержку локального API. Подробные сведения и информацию о том, как перейти на облачный API нового поколения, см. в документе Упразднение локального API.
В этом документе показано, как настроить кластер повышенной доступности в рабочей версии. В нем также описывается, как включить в кластере распределение нагрузки и какие изменения для этого требуются.
Если вы ещё этого не сделали, рекомендуется настроить экземпляр повышенной доступности или экземпляр с распределением нагрузки клиента WhatsApp Business API на устройстве разработчика, следуя инструкциям в статье Настройка рабочей версии: Повышенная доступность и распределение нагрузки чтобы протестировать настройку, прежде чем следовать этому документу, чтобы настроить клиент WhatsApp Business API в рабочей версии.
Прежде, чем начать любую из этих настроек, ознакомьтесь с требованиями.
Для настройки кластера повышенной доступности:
biz
для скриптов настройкиДля настройки кластера повышенной доступности с распределением нагрузки:
После того, как вы полностью настроите свой экземпляр, вы можете обновить его. Чтобы удалить клиент, выполните эти действия.
Если вы уже выполнили настройку разработчика и хотите использовать в рабочей версии тот же номер телефона, сначала обратитесь к Руководству по миграции прежде чем продолжить работу с остальной частью этого документа.
Содержание этого документа предназначено для новых установок с новым номером телефона.
Вам понадобятся:
Требуется либо MySQL 5.7.xx/8.0.xx, либо PostgreSQL 13.x/12.x/11.x.
Пароль базы данных не должен содержать следующие символы: ?{}&~!()^=
Если это требование не соблюдается, выполнить настройку, скорее всего, не удастся.
755
устанавливается как файловый режим на пути монтирования и всех его подкаталогах. mkdir your-local-media-volume-path mount -t nfs nfs_server_IP_addr:/shared_directory /your-local-media-volume-path
To install Docker Desktop on your developer machine:
The remaining steps are based on macOS and should be very similar for Linux or Windows 10.
To install Docker using macOS:
Docker Compose is a plugin that is bundled with Docker Desktop and should have installed automatically. For more information about using or Docker Compose, see Overview of Docker Compose. If for some reason Docker Compose was not installed, you can install it by following the instructions located at Install Docker Compose.
biz
для скриптов настройкиВыполните следующий код в каталоге, где будет установлен клиент WhatsApp Business API:
mkdir ~/biz; cd ~/biz;
Клонируйте файлы конфигурации prod-multiconnect-compose.yml
и db.env
из каталога Установкарепозитория GitHub WhatsApp-Business-API-Setup-Scripts в каталог ~/biz
, который вы создали на шаге 1.
Измените переменные среды базы данных в файле db.env
под каталогом ~/biz
, чтобы отразить вашу конфигурацию MySQL/PostgreSQL.
WA_DB_ENGINE=MYSQL | PGSQL WA_DB_HOSTNAME=your-database-server WA_DB_PORT=your-database-server-port WA_DB_USERNAME=your-database-username WA_DB_PASSWORD=your-database-password
Том локальных медиафайлов (по умолчанию whatsappMedia:/usr/local/wamedia
), определенный в файле prod-docker-compose.yml
, используется для хранения медиафайлов. По умолчанию этот том смонтирован в каталоге на устройстве с Docker. Кроме того, вы можете смонтировать том медиафайлов в каталоге хоста. Чтобы изменить точку монтирования тома медиа, измените определение тома в разделе services
от whatsappMedia
на путь к используемому вами хост-каталогу.
services: waweb: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia ... wacore: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia ... master: ... volumes: - /your-local-media-volume-path:/usr/local/wamedia
Для запуска клиента WhatsApp Business API с одним контейнером Webapp, двумя основными контейнерами и двумя контейнерами Coreapp, схожими с диаграммой введения повышенной доступности, используйте следующие команды с изменениями, необходимыми для вашей среды (т. е. имена хостов, имена пользователей хостов и локальные пути):
# copy configuration scripts to each Webapp host, ssh to each Webapp host, execute scripts to install Webapp on the host for host in your-webapp-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd waweb done # copy configuration scripts to each Master host, ssh to each Master host, execute scripts to install Master on the host for host in your-master1-hostname your-master2-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd master done # copy configuration scripts to each Coreapp host, ssh to each Coreapp host, execute scripts to install Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
В целом, вышеперечисленные команды:
prod-multiconnect-compose.yml
и db.env
на все хосты Webapp (your-webapp-hostname
в данном примере) и запустят службу waweb
на этих хостах;prod-multiconnect-compose.yml
и db.env
на все основные хосты (your-master1-hostname
и your-master2-hostname
в данном примере) и запустят службу основного контейнера на этих хостах;prod-multiconnect-compose.yml
и db.env
на все хосты Coreapp (your-coreapp1-hostname
и your-coreapp2-hostname
в данном примере) и запустят службу wacore
на этих хостах.Вы можете проверить, что все контейнеры имеют статус ВЫПОЛНЯЕТСЯ, выполнив:
EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f prod-multiconnect-compose.yml ps
Если вы не хотите использовать командную строку для работы с WhatsApp Business API, скачайте и настройте нашу коллекцию Postman.
Проверить работоспособность клиента WhatsApp Business API можно с помощью вызова API к узлу health
.
Ответ должен выглядеть так:
{ "health": { "your-master1-hostname:85cdd51506fd": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "unregistered", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] }, "your-coreapp2-hostname:75d7355eaaaa": { "errors": [ { "code": 1011, "title": "Service not ready", "details": "Wacore is not instantiated. Please check wacore log for details." } ] } } } 200
В ответе gateway_status
имеет значение unregistered
, так как клиент WhatsApp Business API ещё не зарегистрирован.
Зарегистрировать клиент WhatsApp Business API можно с помощью вызова API к узлу account
.
После регистрации ещё раз проверьте работоспособность клиента WhatsApp Business API с помощью вызова API к узлу health
и убедитесь в том, что один из контейнеров Coreapp имеет gateway_status
со значением connected
.
Ответ должен выглядеть так:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "disconnected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "disconnected", "role": "coreapp" } } } 200
Примечание: В режиме повышенной доступности к серверу WhatsApp будет подключен только один хост Coreapp (your-coreapp1-hostname:753efb1cf72c
в данном примере), а все другие узлы, включая главный основной, будут иметь статус gateway_status
как disconnected
. Если your-coreapp1-hostname:753efb1cf72c
выйдет из строя, your-coreapp2-hostname:75d7355eaaaa
заменит его и подключится к серверу WhatsApp для сохранения повышенной доступности.
Рекомендуется настроить отслеживание для рабочей версии вашего клиента WhatsApp Business API.
Теперь клиент WhatsApp Business API настроен в режиме повышенной доступности. В этом режиме подключаться к серверу WhatsApp для отправки сообщений может только один узел Coreapp. Если вам нужно отправлять много сообщений с нескольких узлов Coreapp одновременно, настройте распределение нагрузки, как описано ниже.
С помощью конечной точки сегментов настройте два сегмента. В ответе HTTP должен быть указан статус 201 Created
.
Проверить работоспособность клиента WhatsApp Business API можно с помощью вызова API к health
узлу для удостоверения, что все узлы работают правильно.
Ответ должен выглядеть так:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "connected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "connected", "role": "coreapp" } } } 200
Примечание. В режиме распределения нагрузки с использованием двух сегментов к серверу WhatsApp будут подключены два узла Coreapp (в данном примере — your-coreapp1-hostname:753efb1cf72c
и your-coreapp2-hostname:75d7355eaaaa
) и главный основной узел (в данном примере — your-master2-hostname:8dd3f5bea27d
) также подключится к серверу.
На этом этапе у вас есть два контейнера Coreapp, несущие одинаковую нагрузку по обработке сообщений. Однако если один из контейнеров выйдет из строя, половина сообщений не будет доставлена. Чтобы поддерживать повышенную доступность в этой новой настройке распределения нагрузки, вы можете запустить третий контейнер Coreapp на новом хосте Coreapp (
your-coreapp3-hostname
в этом примере) допустить 1 сбой Coreapp, что похоже на диаграмму, показанную на Распределение нагрузки: введение.
Чтобы запустить третий контейнер Coreapp, выполните следующую команду:
# copy configuration scripts to the 3rd Coreapp host, ssh to the Coreapp host, execute scripts to install Coreapp on the host for host in your-coreapp3-hostname; do scp db.env prod-multiconnect-compose.yml username@$host:/local/path/ cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
Ещё раз проверьте работоспособность всех узлов с помощью вызова API к узлу health
.
Ответ должен выглядеть так:
{ "health": { "your-master1-hostname:85cdd51506fd": { "gateway_status": "disconnected", "role": "secondary_master" }, "your-master2-hostname:8dd3f5bea27d": { "gateway_status": "disconnected", "role": "primary_master" }, "your-coreapp1-hostname:753efb1cf72c": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp2-hostname:75d7355eaaaa": { "gateway_status": "connected", "role": "coreapp" }, "your-coreapp3-hostname:23b50199bec2": { "gateway_status": "disconnected", "role": "coreapp" } } } 200
На этом этапе новый контейнер Coreapp (в данном примере — your-coreapp3-hostname
:23b50199bec2
) действует как независимый контейнер, но не подключен к серверу WhatsApp. Если один из двух других контейнеров перестанет работать, третий подключится к серверу WhatsApp, и общее количество сегментов останется равным двум.
Для отправки 100–150 сообщений в секунду рекомендуется настроить не менее двух контейнеров Webapps. Чтобы использовать их в режиме повышенной доступности, запустите их на более, чем двух хостах с применением балансировщика нагрузки (например, HAProxy, Nginx или ELB). Для доступа к конечным точкам клиента WhatsApp Business API используйте не https://your-webapp-hostname:your-webapp-port/
, а https://your-load-balancer-name:your-load-balancer-port/
.
Рекомендуется использовать три основных контейнера на разных хостах. Нет причин иметь более 3 основных контейнеров в рабочей версии, независимо от того, сколько у вас сегментов. Нагрузка на основные контейнеры невелика, поэтому их можно разместить на одном хосте с контейнерами Coreapp.
Для обеспечения оптимальной работоспособности клиента рекомендуется использовать shard_number + X
контейнеров Coreapp на разных хостах. Здесь X
— количество потенциальных отказов хостов.
Во время обновления будьте готовы к простою.
Перед обновлением настоятельно рекомендуем создать резервную копию текущих настроек приложения, чтобы их можно было быстро восстановить. Следуйте инструкциям из статьи Резервное копирование и восстановление настроек.
Все обновления рекомендуется выполнять в периоды наименьшей активности.
В переменной среды WA_API_VERSION
нужно указать новую версию. Выполните следующие команды с изменениями, необходимыми для вашей среды (т. е. имена хостов, имена пользователей хостов и локальные пути):
# ssh to each Webapp host, execute scripts with new WA_API_VERSION to upgrade Webapp on the host for host in your-webapp-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd waweb done # ssh to each Master host, execute scripts with new WA_API_VERSION to upgrade Master on the host for host in your-master1-hostname your-master2-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd master done # ssh to each Coreapp host, execute scripts with new WA_API_VERSION to upgrade Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname your-coreapp3-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.x docker-compose -f /local/path/prod-multiconnect-compose.yml up -d" ssh username@$host $cmd wacore done
2.23.x
и вышеВы можете воспользоваться сервисом обновления базы данных без остановки приложения.
В файле dbupgrade-compose.yml есть поля, в которых указана версия контейнера.
Пример:
services: dbupgrade: image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}
Чтобы обновить установленную базу данных, запустите контейнер dbupgrade-service, указав в значении переменной среды WA_API_VERSION
последнюю версию базы:
EXTERNAL_HOSTNAME=$host_to_upgradedb WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
Примечание. Если вы используете механизм управления, который при завершении работы всегда перезапускает контейнер, до запуска сервиса задайте для переменной среды EXIT_ON_SUCCESS
значение FALSE
. Это поможет избежать завершения работы контейнера с выходным кодом 0
.
Если оно будет успешным, контейнер завершит работу с выходным кодом 0
. Отслеживать статус можно с помощью следующей команды Docker:
docker wait your-database-upgrade-container-name
Она показывает выходной код контейнера dbupgrade-service.
Перезапустите контейнеры Docker Coreapp и Webapp, указав последнюю версию в переменной среды WA_API_VERSION
:
EXTERNAL_HOSTNAME=$host_to_upgradedb WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d
2.29.3
и вышеЕсли вы обновляете с v2.29.1
, v2.29.2
или столкнулись с проблемами при обновлении до этих версий и были вынуждены выполнить откат для стабильности, мы рекомендуем вам выполнить обновление до v2.29.3
, затем выполните следующую команду в контейнере Webapp Docker:
chown -R root your-media-directory/incoming your-media-directory/outgoing your-media-directory/shared
Если вы не изменили его, каталогом медиа по умолчанию будет /usr/local/wamedia
.
Примечание.
v2.29.1
и v2.29.2
.Если вам нужно сбросить среду разработки, удалив все контейнеры, используйте следующие команды с изменениями, необходимыми для вашей среды (т. е. имена хостов, имена пользователей хостов и локальные пути):
# ssh to each Webapp host, execute scripts to uninstall Webapp on the host for host in your-webapp-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd waweb done # ssh to each Master host, execute scripts to uninstall Master on the host for host in your-master1-hostname your-master2-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd master done # ssh to each Coreapp host, execute scripts to uninstall Coreapp on the host for host in your-coreapp1-hostname your-coreapp2-hostname your-coreapp3-hostname; do cmd="EXTERNAL_HOSTNAME=$host WA_API_VERSION=2.23.4 docker-compose -f /local/path/prod-docker-compose.yml down" ssh username@$host $cmd wacore done
Чтобы собрать журналы всех контейнеров на определенном хосте, выполните следующую команду:
EXTERNAL_HOSTNAME=$host_to_collect_logs docker-compose -f /local/path/prod-multiconnect-compose.yml logs > debug_output.txt
Чтобы собрать журналы определенной службы, укажите ее название (например, waweb
, master1
или wacore1
) в команде docker-compose logs
.
EXTERNAL_HOSTNAME=$host_to_collect_logs docker-compose -f /local/path/prod-multiconnect-compose.yml logs waweb > debug_output.txt
Журналы событий можно найти в файле debug_output.txt
, который находится в текущем каталоге.
В этом программном обеспечении используется исходный код из набора библиотек FFmpeg, предоставляемый по лицензии LGPLv2.1. Скачать его можно здесь.