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

来自菜鸟教程
跳转至:导航、​搜索

作为 Write for DOnations 计划的一部分,作者选择了 Diversity in Tech Fund 来接受捐赠。

介绍

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

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

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

先决条件

要完成本教程,您需要:

注意: 可以在远程服务器上使用 DDEV 开发 Drupal 9,但是您需要一个解决方案才能在 Web 浏览器中访问 localhostDDEV 命令 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

你会看到这样的输出:

OutputDDEV-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

您将看到以下输出:

OutputCreate 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 包管理器中的包列表(您可以在 Debian 中使用 apt,否则使用与您的 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

你会看到这样的输出:

OutputDDEV-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

您将看到以下输出:

OutputCreate 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-projectdrupal-site-1 等目录名称。

创建您的项目根目录并在其中导航:

mkdir d9test
cd d9test

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

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

你会看到这样的输出:

OutputCreating 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'.

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

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。 初始化完成后,您将看到如下输出(您的端口号可能不同):

...
[secondary_label 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 和 [X171X ]。


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

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。 现在您将在浏览器中查看您的项目并配置您网站的设置。

第三步——配置你的 Drupal 9 项目

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

ddev launch

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

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

选项 1 — 使用向导

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

您的新网站将加载欢迎消息。

选项 2 — 使用命令行

在项目的根目录中,运行 ddev exec 命令以使用 drush 安装默认 Drupal 站点:

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 目录的读取和执行权限:这是一个555 权限设置。 它还将尝试将 default/settings.php 的权限设置为 read-only444。 如果遇到此警告,请从项目的根目录运行这两个 chmod 命令。 不这样做会带来安全风险:

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

要验证您是否拥有正确的权限,请使用 alhd 开关运行此 ls 命令:

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

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

Outputdr-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 创建一个帖子。

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

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

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

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

第 6 步 — 管理 DDEV 容器

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

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

ddev stop

DDEV 全局可用,因此您可以在任何地方运行 ddev 命令,只要您指定 DDEV 项目:

ddev stop d9test

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

ddev list

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

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

结论

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