MongoDB 身份验证
使用 docker-compose.override.yml 文件为您的 Docker MongoDB 设置身份验证
本指南将演示如何使用 docker-compose.override.yml 文件来为 MongoDB 启用显式身份验证。
有关覆盖文件的更多信息,请参阅:Docker Compose Override
注意:
- 默认配置通过阻止外部端口访问来确保安全,但我们可以通过访问凭据进一步加强安全性。
- 正如 MongoDB 开发人员所指出的,MongoDB 中的身份验证相当复杂。我们将采用一种简单的方法,这对大多数情况(尤其是 LibreChat 的现有配置)来说已经足够了。要了解有关 mongodb 身份验证如何与 Docker 配合使用的更多信息,请参阅此处:https://hub.docker.com/_/mongo/
- 本指南仅专注于基于终端的设置流程。
- 虽然所概述的步骤也可能适用于 Docker Desktop 环境,或非 Docker、本地 MongoDB 或其他容器设置,但并未提供针对这些场景的具体细节。
共有 3 个基本步骤:
- 在您的 mongodb 容器内创建一个管理员用户
- 启用身份验证并为 "LibreChat" 创建一个 "readWrite" 用户
- 使用新创建的用户配置 MONGO_URI
简而言之
如果您想快速执行这些操作或作为参考,以下是所有必要的命令:
示例
使用 librechat.yaml 配置文件、MongoDB 身份验证 以及用于管理 MongoDB 数据库的 mongo-express 的 docker-compose.override.yml 示例文件:
创建管理员用户
首先,我们必须停止默认容器的运行,并仅运行 mongodb 容器。
注意:
-d标志会在容器于后台运行时分离当前的终端实例。如果您希望查看 mongodb 的日志输出,请省略该标志并在另一个终端中继续操作。
运行后,我们将进入容器的终端并执行 mongosh:
你应该看到以下输出:
可选:如果需要,我们可以在此禁用 mongodb 的遥测功能,该功能会定期收集匿名使用数据并发送给 MongoDB:
执行以下命令。
注意:
- 后续所有命令都应在当前终端会话中运行,无论环境如何(Docker、Linux、
mongosh等)。- 我将用 # 示例输入/输出或在某些情况下仅显示输出来表示实际的终端视图。
命令:
示例输入/输出:
现在,我们必须访问 mongodb 默认创建的 admin 数据库,以创建我们的管理员用户:
已切换至 db admin
根据需要替换凭据,并将其保存在您的安全记录中,以供本指南后续步骤使用。
运行命令以创建管理员用户:
你应该会看到一个 "ok" 输出。
您也可以通过运行 show users 来确认管理员是否已创建:
:warning: 重要: 如果您正在使用 mongo-express 来管理您的数据库(指南在此),您需要额外的权限才能使 mongo-express 服务正常运行:
通过运行 exit 退出 Mongosh/容器终端:
并停止正在运行的容器:
启用身份验证并创建具有 readWrite 权限的用户
我们现在必须创建/编辑 docker-compose.override.yml 文件,以便为我们的 mongodb 容器启用身份验证。您可以使用此配置来启动或参考:
按照上述方式配置覆盖文件后,再次运行 mongodb 容器:
并以管理员用户身份访问 mongosh:
确认您已通过身份验证:
切换到 "LibreChat" 数据库
注意:除非您通过 MONGO_URI 进行了更改,否则这是默认数据库;默认 URI 为:
MONGO_URI=mongodb://mongodb:27017/LibreChat
现在我们将创建用于 MongoDB 连接字符串的实际凭据,这些凭据将仅限于对 "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 步的最后一部分。我不确定为什么它会不稳定,但尝试几次后它就能正常工作了。
这篇指南怎么样?