如何使用 Docker 和 DDEV 在本地机器上开发 Drupal 9 网站

作者选择了技术多样性基金来接受捐赠,作为Write for DOnations计划的一部分。

介绍

DDEV是一个开源工具,它使用 Docker 为许多不同的 PHP 框架构建本地开发环境。利用容器化的力量,DDEV 可以极大地简化您处理使用多个技术堆栈和多个云服务器的多个项目的方式。DDEV 包括适用于WordPressLaravelMagentoTYPO3Drupal 等的模板

Drupal 9于 2020 年 6 月 3 日针对 Drupal CMS 发布。Drupal 以其易用性和庞大的模块和主题库而闻名,是一种流行的 PHP 框架,用于构建和维护各种规模的网站和应用程序。

在本教程中,您将开始使用 DDEV 在本地机器上开发 Drupal 9 网站。这将允许您首先构建您的网站,然后当您准备好时,将您的项目部署到生产服务器。

先决条件

要完成本教程,您需要:

注意:可以在远程服务器上使用 DDEV 开发 Drupal 9,但您需要一个解决方案才能localhost在 Web 浏览器中访问DDEV 命令ddev sharengrok一起使用,它会为您和其他利益相关者创建一个进入您的服务器的安全隧道,以查看您的开发站点。对于个人使用,您还可以在远程服务器上安装 GUI,并通过该界面内的 Web 浏览器访问您的开发站点。为此,您可以按照我们关于如何在 Ubuntu 20.04 上安装和配置 VNC 的指南进行操作要获得更快的 GUI 解决方案,您可以按照我们的指南,了解如何在 Ubuntu 20.04 上使用 X2Go 设置远程桌面

步骤 1 — 安装 DDEV

在此步骤中,您将在本地计算机上安装 DDEV。选项 1 包括适用于 macOS 的说明,而选项 2 提供适用于 Linux 的说明。本教程在 DDEV 版本 1.15.0 上进行了测试。

选项 1 — 在 macOS 上安装 DDEV

DDEV 建议 macOS 用户使用Homebrew 包管理器安装他们的工具使用以下brew命令安装最新的稳定版本:

  • brew tap drud/ddev && brew install drud/ddev/ddev

如果您更喜欢绝对最新的版本,您可以使用brew来安装ddev-edge

  • brew tap drud/ddev-edge && brew install drud/ddev-edge/ddev

如果您已经安装了一个 DDEV 版本,或者您希望更新您的版本,请关闭 DDEV 并使用它brew来更新您的安装:

  • ddev poweroff
  • brew upgrade ddev

安装或更新 DDEV 后,运行ddev version以验证您的软件:

  • ddev version

你会看到这样的输出:

Output
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os darwin router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0

DDEV 包括一个强大的 CLI,或命令行界面。运行ddev了解一些常用命令:

  • ddev

您将看到以下输出:

Output
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.

有关使用 DDEV CLI 的更多信息,请访问官方 DDEV 文档

在本地机器上安装 DDEV 后,您现在可以安装 Drupal 9 并开始开发网站。

选项 2 — 在 Linux 上安装 DDEV

在 Linux 操作系统上,您可以使用 Homebrew for Linux 或使用官方安装脚本安装 DDEV。在 Ubuntu 上,首先更新apt包管理器中的列表(您可以apt在 Debian 中使用,否则使用与您的 Linux 发行版关联的等效包管理器):

  • sudo apt update

现在从 Ubuntu 的官方存储库安装一些必备软件包:

  • sudo apt install build-essential apt-transport-https ca-certificates software-properties-common curl

这些包将允许您从其官方 GitHub 存储库下载 DDEV 安装脚本。

现在下载脚本:

  • curl -O https://raw.githubusercontent.com/drud/ddev/master/scripts/install_ddev.sh

在运行脚本之前,在nano您喜欢的文本编辑器中打开它并检查其内容:

nano install_ddev.sh

查看脚本内容并满意后,保存并关闭文件。现在您已准备好运行安装脚本。

使用chmod命令使脚本可执行:

  • chmod +x install_ddev.sh

现在运行脚本:

  • ./install_ddev.sh

安装过程可能会提示您确认某些设置或输入sudo密码。安装完成后,您的 Linux 操作系统上就可以使用 DDEV。

运行ddev version以验证您的软件:

  • ddev version

你会看到这样的输出:

Output
DDEV-Local version v1.15.0 commit v1.15.0 db drud/ddev-dbserver-mariadb-10.2:v1.15.0 dba phpmyadmin/phpmyadmin:5 ddev-ssh-agent drud/ddev-ssh-agent:v1.15.0 docker 19.03.8 docker-compose 1.25.5 os linux router drud/ddev-router:v1.15.0 web drud/ddev-webserver:v1.15.0

DDEV 是一个强大的 CLI,或命令行界面。ddev无需任何其他操作即可运行以了解一些常用命令:

  • ddev

您将看到以下输出:

Output
Create and maintain a local web development environment. Docs: https://ddev.readthedocs.io Support: https://ddev.readthedocs.io/en/stable/#support Usage: ddev [command] Available Commands: auth A collection of authentication commands composer Executes a composer command within the web container config Create or modify a ddev project configuration in the current directory debug A collection of debugging commands delete Remove all project information (including database) for an existing project describe Get a detailed description of a running ddev project. exec Execute a shell command in the container for a service. Uses the web service by default. export-db Dump a database to a file or to stdout help Help about any command hostname Manage your hostfile entries. import-db Import a sql file into the project. import-files Pull the uploaded files directory of an existing project to the default public upload directory of your project. list List projects logs Get the logs from your running services. pause uses 'docker stop' to pause/stop the containers belonging to a project. poweroff Completely stop all projects and containers pull Pull files and database using a configured provider plugin. restart Restart a project or several projects. restore-snapshot Restore a project's database to the provided snapshot version. sequelpro This command is not available since sequel pro.app is not installed share Share project on the internet via ngrok. snapshot Create a database snapshot for one or more projects. ssh Starts a shell session in the container for a service. Uses web service by default. start Start a ddev project. stop Stop and remove the containers of a project. Does not lose or harm anything unless you add --remove-data. version print ddev version and component versions Flags: -h, --help help for ddev -j, --json-output If true, user-oriented output will be in JSON format. -v, --version version for ddev Use "ddev [command] --help" for more information about a command.

有关使用 DDEV CLI 的更多信息,您可以访问官方 DDEV 文档

在本地计算机上安装 DDEV 后,您现在可以部署 Drupal 9 并开始开发网站。

步骤 2 — 使用 DDEV 部署新的 Drupal 9 站点

随着 DDEV 的运行,您现在将使用它来创建特定于 Drupal 的文件系统,安装 Drupal 9,然后启动一个标准的网站项目。

首先,您将创建一个项目根目录,然后在其中移动。您将从该位置运行所有剩余的命令。本教程将使用d9test,但您可以随意将目录命名为其他名称。但是请注意,DDEV 不能很好地处理带连字符的名称。避免目录名称如my-project被认为是最佳实践drupal-site-1

创建你的项目根目录并在里面导航:

  • mkdir d9test
  • cd d9test

DDEV 擅长创建匹配特定 CMS 平台的目录树使用该ddev config命令创建特定于 Drupal 9 的目录结构:

  • ddev config --project-type=drupal9 --docroot=web --create-docroot

你会看到这样的输出:

Output
Creating a new ddev project config in the current directory (/Users/sammy/d9test) Once completed, your configuration will be written to /Users/sammy/d9test/.ddev/config.yaml Created docroot at /Users/sammy/d9test/web You have specified a project type of drupal9 but no project of that type is found in /Users/sammy/d9test/web Ensuring write permissions for d9new No settings.php file exists, creating one Existing settings.php file includes settings.ddev.php Configuration complete. You may now run 'ddev start'.

因为您传递给您的命令,所以 DDEV 创建了几个子目录和文件,代表 Drupal 网站的默认组织。您的项目目录树现在将如下所示:--project-type=drupal9ddev config

Drupal 9 目录树
.
├── .ddev
│   ├── .gitignore
│   ├── config.yaml
│   ├── db-build
│   │   └── Dockerfile.example
│   └── web-build
│       └── Dockerfile.example
└── web
    └── sites
        └── default
            ├── .gitignore
            ├── settings.ddev.php
            └── settings.php

6 directories, 7 files

.ddev/将是 ddev 配置的主文件夹。web/将成为您新项目的文档根目录;它将包含几个特定的settings.文件。您现在拥有新 Drupal 项目的初始脚手架。

您的下一步是初始化您的平台,这将构建必要的容器和网络配置。DDEV 绑定到端口80443,所以如果你在你的机器上运行像 Apache 这样的 web 服务器,或者其他任何使用这些端口的东西,在继续之前停止这些服务。

使用ddev start命令初始化您的平台:

  • ddev start

这将为您的项目构建所有基于 Docker 的容器,其中包括 Web 容器、数据库容器和phpmyadmin初始化完成后,您将看到如下输出(您的端口号可能不同):

Output
... Successfully started d9test Project can be reached at http://d9test.ddev.site http://127.0.0.1:32773

注意:请记住,这里 DDEV 是在幕后启动 Docker 容器。如果要查看这些容器或验证它们是否正在运行,可以始终使用以下docker ps命令:

  • docker ps

除了任何其他容器,您正在运行,你会发现四个新的集装箱,每个运行不同的图像:php-myadminddev-webserverddev-router,和ddev-dbserver-mariadb

ddev start已成功构建您的容器并为您提供带有两个 URL 的输出。虽然此输出表明您的项目“可以在和 处访问”,但现在访问这些 URL 将引发错误。从 Drupal 8 开始,Drupal 核心和 contrib 模块的功能类似于依赖项。因此,在 Web 浏览器中加载任何内容之前,您首先需要使用Composer(PHP 项目的包管理器)完成 Drupal 的安装http://d9test.ddev.sitehttp://127.0.0.1:32773

DDEV 最有用和最优雅的功能之一是您可以通过 DDEV CLI 将 Composer 命令传递到您的容器化环境中。这意味着您可以将机器的特定配置与开发环境分开。您不再需要管理通常伴随本地 PHP 开发的各种文件路径、依赖项和版本问题。此外,您可以轻松地在使用不同框架和技术堆栈的多个项目之间快速进行上下文切换。

使用ddev composer命令下载drupal/recommended-project. 这将下载 Drupal 核心、它的库和其他相关资源,然后创建一个默认项目:

  • ddev composer create "drupal/recommended-project"

现在下载一个名为Drush或 Drupal Shell 的最终组件本教程将只使用一个drush命令,本教程提供了一种替代方法,但它drush是用于 Drupal 开发的强大 CLI,可以提高您的效率。

使用ddev composer安装drush

  • ddev composer require "drush/drush"

您现在已经构建了一个默认的 Drupal 9 项目并安装了drush. 现在您将在浏览器中查看您的项目并配置您的网站设置。

第 3 步 – 配置您的 Drupal 9 项目

现在您已经安装了 Drupal 9,您可以在浏览器中访问您的新项目。为此,您可以重新运行ddev start并复制它输出的两个 URL 之一,或者您可以使用以下命令,这将在新的浏览器窗口中自动启动您的站点:

  • ddev launch

您将遇到标准的 Drupal 安装向导。

来自浏览器的 Drupal 9 安装程序

在这里你有两个选择。您可以使用此 UI 并按照向导完成安装,也可以返回终端并drush通过ddev. 后一个选项将自动执行安装过程并设置admin为您的用户名和密码。

选项 1 – 使用向导

在浏览器中返回向导。选择语言”下,从下拉菜单中选择一种语言,然后单击“保存并继续”现在选择一个安装配置文件。您可以在StandardMinimalDemo之间进行选择做出选择,然后单击“保存并继续”Drupal 将自动验证您的要求、设置数据库并安装您的站点。最后一步是自定义一些配置。添加以您的域结尾的站点名称和站点电子邮件地址。然后选择用户名和密码。选择一个强密码并将您的凭据保存在安全的地方。最后,添加一个你经常查看的私人邮箱地址,填写区域设置,然后按保存并继续

Drupal 9 欢迎消息,其中包含有关权限的警告

您的新站点将加载一条欢迎消息。

选项 2 – 使用命令行

从项目的根目录,运行此ddev exec命令以使用以下命令安装默认 Drupal 站点drush

  • ddev exec drush site:install --account-name=admin --account-pass=admin

这将像向导一样创建您的站点,但具有一些样板配置。您的用户名和密码将是admin

现在启动站点以在浏览器中查看它:

  • ddev launch

您现在已准备好开始构建您的网站,但最好的做法是检查您对/sites/web/default目录的权限是否正确当您在本地工作时,这不是一个重要问题,但如果您将这些权限转移到生产服务器,它们将带来安全风险。

第 4 步 — 检查您的权限

在向导安装期间,或者当您的欢迎页面第一次加载时,您可能会看到有关您的/sites/web/default目录和该目录中的一个文件的权限设置的警告settings.php.

安装脚本运行后,Drupal将尝试将设置web/sites/default目录权限,read以及execute对所有群体:这是一个555权限设置。它也将尝试设置权限default/settings.phpread-only,或444如果遇到此警告,请chmod从项目的根目录运行这两个命令。不这样做会带来安全风险:

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

要验证是否有正确的权限,运行此ls用命令alh,和d开关:

  • ls -alhd web/sites/default web/sites/default/settings.php

检查您的权限是否与以下输出匹配:

Output
dr-xr-xr-x 8 sammy staff 256 Jul 21 12:56 web/sites/default -r--r--r-- 1 sammy staff 249 Jul 21 12:12 web/sites/default/settings.php

您现在已准备好在本地机器上开发 Drupal 9 网站。

第 5 步 — 在 Drupal 中创建您的第一篇文章

为了测试 Drupal 的某些功能,您现在将使用 Web UI 创建一个帖子。

在站点的初始页面上,单击上方菜单左边缘的“内容”按钮。现在单击蓝色的添加内容按钮。将出现一个新页面。点击文章,将出现另一个页面。

Drupal 9 创建文章提示

添加您喜欢的任何标题和内容。您也可以添加图像,例如DigitalOcean 的壁纸之一准备好后,单击蓝色的保存按钮。

您的第一篇文章将出现在您的网站上。

Drupal 9 创建的帖子

由于 Docker 和 DDEV,您现在可以在本地机器上开发 Drupal 9 网站,而无需与服务器交互。在接下来的步骤中,您将管理 DDEV 容器以适应您的工作流程。

步骤 6 — 管理 DDEV 容器

当你完成你的项目开发,或者当你想休息一下时,你可以停止你的 DDEV 容器而不必担心数据丢失。DDEV 可以管理多个项目之间的快速上下文切换;这是它最有用的功能之一。您的代码和数据始终保留在您的项目目录中,即使在您停止或删除 DDEV 容器之后也是如此。

要释放资源,您可以随时停止 DDEV。从项目的根目录,运行以下命令:

  • ddev stop

DDEV 是全局可用的,所以你可以ddev从任何地方运行命令,只要你指定 DDEV 项目:

  • ddev stop d9test

您还可以使用ddev list以下命令一次查看所有项目

  • ddev list

DDEV 包括许多其他有用的命令

您可以随时重启 DDEV 并在本地继续开发。

结论

在本教程中,您在 DDEV 的帮助下,使用 Docker 和容器化的强大功能在本地开发 Drupal 站点。DDEV 还与众多 IDE 很好地集成,它为AtomPHPStormVisual Studio Code (vscode)提供了内置的 PHP 调试从这里,您还可以了解有关使用 DDEV 为 Drupal 创建开发环境开发其他 PHP 框架(如 WordPress )的更多信息

觉得文章有用?

点个广告表达一下你的爱意吧 !😁