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コンテナのみを実行する必要があります。
docker compose downdocker compose up -d mongodb注:
-dフラグは、コンテナをバックグラウンドで実行し、現在のターミナルインスタンスを切り離します。mongodb のログ出力を確認したい場合は、このフラグを省略し、別のターミナルで実行を続けてください。
実行が開始されたら、コンテナのターミナルに入り、mongosh を実行します:
docker exec -it chat-mongodb mongosh以下のような出力が表示されるはずです:
~/LibreChat$ docker exec -it chat-mongodb mongosh
Current Mongosh Log ID: 65bfed36f7d7e3c2b01bcc3d
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.1
Using MongoDB: 7.0.4
Using Mongosh: 2.1.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
test> オプション: ついでに、必要であればMongoDBのテレメトリを無効にすることもできます。これは匿名化された利用データであり、定期的にMongoDBへ収集・送信されるものです:
以下のコマンドを実行してください。
注記:
- 以降のすべてのコマンドは、環境(Docker、Linux、
mongoshなど)に関係なく、現在のターミナルセッションで実行してください。- 実際のターミナル表示は、# example input/output と表記するか、場合によっては出力のみを表示して表現します。
コマンド:
disableTelemetry()入力/出力の例:
test> disableTelemetry()
Telemetry is now disabled.次に、mongodbがデフォルトで作成する管理データベースにアクセスして、管理者ユーザーを作成する必要があります。
use admindb admin に切り替えました
必要に応じて認証情報を置き換え、このガイドの残りの手順のために安全な場所に保管してください。
以下のコマンドを実行して管理者ユーザーを作成します:
db.createUser({ user: "adminUser", pwd: "securePassword", roles: ["userAdminAnyDatabase", "readWriteAnyDatabase"] })"ok" という出力が表示されるはずです。
また、show users を実行して管理者が作成されたことを確認することもできます:
admin> show users
[
{
_id: 'admin.adminUser',
userId: UUID('86e90441-b5b7-4043-9662-305540dfa6cf'),
user: 'adminUser',
db: 'admin',
roles: [
{ role: 'userAdminAnyDatabase', db: 'admin' },
{ role: 'readWriteAnyDatabase', db: 'admin' }
],
mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}
]:warning: 重要: mongo-express を使用してデータベースを管理している場合、mongo-express サービスを正しく実行するために追加の権限が必要です:
db.grantRolesToUser("adminUser", ["clusterAdmin", "readAnyDatabase"])exit を実行して Mongosh/Container Terminal を終了します:
admin> exitそして、実行中のコンテナを停止します:
docker compose down認証の有効化と readWrite アクセス権を持つユーザーの作成
mongodbコンテナの認証を有効にするために、docker-compose.override.ymlファイルを作成または編集する必要があります。以下の設定を開始用または参照用として使用できます:
version: '3.4'
services:
api:
volumes:
- ./librechat.yaml:/app/librechat.yaml # Optional for using the librechat config file.
mongodb:
command: mongod --auth # <--- Add this to enable authentication上記のようにオーバーライドファイルを構成した後、mongodbコンテナを再度実行します:
docker compose up -d mongodbそして、adminユーザーとしてmongoshにアクセスします:
docker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase admin認証されていることを確認してください:
db.runCommand({ connectionStatus: 1 })test> db.runCommand({ connectionStatus: 1 })
{
authInfo: {
authenticatedUsers: [ { user: 'adminUser', db: 'admin' } ],
authenticatedUserRoles: [
{ role: 'readWriteAnyDatabase', db: 'admin' },
{ role: 'userAdminAnyDatabase', db: 'admin' }
]
},
ok: 1
}
test>"LibreChat" データベースに切り替える
注: これはMONGO_URIを変更しない場合のデフォルトのデータベースです。デフォルトのURI:
MONGO_URI=mongodb://mongodb:27017/LibreChat
use LibreChat次に、Mongo接続文字列で使用する実際の認証情報を作成します。これには「LibreChat」データベースへの読み取り/書き込みアクセス権のみが制限されます。以前と同様に、例を希望する認証情報に置き換えてください:
db.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });
再度「ok」という出力が表示されるはずです。
show users コマンドを使用して、ユーザー作成を確認できます。
exit で再度 Mongosh/コンテナターミナルを終了し、コンテナを停止します:
exitdocker compose down新しく作成したユーザーが作成後に永続化されないという問題が発生しました。これを解決するために、作成手順を再度実行して確実に作成されるようにしました。参考までに手順を以下に記載します:
docker compose downdocker compose up -d mongodbdocker exec -it chat-mongodb mongosh -u adminUser -p securePassword --authenticationDatabase adminuse LibreChatshow usersdb.createUser({ user: 'user', pwd: 'userpasswd', roles: [ { role: "readWrite", db: "LibreChat" } ] });それでも永続化されない場合は、すべてのコンテナを起動した状態でコマンドを実行してみてください。ただし、LibreChat コンテナはエラーまたは再試行の状態になることに注意してください。
MONGO_URI を新しい認証情報を使用するように更新する
最後に、新しく作成した認証情報を含む接続文字列を、docker-compose.override.yml ファイルの api サービスの下に追加します。
environment:
- MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChatしたがって、オーバーライドファイルは以下のようになります:
version: '3.4'
services:
api:
volumes:
- ./librechat.yaml:/app/librechat.yaml
environment:
- MONGO_URI=mongodb://user:userpasswd@mongodb:27017/LibreChat
mongodb:
command: mongod --authこれで docker compose up を実行し、LibreChat データベースへの読み取り/書き込みアクセス権限で正常に認証できるようになります。
接続成功の例:
LibreChat | 2024-02-04 20:59:43 info: Server listening on all interfaces at port 3080. Use http://localhost:3080 to access it
chat-mongodb | {"t":{"$date":"2024-02-04T20:59:53.880+00:00"},"s":"I", "c":"NETWORK", "id":22943, "ctx":"listener","msg":"Connection accepted","attr":{"remote":"192.168.160.4:58114","uuid":{"uuid":{"$uuid":"027bdc7b-a3f4-429a-80ee-36cd172058ec"}},"connectionId":17,"connectionCount":10}}認証エラーが発生する場合は、ステップ2の最後の部分を再度実行してください。なぜ不安定なのかは定かではありませんが、数回試せば動作するはずです。
このガイドはいかがでしたか?