Learn the "why" behind slow queries and how to fix them in our 2-Part Webinar.
Register now >
Docs 菜单
Docs 主页
/ /

将MongoDB与 Drupal 集成

在本指南中,您可以学习如何创建使用MongoDB作为数据库的Drupal内容管理系统(CMS)。Drupal 是一个用PHP编写的开源 Web CMS,提供内容创作、可组合性和身份验证功能。

提供个性化用户体验的网站需要强大的用户身份验证功能。拥有许多经过身份验证的用户的站点在从关系数据库的多个表中检索实体数据时可能会遇到性能问题。MongoDB消除了复杂的表连接,并提高了个性化仪表盘和动态内容源等功能的数据检索速度。

当您使用MongoDB作为站点的数据库时,Drupal 会将实体存储为JSON文档,其中包括所有修订、翻译和字段数据。这种灵活数据结构可减少延迟,并为用户提供数据驱动的个性化体验。

MongoDB提供以下可改进 Drupal 站点的功能:

  • 水平扩展:将负载分布到多个服务器,使数据库可扩展的以适应大型用户群。

  • 集成文件存储:将用户文件直接存储在数据库中,而不是存储在 Web服务器上,从而简化了托管。

  • 全文搜索:利用 MongoDB Search 功能,避免实施单独的搜索解决方案。

  • AI功能:使用MongoDB Vector Search功能执行向量搜索并集成AI服务。

在本教程中,您构建一个使用MongoDB存储Drupal 站点数据的 Drupal CMS。您可以创建一个本地托管的 Drupal站点,向该站点添加文章,然后在MongoDB中查看该文章的数据。

提示

本教程使用本地MongoDB副本集和本地托管站点。要查看使用 MongoDB Atlas M10 集群和 AWS EC2 服务器的类似教程,请参阅 如何在 MongoDB 上运行 Drupal DEV 文章。

按照本节中的步骤安装项目依赖项、部署MongoDB副本集并设立Drupal。

1

要创建快速入门应用程序,请在开发环境中安装以下软件:

先决条件
注意

这是一个PHP依赖管理工具。

按照与您的操作系统相对应的说明进行操作。

在本地安装MongoDB以运行副本集。

安装MongoDB PHP扩展 mongodb。按照与您的操作系统对应的扩展文档中的说明进行操作。

本教程使用MongoDB Shell (mongosh) 查看数据并与之交互。选择操作系统和安装方法,然后按照说明进行操作。

使用 8.3 或更高版本。

终端应用和shell

对于 MacOS 用户,请使用终端或类似应用。对于Windows用户,请使用 PowerShell 或命令提示符。

2

要将MongoDB与 Drupal 结合使用,您必须运行MongoDB副本集。执行以下步骤来准备和启动本地三节点副本集:

  1. 增加 ulimit 值以解决系统资源限制问题。

    Drupal 可在短时间内创建多个文件和索引。从终端运行以下命令,将 ulimit设立为 64000,防止副本集崩溃:

    ulimit -n 64000
  2. 部署副本集。

    增加 ulimit 后,请按照部署用于测试和开发的自管理副本集教程中的说明来部署和初始化副本集。确保您的副本集名为 rs0,并且有三个节点在端口 270172701827019 上运行。

3

提示

使用PHP驱动程序

如果您更愿意使用MongoDB PHP驱动程序而不是 mongosh 创建数据库用户,请将 createUser 命令传递给 MongoDB\Database::command() 方法。要学习;了解更多信息,请参阅驱动程序文档中的运行数据库命令

通过执行以下步骤,创建具有 Drupal数据库所需权限的用户。

  1. 从终端运行以下命令,连接到 mongosh 中的副本集:

    mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0"
  2. mongosh Shell中,运行以下命令以进入 admin数据库:

    use admin
  3. 然后,从Shell运行以下命令以创建用户:

    db.createUser({
    user: "<database username>",
    pwd: "<database user password>",
    roles: [
    { role: "readWrite", db: "drupal" },
    { role: "dbAdmin", db: "drupal" }
    ]
    })

    <database username><database user password> 替换为您的首选凭证。保存这些值以在将来的步骤中使用。

4

在新的终端窗口中运行以下命令,创建名为 drupal-quickstart 的 Drupal项目:

composer create-project drupal/recommended-project:11.1.5 drupal-quickstart
cd drupal-quickstart

然后,通过运行以下命令来安装MongoDB模块:

composer require drupal/mongodb:^3.1

安装 Drupal 后,请按照本节中的步骤操作,让您的应用程序能够与MongoDB配合使用。

1

Drupal 核心PHP文件需要补丁才能与MongoDB一起使用。导航到 drupal-quickstart/web目录并通过运行以下命令应用补丁:

cd web
git apply -v modules/contrib/mongodb/patches/drupal-core-11.1.5.patch
cd ..
2

drupal-quickstart目录导航到 web/sites/default 子目录并运行以下命令:

cd web/sites/default
cp default.settings.php settings.php
chmod 777 settings.php
cd ../../..

这些命令将默认设置文件复制到名为 settings.php 的新文件中,并更新此文件的权限以允许 Drupal写入新内容。

3

要允许 Drupal 修改公共文件,请创建 files目录,并通过从 drupal-quickstart目录运行以下命令来设立其权限:

mkdir -p web/sites/default/files
chmod -R 777 web/sites/default/files

然后,验证 web/sites/default/settings.php文件是否包含以下值,从而指定这些文件的位置:

$settings['file_public_path'] = 'sites/default/files';

提示

如果前面的值在 settings.php 中被注释掉,请将其取消注释。

按照本节中的步骤,使用 Drupal 配置向导完成 Drupal 安装。

1

drupal-quickstart目录中,运行以下命令以启动内置PHP Web服务器:

php -S localhost:8080 -t web

如果成功,此命令将输出以下信息:

[Date Time] PHP 8.3.0 Development Server (http://localhost:8080) started
2

在 Web 浏览器中打开 http://localhost:8080 以启动 Drupal 安装向导。然后,通过选择以下响应来配置您的项目。

提示

如果您的站点显示有关已弃用的非规范 (boolean) 转换的错误消息,请在项目的 DocParser.php文件中找到以下行:

$this->ignoreNotImportedAnnotations = (boolean) $bool;

将此行替换为以下代码:

$this->ignoreNotImportedAnnotations = (bool) $bool;
  1. “选择语言”页面上,选择“英语”,然后单击“保存并继续”

  2. “选择配置文件”页面上,保持选择“标准”,然后单击“保存并继续”

  3. 设置数据库 页面上,选择 MongoDB 作为数据库类型,并提供以下信息:

    • 数据库名称drupal

    • 数据库用户名:您在上一个步骤中使用 createUser 命令配置的数据库用户名

    • 数据库密码:您在上一个步骤中使用 createUser 命令配置的数据库密码

    • SRV 连接格式:保持未选中状态

    • 数据库副本集rs0

    • 托管 #1localhost,端口 27017

    • 托管 #2localhost,端口 27018

    • 托管 #3localhost,端口 27019

    单击保存并继续

  4. Drupal 安装所需的模块。这可能需要几分钟时间。

  5. “配置站点”页面上,提供以下信息:

    • 站点名称:输入 Drupal on MongoDB

    • 站点电子邮件地址:输入任何电子邮件地址。您可以使用不存在的解决。

    • 用户名:选择管理员用户名。

    • 密码:选择一个强密码。

    • 接收电子邮件通知:取消选中此框。

    单击保存并继续

3

安装 Drupal 并配置站点后,Drupal 不再需要对设置文件的写入访问权限。要保护这些文件的安全,请从 drupal-quickstart目录运行以下命令:

chmod 555 web/sites/default
chmod 444 web/sites/default/settings.php

完成安装后,请按照本节中的步骤创建内容并将其数据存储在MongoDB中。

1

安装完成后,您的站点将重定向到 Drupal 主页。您的站点类似于下图:

初始安装后 Drupal 主页的屏幕截图

提示

站点样式

如果您的 Drupal 站点显示没有任何样式的纯 HTML,您可能必须禁用 CSS 和 JavaScript 聚合。要禁用聚合,请在浏览器中访问 http://localhost:8080/admin/config/development/performance 并取消选中 Aggregate CSS filesAggregate JavaScript files 复选框。

2

单击页面顶部导航栏中的 Content。然后,单击添加内容>文章

3

Create Article 页面上,执行以下操作:

  1. Title 部分中,输入 "Welcome to My Drupal Site"

  2. Body 部分中,输入以下文本:

    This is my first article on Drupal with MongoDB!
    All content is stored as JSON documents in MongoDB.
  3. 选择 Menu settings 并选中 Provide a menu link 复选框。

  4. 单击 Save(连接)。

4

保存后,就可以看到自己发布的文章了。您的站点类似于下图:

Drupal 文章页面的屏幕截图
5

提示

使用PHP驱动程序

如果您更愿意使用PHP驱动程序而不是 mongosh 来查看集合和内容数据,请使用 MongoDB\Database::listCollections()MongoDB\Collection::find() 方法。要学习;了解详情,请参阅以下PHP驱动程序文档:

要验证您的内容是否存储在MongoDB中,请执行以下步骤:

  1. 打开新的终端窗口并连接到 mongosh 中的MongoDB副本集。

    从终端运行以下命令:

    mongosh "mongodb://localhost:27017,localhost:27018,localhost:27019/?replicaSet=rs0"
  2. 进入 drupal数据库并查看集合。

    mongosh 终端中运行以下命令:

    use drupal
    show collections

    Drupal 会创建多个集合来存储不同类型的内容,其中包括:

    • node:存储内容节点

    • users:存储用户帐户

    • config:存储配置数据

  3. 查看您的文章数据。

    要查看有关文章的信息,请在 mongosh 终端中运行以下命令:

    db.node.find().pretty()
    [
    {
    _id: ObjectId('...'),
    nid: 1,
    vid: 1,
    type: 'article',
    uuid: '...',
    langcode: 'en',
    node_all_revisions: [
    {
    ...
    }
    ],
    node_current_revision: [
    {
    ...
    }
    ],
    node_latest_revision: [
    {
    ...
    title: 'Welcome to My Drupal Site',
    created: ...,
    changed: ...,
    promote: true,
    sticky: false,
    default_langcode: true,
    revision_default: true,
    revision_translation_affected: true,
    node_latest_revision__body: [
    {
    bundle: 'article',
    deleted: false,
    langcode: 'en',
    entity_id: 1,
    revision_id: 1,
    delta: 0,
    body_value: '<p>This is my first article on Drupal with MongoDB!<br>All content is stored as JSON documents in MongoDB.</p>',
    body_summary: '',
    body_format: 'basic_html'
    }
    ],
    node_latest_revision__comment: [
    {
    bundle: 'article',
    deleted: false,
    langcode: 'en',
    comment_status: 2,
    entity_id: 1,
    revision_id: 1,
    delta: 0
    }
    ]
    }
    ]
    }
    ]

    此命令会返回一个JSON 文档,其中包含文章文本和元数据。

恭喜您完成 Drupal 快速入门教程!

完成这些步骤后,您就拥有了一个 Drupal CMS,它可以连接到本地 MongoDB 副本集并将内容存储为 JSON 文档。

要学习有关 Drupal 和 MongoDB 的更多信息,请查看以下资源:

后退

Symfony Integration

在此页面上