本番セットアップ: 単一インスタンス

このドキュメントでは、本番環境でWhatsApp Business APIクライアントの単一インスタンスを設定する方法を示します。

開発者マシンでWhatsApp Business APIクライアントの単一インスタンスを設定していない場合は、「開発者セットアップ: 単一インスタンス」の手順に沿ってインスタンスを設定し、セットアップをテストしたうえで、このドキュメントに従って本番環境でWhatsApp Business APIクライアントを設定することをおすすめします。

開始する前に

開発者セットアップをすでに実行済みで、本番環境で同じ電話番号を再利用する場合は、このガイドの続きに進む前にマイグレーションガイドを参照してください。

このドキュメントの内容は、新しい電話番号を使用するフレッシュインストールを前提としています。

以下が必要です。

MySQL 5.7.xxまたはPostgreSQL 10.6/9.6.x/9.5.xが必要です。

データベースのパスワードには?{}&~!()^=のいずれの文字も使用できません。

これらのいずれかの文字を使用すると、設定が失敗する可能性があります。

また、MySQL 8との既知の互換性の問題もあります。現時点では、最新バージョンの使用は避けてください。現在修正に取り組んでおります。

WhatsApp Business APIクライアントの初回セットアップ

ステップ1: 設定スクリプトを格納するbizディレクトリを作成する

WhatsApp Business APIクライアント用に選択した場所で次のコマンドを実行します。

mkdir ~/biz; cd ~/biz;

ステップ2: WhatsApp Business APIクライアントの構成ファイルを取得する

WhatsApp-Business-API-Setup-Scripts GithubリポジトリInstallationディレクトリにあるprod-docker-compose.ymlおよびdb.env構成ファイルのクローンを、ステップ1で作成した~/bizディレクトリに作成します。

ステップ3: WA_API_VERSION環境変数を設定する

次のコマンドを使用して、WA_API_VERSION環境変数を現在のバージョンに設定します。

export WA_API_VERSION=current-whatsapp-version

ステップ4: データベース環境変数を設定する

~/bizディレクトリにあるdb.envファイル内のデータベース環境変数を変更して、使用している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

ステップ5: ローカルメディアボリュームを設定する

prod-docker-compose.ymlファイルで定義されているローカルメディアボリューム(デフォルトではwhatsappMedia:/usr/local/wamedia)は、メディアファイルを格納するために使用されます。デフォルトでは、このボリュームはDockerマシンのディレクトリにマウントされます。代わりに、メディアボリュームをホストディレクトリにマウントすることを選択できます。メディアボリュームのマウントポイントを変更するには、servicesセクション内のボリューム定義を、whatsappMediaから使用しているホストディレクトリのパスに変更します。

services:
  wacore:
    ...
    volumes:
      - /your-local-media-volume-path:/usr/local/wamedia
    ...          
  waweb:
    ...
    volumes:
      - /your-local-media-volume-path:/usr/local/wamedia
    ... 

ステップ6: WhatsApp Business APIクライアントを起動する

1つのWebappコンテナと1つのCoreappコンテナでWhatsApp Business APIクライアントを起動するには、次のコマンドを実行します。

docker-compose -f prod-docker-compose.yml up -d

結果の出力は次のようになります。

Creating biz_wacore_1 ... done
Creating biz_waweb_1  ... done

ステップ7: コンテナが実行されていることを確認する

次のコマンドを実行して、すべてのコンテナの状態がUPであることを確認します。

docker-compose -f prod-docker-compose.yml  ps

結果の出力は次のようになります。

     Name                    Command               State                   Ports
-------------------------------------------------------------------------------------------------
biz_wacore_1   /opt/whatsapp/bin/wait_on_ ...   Up      6250/tcp, 6251/tcp, 6252/tcp, 6253/tcp
biz_waweb_1    /opt/whatsapp/bin/wait_on_ ...   Up      0.0.0.0:9090->443/tcp

デフォルトでは、Webappコンテナはポート9090で実行されます。

ステップ8: ヘルスチェックを実行する

FacebookのPostmanコレクションをダウンロードして構成すると、コマンドラインを使用せずにWhatsApp Business APIを操作できます。

WhatsApp Business APIクライアントにヘルスチェックを実行するには、healthノードへのAPI呼び出しを使用します。

結果の出力は次のようになります。

{
    "health": {
        "gateway_status": "unregistered"
    }
}

WhatsApp Business APIクライアントがまだ登録されていないので、応答にはgateway_statusとしてunregisteredgateway_statusが表示されます。

ステップ9: WhatsApp Business APIクライアントを登録する

WhatsApp Business APIクライアントを登録するには、accountノードに対するAPI呼び出しを使用します。

ステップ10: ヘルスチェックをもう一度実行する

登録の完了後、healthノードへのAPI呼び出しを使用して、WhatsApp Business APIクライアントにもう一度ヘルスチェックを実行します。

結果の出力は次のようになります。

{
    "health": {
        "gateway_status": "connected"
    }
}

gateway_statusconnectedの場合は、Coreappコンテナが連絡先チェックメッセージ送信のためにWhatsAppサーバーに接続可能であることを意味しています。

本番環境のWhatsApp Business APIクライアントのモニタリングを設定することをおすすめします。

WhatsApp Business APIクライアントのアップグレード

アップグレード処理中はダウンタイムが発生します。

アップグレードする前に、現在のアプリの設定をバックアップして、すぐに復旧して実行できるようにすることを強くおすすめします。「バックアップと復元」のドキュメントをご覧ください。

アップグレードは常に最も忙しくない時間帯に実行することをおすすめします。

ステップ1: WA_API_VERSION環境変数を新規バージョンに変更する

次のコマンドを使用して、WA_API_VERSION環境変数を新しいバージョン番号に更新します。

export WA_API_VERSION=new-whatsapp-version

ステップ2: Dockerコンテナを再起動する

次のコマンドを実行して、Dockerコンテナを再起動します。

docker-compose -f prod-docker-compose.yml up -d

MySQLデータベースユーザーがv2.23.x以上にアップグレードする場合

ダウンタイムを回避するため、アプリの実行中にデータベースをアップグレードできるデータベースアップグレードサービスが利用可能になりました。

ステップ1: 構成ファイルをダウンロードする

dbupgrade-compose.ymlファイルには、コンテナのバージョンを示すフィールドがあります。

例:

services:
  dbupgrade:
    image: docker.whatsapp.biz/coreapp:v${WA_API_VERSION:-2.21.3}

ステップ2: コンテナを起動する

インストール環境をアップグレードするには、次のようにWA_API_VERSION環境変数を最新バージョンに設定して、dbupgrade-serviceコンテナを起動します。

WA_API_VERSION=new-whatsapp-version docker-compose -f dbupgrade-compose.yml up -d

注: 終了時に終了コードにかかわらずコンテナを再起動するオーケストレーションを使用している場合は、EXIT_ON_SUCCESS環境変数をFALSEに設定してサービスを開始し、終了コードが0のときにコンテナが終了しないようにします。

ステップ3: アップグレードが完了するまで待機する

データベースのアップグレードが成功すると、コンテナはコード0で終了します。次のDockerコマンドを使用して、ステータスをトラッキングできます。

docker wait your-database-upgrade-container-name

このコマンドにより、dbupgrade-serviceコンテナの終了コードが出力されます。

ステップ4: CoreappコンテナとWebappコンテナを再起動する

次のようにWA_API_VERSION環境変数を最新バージョンに設定して、CoreappとWebappのDockerコンテナを再起動します。

WA_API_VERSION=new-whatsapp-version docker-compose -f prod-docker-compose.yml up -d

WhatsApp Business APIクライアントユーザーがバージョン2.29.3以上にアップグレードする場合

v2.29.1v2.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における後方互換性の問題を修正するための、1回限りのアップグレードパスです。

WhatsApp Business APIクライアントのアンインストール

アンインストールする前に、現在のアプリの設定をバックアップすることを強くおすすめします。「バックアップと復元」のドキュメントをご覧ください。

すべてのコンテナを削除して開発環境をリセットする必要がある場合は、prod-docker-compose.ymlファイルを配置したディレクトリから次のコマンドを実行します。

docker-compose -f prod-docker-compose.yml down

結果の出力は次のようになります。

Stopping biz_waweb_1  ... done
Stopping biz_wacore_1 ... done
Removing biz_waweb_1  ... done
Removing biz_wacore_1 ... done

コンテナに加え、prod-docker-compose.ymlファイルで定義されているすべてのボリュームも削除する場合は、-vパラメーターを指定してdownコマンドを実行します。

docker-compose -f prod-docker-compose.yml down -v

トラブルシューティング

より効果的なトラブルシューティングを行うには、WADebugの使用をおすすめします。WADebugは、WhatsApp Business APIセットアップの潜在的な問題を検出し、より効率的にWhatsAppサポートにヘルプをリクエストできるようにするコマンドラインツールです。

WADebugを使用できない場合、または実行するとエラーが返される場合は、次のコマンドを実行してすべてのコンテナのログを収集してください。

docker-compose -f prod-docker-compose.yml logs > debug_output.txt

特定のサービスのログを収集するには、次のように、サービス名(wawebまたはwacore)をdocker-compose logsコマンドの末尾に追加します。

docker-compose -f prod-docker-compose.yml logs waweb > debug_output.txt

ログは、現在のディレクトリのdebug_output.txtファイルに作成されます。


このソフトウェアでは、LGPLv2.1でライセンス付与されているFFmpegのコードを使用しています。ソースはこちらからダウンロードできます。