こんにちは、開発部でバックエンドエンジニアをしている田中 湧大(@Romira915)です。
今回は社内向けのAIチャットボットツールとしてOSSのLibreChatをセルフホストして公開したのでその紹介をします。
LibreChatを新たにセルフホストした理由
弊社では以前からOSSのchatbot-uiをCloud Runにセルフホストしていました。

しかしchatbot-uiはいくつかの課題がありました。
- 運用していたバージョン(ver1系)ではGPT-4oやGPT-4o miniなどの最新のモデルが利用できなかった。
- chatbot-uiの最新ver2系からBaaSのSupabaseが必要になったこと 社内ではCloud Runにデプロイしていたためインフラ構成を変える必要がありました。
選択肢として以下の2つが考えられました
- chatbot-uiのインフラ構成を見直して最新のchatbot-uiを再構築する
- その他のOSSのAIチャットボットツールをセルフホスティングする
前者についてはSupabaseをセルフホストする必要があり、私がSupabaseについてあまり詳しくないことやセルフホストしても運営上の管理が大変になることから見送りました。
そのため、OSS製のAIチャットボットツールを探していたところ、LibreChatが使いやすそうだったため、こちらをセルフホストすることにしました。
LibreChatについて
LibreChatはオープンソースのAIチャットプラットフォームです。
LibreChatは以下のような特徴があります。
- ChatGPTだけでなくGeminiやbingAIなどの複数のAIプロパイダーを利用できる
- 現時点でStarが16.1k、コントリビュータ数が149、イシュー数が102で活発に開発されている
- デプロイ用のdocker composeファイルが用意されている
- プリセットやプロンプトマネージャなど豊富なカスタマイズオプションがある
- MIT license
やったこと
今回はLibreChatをAWSのEC2上にdockerを用いてセルフホストしました。
以下の公式サイトの手順に従ってデプロイしました
社内向けツールであるためログインできる権限を絞る必要があります。
そのため .env を登録・ログインに関わる記述を以下のようにします。
ALLOW_EMAIL_LOGIN=false
ALLOW_REGISTRATION=false
ALLOW_SOCIAL_LOGIN=true
ALLOW_SOCIAL_REGISTRATION=true
ALLOW_PASSWORD_RESET=false
# Google
GOOGLE_CLIENT_ID=xxxx
GOOGLE_CLIENT_SECRET=xxxx
GOOGLE_CALLBACK_URL=/oauth/google/callbackまず、e-mailによる新規登録・ログインを無効にします。
次にソーシャルアカウントによる新規登録・ログインを許可します。
最後にGoogle OAuthの CLIENT_ID と CLIENT_SECRET を設定します。
Google Cloud上のOAuth 同意画面の設定でユーザーの種類を「内部」にすることで組織内の Google Workspace ユーザーのみに使用を制限できます。

さらにアプリケーションを保護するために、EC2の前段にALBを設置し、Googleアカウント認証を挟むようにしました。
ALBでGoogle認証を行う
AWS ALBではリスナールールのアクションを追加することで追加の実装をすることなくGoogleアカウントなどの認証を挟むことができます。
まず認証を入れたいルールの編集から「OpenID または Amazon Cognito を使用する」を有効化します。
画像ではデフォルトのルールを編集しています。

アイデンティティプロバイダーや発行者などはGoogleアカウント認証の場合は以下のようになります。

クライアントIDや、クライアントシークレットは先ほどlibrechatに使った値を使い回すこともできますが、今回はALB用に新規発行した値を入力しました。
Google認証側の承認済みのリダイレクト URIは以下の値を入力します。
https://{YOUR DOMAIN}/oauth2/idpresponse
ここまででALBのGoogle認証設定は完了です。
YOUR DOMAIN にアクセスするとGoogleログインが求められると思います。
まとめ
今回はChatbot-uiの代替先としてLibreChatをセルフホスティングしたことについてご紹介しました。
LibreChatはcompose.ymlが提供されているので手軽に検証したりデプロイ出来ることが魅力的だと感じました。
この記事が少しでも参考になれば幸いです。

