この記事では、Botpressサーバーを簡単に構築する方法として、Amazon Lightsailの「コンテナサービス」を利用した方法を紹介します。
★2021/11/7更新★
記事の初稿よりも実用的なサーバーになるように、大幅に加筆修正しました。データベースサーバーを起動して接続するようにしたほか、コンテナの最小プランも見直しています。
コンテナサービスとは
Botpressは、自分のPCで動かせるチャットボット開発ツールです。しかし、作成したチャットボットを他の人に使ってもらうには、サーバーマシンにBotpressをインストールする必要があります。
このサーバー構築方法の一例として、以前に私がQiitaに書いた記事があります。この記事では、安価なVPSであるAmazon Lightsailにインストールする手順を紹介しました。ただし、手順としてはあまり簡単なものではありませんでした。
一方、Amazon Lightsailには、通常のVPSサービスの他に「コンテナサービス」があります。コンテナサービスとは、「Dockerイメージ」と呼ばれる形式でパッケージ化されたソフトウェアを動かせるサービスです。このサービスを利用すると、Linuxのシェルを利用したセットアップ作業を行う必要がなく、LightsailのWebサイト上だけでインストールが完結するため、簡単にサーバーを作れます。
この記事では、Botpressが公式に提供しているDockerイメージを利用して、Lightsailでサーバーを構築する手順を紹介します。
VPSとの比較
コンテナサービスを利用する方法は、上記のQiita記事で紹介しているVPSプランと比較して、以下のメリット・デメリットがあります。
メリット
- シェルにコマンドを打ったり、設定ファイルを編集する作業がない
- OSやミドルウェアなど、Botpress以外のソフトウェアの管理が不要
- 構築手順が簡単なので、Botpressを新しいバージョンへ更新しやすい
デメリット
- 最小コストが月30ドル(約3400円)になる ※コンテナ15ドル+データベース15ドル
- 本番利用には言語サーバーを別途立てる必要がある(言語サーバーもコンテナで立てるなら、100dimモデルで月40ドル、300dimモデルで月80ドルが別途でかかる)
構築の流れ
構築は以下の3ステップに分かれます。
- Step1. コンテナのデプロイ1回目
- Step2. データベースサーバーの起動
- Step3. コンテナのデプロイ2回目
Step1は、サーバーのURLを作るステップです。Botpressを正しく設定するにはサーバーのURLが必要ですが、コンテナを一度起動させないと作成されないためです。
Step2は、コンテナとは別にデータベースサーバーを用意するステップです。コンテナは、再起動するとディスクが初期化されてしまうため、データを永続化する場所が必要です。
Step3は、Step1で得たサーバーのURLと、Step2で得たデータベースURLを利用して、Botpressの設定を変更するステップです。
Step1. コンテナのデプロイ1回目
まず、Amazon Lightsailにログインして、ホーム画面を開きます。(アカウントをお持ちでないかたは新規登録してください)
ホーム画面を開いたら、メニュータブから「コンテナ」ページを開き、「コンテナサービスを作成」ボタンを押します。
「コンテナサービスを作成」のページが表示されたら、少し下の方にスクロールします。
「コンテナサービスの容量を選択」というセクションでは、パワーは「Small (Sm)」プラン、規模は「1」を選択します。※これは、Botpressを正常に作動させるための最低のプランです。本番サーバーとして利用する場合は、もっと上位のプランにする必要があるかもしれません。
「最初のデプロイを作成」というセクションでは、「デプロイのセットアップ」というリンクを押します。すると、デプロイに関する設定フォームが展開されます。
デプロイに関する設定フォームでは、「カスタムデプロイを設定」を選び、以下の項目を入力します。
【コンテナ名】
任意の名前で結構です。例えば、botpress
、botpress-server
など。
【イメージ】
DockerHubというサイトに登録されているDockerイメージの名前を入力します。例えば、Botpress v12.26.5は botpress/server:v12_26_5
となります。また、 botpress/server:latest
とすると「最新版」を指定できます。
※最新版が適切かどうか判断がつかない場合は、手元のPC上で動作確認したバージョンを使うことをおすすめします
入力が終わったら「開いているポートを追加」をクリックします。
「ポートを開く」というセクションにある「ポート」欄には 3000
と入力します。
また、「パブリックエンドポイント」というセクションのプルダウンでは、先ほど入力した「コンテナ名」(この記事の例では botpress
)を選択します。
最後に「サービスを指定」というセクションでは、任意のコンテナサービス名を入力します。これは、できあがるBotpressサーバーのデフォルトURLに含まれる文字になるため、公開されても問題ない名前にしてください。(例では bp
)
全ての入力が完了したら、ページ末尾の「コンテナサービスを作成」ボタンを押します。
作成を開始したら、完了するまで数分間かかります。完了したかどうかは、右上の「ステータス」欄で分かります。完了を待っている間、ステップ2を進めても問題ありません。
完了したら「パブリックドメイン」という項目のリンクをクリックすると、Botpressの管理者アカウント登録ページが開きます。
下記の管理者アカウント登録ページが表示されたら、コンテナの起動に成功しています。(管理者アカウントの作成は、ここでは行いません。いま作成してもあとで消えてしまうためです)
Step2. データベースサーバーの起動
次に、データベースサーバーを起動します。Lightsailのホーム画面に戻り、メニュータブから「データベース」ページを開き、「データベースを作成」ボタンを押します。
「データベースを作成します」のページを開いたら、データベースの種類として「PostgreSQL」を選択します。バージョンは最新のままで構いません。(Botpressの要件は9.5以上です)
次に「ログイン認証情報の指定」をクリックします。
ログイン認証情報のうち、ユーザー名は、ここではデフォルトのままとします。(もちろん、セキュリティのため任意の名前に変更しても構いません)
パスワードは、「強力なパスワードを自動生成」というチェックボックスのチェックを外し、自分で用意したパスワードを入力します。パスワードは、大文字・小文字・数字を含む、16文字以上の十分長いものにしてください。ただし、記号は含めないでください。
記号を含めると、あとでBotpressに設定するときに支障があるためです。パスワードを自動生成にせずに設定するのは、記号を含めないことが目的です。
パスワードを設定し終えたら、「マスターデータベース名を指定」をクリックします。
マスターデータベース名は、デフォルトのままでも問題ありませんが、今回作成したコンテナに対応する名前をつけておくのがおすすめです。ここでは dbbp1
とします。将来的にBotpressサーバーを増やすときがあったら、同じデータベースサーバーで dbbp2
というデータベースを作成することで、相乗りさせても区別がつきやすくなります。
データベースのプランは、デフォルトのままとします。
Lightsailリソース名も、任意の名前で構いません。ここでは、Botpress用であることが分かるように Database-bp
とします。
全ての入力が完了したら、ページ末尾の「データベースの作成」ボタンを押します。
データベースサーバーの起動にも数分間かかります。Step3に進むには、データベースサーバーのURLが必要なため、完了まで待ってください。
起動が完了したら、Lightsailリソース名をクリックして、詳細ページを開きます。
データベースサーバー詳細ページの上のほうに、エンドポイントのホスト名があります。これをコピーして、テキストエディタなどにペーストして控えてください。
これでデータベースサーバーの起動は完了しましたが、最後に、あなたのテキストエディタ上で「データベースURL」を作成しておいてください。ここでいうデータベースURLとは、以下のフォーマットのURLです。
postgres://ユーザー名:パスワード@ホスト名:ポート番号/データベース名
この記事の例では、以下のようになります。
postgres://dbmasteruser:BqVBiTqZft8F9y79@ls-a56717cab90c4a110b770917e25fe0094b1426c3.crmiove5q8s3.ap-northeast-1.rds.amazonaws.com:5432/dbbp1
このデータベースURLは、Step3の作業で使用します。
Step3. コンテナのデプロイ2回目
Step3は、Step1で得たサーバーのURLと、Step2で得たデータベースURLを利用して、Botpressの設定を変更するステップです。
それでは再び、コンテナの詳細ページを開き、「デプロイの変更」をクリックします。
デプロイの変更フォームが表示されたら「環境変数を追加」をクリックします。
環境変数として、以下の5つ登録します。「変数を追加」を押すと入力欄を増やせます。
DATABASE_URL
postgres://dbmasteruser:BqVBiTqZft8F9y79@ls-a56717cab90c4a110b770917e25fe0094b1426c3.crmiove5q8s3.ap-northeast-1.rds.amazonaws.com:5432/dbbp1
- ※Step2で作成したデータベースURLです。これはサンプルなので、あなたのデータベースURLを入力してください
BPFS_STORAGE
database
- ※ファイルの保存先がdiskかdatabaseかを示します。diskだとコンテナ再起動時にデータが失われますのでdatabaseにしてください。
EXTERNAL_URL
https://bp.6dlshhs3u5bju.ap-northeast-1.cs.amazonlightsail.com
- ※外部公開URLです。これはサンプルなので、あなたの外部公開URLを入力してください
NODE_ENV
production
- ※Node.jsの動作モードがdevelopmentかproductionかを示します。開発に使うサーバーであれば
development
の方がデバッグしやすいです
BP_PRODUCTION
true
- ※Botpressが本番動作モードか否かを示します。開発に使うサーバーであれば
false
の方がデバッグしやすいです
環境変数の入力が終わったら、よく確かめたうえで、「保存とデプロイ」を押します。
デプロイ2回目が完了したら、1回目の最後と同じように「パブリックドメイン」という項目のリンクをクリックして、Botpressの管理者アカウント登録ページを開いてください。表示されれば、デプロイは成功です。
今度は、管理者アカウントを登録しても問題ありません。試しに何かボットを作成して利用してみてください。以上で、コンテナサービスによるBotpressサーバーの構築は完了です。
本番環境として使うには
この記事では、本番環境として使うための設定まで触れません。ご自身の責任で、以下のことを考慮してください。
- この記事の設定では、言語サーバーとしてBotpress社がホストするサーバーが利用されます。つまり、チャットユーザーの入力内容がBotpress社のサーバーに送信されます。また、アクセスが多いとブロックされます。そのため、本番環境として利用する際は、言語サーバーも自前で起動させてください。(Ducklingサーバーも同様に起動するか無効化してください)
- デフォルトの外部公開URLのドメインは
amazonlightsail.com
ですが、ご自身で用意するドメインを利用することもできます。Lightsailのカスタムドメインおよび証明書のドキュメントを参照してください。 - BotpressおよびPostgreSQLの運用に必要なセキュリティ対策を行ってください。
- 大規模な利用には、有償のBotpress Enterpriseライセンスが必要になる場合があります。
参考資料
Botpressについては、書籍『チャットボットの教科書』で詳しく解説しています。
このサイトの更新情報は、以下のアカウントで配信しています。ぜひフォローしてください。
書籍の読者の方は、下記Facebookグループにも参加いただけます。https://www.facebook.com/groups/chatbot.today/