MongoDB認証
docker-compose.override.yml ファイルを使用して Docker 上の MongoDB で認証を設定する
このガイドでは、docker-compose.override.yml ファイルを使用して MongoDB の明示的な認証を有効にする方法を説明します。
オーバーライドファイルの詳細については、以下を参照してください: Docker Compose Override
注記:
- デフォルトの設定では外部ポートへのアクセスをブロックすることで安全性が確保されていますが、アクセス認証を追加することでさらにセキュリティを強化できます。
- MongoDBの開発者自身が指摘しているように、MongoDBにおける認証はかなり複雑です。ここでは、ほとんどのケース、特にLibreChatの既存の設定において十分な、シンプルなアプローチを採用します。Dockerでのmongodb認証の仕組みについて詳しくは、こちらをご覧ください: https://hub.docker.com/_/mongo/
- このガイドでは、ターミナルベースのセットアップ手順のみに焦点を当てています。
- ここで説明されている手順は、Docker Desktop環境や、Dockerを使用しないローカルのMongoDB、その他のコンテナセットアップにも適用できる可能性がありますが、それらのシナリオに固有の詳細は提供されていません。
基本的なステップは3つあります:
- mongodbコンテナ内に管理者ユーザーを作成します
- 認証を有効にし、LibreChat用に「readWrite」ユーザーを作成します。
- 新しく作成したユーザーで MONGO_URI を設定します
TL;DR
これらは、手早く実行したい場合や参照用として必要なすべてのコマンドです:
例
librechat.yaml 設定ファイル、MongoDB 認証、および MongoDB データベース管理 用の mongo-express を使用した docker-compose.override.yml ファイルの例:
管理者ユーザーの作成
まず、デフォルトのコンテナの実行を停止し、mongodbコンテナのみを実行する必要があります。
注:
-dフラグは、コンテナをバックグラウンドで実行し、現在のターミナルインスタンスを切り離します。mongodb のログ出力を確認したい場合は、このフラグを省略し、別のターミナルで実行を続けてください。
実行が開始されたら、コンテナのターミナルに入り、mongosh を実行します:
以下のような出力が表示されるはずです:
オプション: ついでに、必要であればMongoDBのテレメトリを無効にすることもできます。これは匿名化された利用データであり、定期的にMongoDBへ収集・送信されるものです:
以下のコマンドを実行してください。
注記:
- 以降のすべてのコマンドは、環境(Docker、Linux、
mongoshなど)に関係なく、現在のターミナルセッションで実行してください。- 実際のターミナル表示は # example input/output と表記するか、場合によっては出力のみを表示します。
コマンド:
入力/出力の例:
次に、管理者ユーザーを作成するために、mongodbがデフォルトで作成するadminデータベースにアクセスする必要があります。
db admin に切り替えました
必要に応じて認証情報を置き換え、このガイドの残りの手順のために安全な場所に保管してください。
以下のコマンドを実行して管理者ユーザーを作成します:
"ok" という出力が表示されるはずです。
また、show users を実行することで、管理者が作成されたことを確認することもできます:
:warning: 重要: mongo-express を使用して データベースを管理している場合 (ガイドはこちら)、mongo-express サービスを正しく実行するために以下の追加権限が必要です:
exit を実行して Mongosh/Container Terminal を終了します:
そして、実行中のコンテナを停止します:
認証の有効化と readWrite アクセス権を持つユーザーの作成
mongodbコンテナの認証を有効にするために、docker-compose.override.yml ファイルを作成または編集する必要があります。以下の設定を開始用または参照用として使用できます:
上記のようにオーバーライドファイルを構成した後、mongodbコンテナを再度実行します:
そして、管理者ユーザーとして mongosh にアクセスします:
認証されていることを確認してください:
"LibreChat" データベースに切り替えます
注: これは、MONGO_URI を変更していない場合のデフォルトのデータベースです。デフォルトの URI:
MONGO_URI=mongodb://mongodb:27017/LibreChat
次に、Mongo接続文字列で使用する実際の認証情報を作成します。これには「LibreChat」データベースへの読み取り/書き込みアクセス権のみが制限されます。以前と同様に、例を希望する認証情報に置き換えてください。
db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
再び "ok" という出力が表示されるはずです。
show users コマンドを使用して、ユーザー作成を確認できます。
exit で再度 Mongosh/コンテナターミナルを終了し、コンテナを停止します:
新しく作成したユーザーが作成後に永続化されないという問題が発生しました。これを解決するために、作成手順を繰り返して確実に作成されるようにしました。参考までに手順を以下に記載します:
それでも永続化されない場合は、すべてのコンテナを起動した状態でコマンドを実行してみてください。ただし、LibreChat コンテナはエラーまたは再試行の状態になることに注意してください。
新しい認証情報を使用するように MONGO_URI を更新する
最後に、新しく作成した認証情報を含む接続文字列を、docker-compose.override.yml ファイルの api サービスの下に追加します。
したがって、オーバーライドファイルは以下のようになります:
これで docker compose up を実行し、LibreChat データベースへの読み取り/書き込み権限で正常に認証できるようになります。
接続成功の例:
認証エラーが発生する場合は、ステップ2の最後の部分を再度実行してください。なぜ不安定なのかは不明ですが、数回試せば動作するはずです。
このガイドはいかがでしたか?