LoginSignup
7
3

【Botpress】Dockerでコンテナ起動し、ローカルをバインド⇒コード管理できるまで

Last updated at Posted at 2024-02-05

概要

Botpressとはオープンソースのチャットボット構築プラットフォームです。
ボットの会話フローを視覚的に簡単に構築できるほか、内部でコールするAPIを変えるなどすることで、様々なLLMに対応することもできます。

image.png
Botpress公式より

さらに、フロントエンド側にボットのURLを埋め込むことで、簡単にチャットスペースを用意することができます。

本記事では、Dockerを使用してBotpressサーバーを立ち上げ、さらにコード管理できるようにサーバーの中身をバインドしてローカルに落とし込むところまでを紹介します。

なお、私の備忘録的な意味合いもありますので、よりよい方法やご指摘等ございましたら、ぜひご教示ください!
Dockerに慣れている方にはあたりまえの内容かと思います...。

前提

Dockerがインストールされている。

Dockerfile作成

任意のディレクトリにDockerfileを作成します。

FROM botpress/server:v12_31_3

ARG WORKDIR=/botpress/data/
WORKDIR ${WORKDIR}

USER root

COPY ../ ${WORKDIR}
RUN chmod -R 777 ${WORKDIR}    # 適宜権限を調整

RUN apt-get -y update && apt-get -y upgrade && apt-get install -y git

CMD ["../bp", "serve"]

botpressサーバーのバージョンはこちらから選択します。

ビルド -> 起動

docker build -t botpress/server-image-001 . --no-cache=true
docker run -d -p 8000:3000 botpress/server-image-001

ログはこんな感じで、きちんと起動できています。
image.png

この状態で localhost:8000 にアクセスすると、Botpressのログイン画面が表示されます。
image.png

コンテナ内のデータをホストにコピー

先ほど作成したDockerfileがあるディレクトリに、Dockerコンテナ内のファイルをコピーします。

まずは起動しているコンテナのIDを取得します。

docker ps
CONTAINER ID   IMAGE                       COMMAND              CREATED          STATUS          PORTS                    NAMES
37d3bd303d83   botpress/server-image-001   "../bp serve"        2 minutes ago    Up 2 minutes    0.0.0.0:8000->3000/tcp   XXXXXXXXX

CONTAINER ID列の値を使用して、以下のコマンドを実行します。

docker cp 37d3bd303d83:./botpress/data/ <Dockerfileが存在するディレクトリ>

起動したコンテナサーバー内の botpress/data/ をローカルにコピーしています。
コピーが終了した後のローカルはこのようになります。
image.png

data/ 内を覗くと、このような構成になっています。
image.png

この中にも Dockerfile が存在しますが、先ほど作成した自前のを使用したいので、上の画像のように、Dockerfile 以外を1つ上の階層に全て移動します。
その後、data/ フォルダは削除します。

最終的に、ルートディレクトリはこのようになります。
image.png

この状態で、再度ビルド ⇒ 起動します。
botpress/server-image-001は停止してから行ってください。

docker build -t botpress/server-image-002 . --no-cache=true
docker run -d -p 8000:3000 botpress/server-image-002

起動できましたら localhost:8000 にアクセスします。
image.png

初回アクセス時には、adminユーザーの登録を求められます。
適当な認証情報を入力して Create Account を押下します。

登録に成功すると、ダッシュボードにアクセスできます。
image.png

試しにボットを作成してみます。
画面右側の「Create Bot」をクリックして、作成します。
image.png

作成後
image.png

この段階で、一度コンテナを停止し、もう一度起動します。
その状態で、再度localhost:8000にアクセスしてみましょう。
image.png

再度adminユーザーの登録を求められます。
すなわち、先ほどの登録情報が反映されていません。
なぜなら、先ほどの作業はコンテナ内で完結しており、停止した時点でその内容も失われてしまいます。

なので、コンテナ起動時にローカルをバインドしてあげる必要があります。
再度コンテナを停止し、以下のコマンドで起動します。

docker run -v <ローカルのルートディレクトリ>:/botpress/data -d -p 8000:3000 botpress/server-image-002

相も変わらず、再度adminユーザーの登録を求められます。
image.png

登録 ⇒ ボットの作成までを行います。
image.png

この時点で、ローカルに data/bots/test-bot-001 というフォルダが作成されているかと思います。
これで無事に、Docker環境からローカルのフォルダをマウントできているのが分かります。
すなわち、Botpressサーバー上の変更をローカルにも反映することができ、内容をコード管理することで複数人で開発を行うことができます。

また認証情報などは storage/core.sqlite に保存されています。
Botpressはデフォルトで sqlite を使用しておりますが、環境変数を使用して PostgreSQL に接続することも可能です。
公式docはこちら

まとめ

本記事では、Dockerを起動する際にローカルをバインドし、ボットの情報などをコード管理できるようにする流れをご紹介させていただきました。
DockerおよびBotpress初学者の助けになれば幸いです。

ご案内

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。
ご興味がある方は是非下記のリンクをご覧ください:
https://www.zdh.co.jp/products-services/cloud-data/zeuscloud/?utm_source=qiita&utm_medium=referral&utm_campaign=qiita_zeuscloud_content-area

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3